存在吸引子的龙格-库塔

计算科学 Python 数字 龙格库塔
2021-12-19 17:37:44

假设您正在求解一个具有吸引子的数值方程组(无论初始条件设置如何,所有不同的解决方案都将接近包含所谓吸引子的一组特定值)。采用的数值方法是四阶龙格-库塔法。

现在假设您采用吸引子解决方案的最终值并及时向后积分。结果曲线偏离原始吸引子轨迹并最终“发散”是否正常?

原则上我的猜测是它不应该遵循原始的吸引子解决方案,因为不同的解决方案会收敛到它。然而,它最终发散的事实让我认为我使用的代码是错误的。

编辑:

应用户的要求,我编写了方程式:

x˙=y

y˙=32yy2+12x4x3

点表示时间导数。

代码是:

def rk4trial(f,v0,t0,tf,n,V):
    t=np.linspace(t0,tf,n)
    h=t[1]-t[0]
    v=v0
    for j in range(n):
        V.append(v)
        k1=f(v,t[j])*h
        k2=f(v+0.5*k1,t[j]+0.5*h)*h
        k3=f(v+0.5*k2,t[j]+0.5*h)*h
        k4=f(v+k3,t[j]+h)*h
        v=v+(k1+2*k2+2*k3+k4)/6
    return V, t, h

向后积分时,我只是将 tf 设置为初始时间,将 t0 设置为最终时间,并将最终值用作初始条件。

2个回答

您遇到的问题可能不是您选择算法的结果,而实际上是应用时间反转后产生的动态系统的结果。根据吸引子的定义,在动力系统的流动下,吸引子某个邻域中的所有点都将收敛到吸引子t. 然而,时间反转只是简单地交换了所述流动的方向,因此当时间反转时,吸引子周围足够小的邻域中的每个点都会远离吸引子,因此稳定性翻转并且该吸引子成为系统的不稳定平衡。

现在来看看数值效果。你是对的,因为有许多解决方案收敛到吸引子,计算的有限精度性质将导致你回溯的解决方案没有排队。至于爆破,这是这个微分方程系统的特定特征的结果。我们可以很容易地证明(0,0)是该系统的唯一平衡,但是如果您查看该系统的相平面中的解,您会看到轨迹围绕原点呈螺旋状为t. 这实质上意味着该系统的每个可能的轨迹在原点附近任意靠近,因此回溯这些轨迹有任何错误都会导致不同的轨迹。此外,由于每条轨迹都回到原点,因此在时间反转中,由于没有其他平衡点,每个解都会崩溃。

在此处输入图像描述

您可能已经看到对标量方程的 ODE 动力学的描述x(t)=f(t,x(t))以一个形式t,x情节,其中一个人在整个情节中绘制小箭头t,x飞机。从一个特定的轨迹开始t,x0然后 value 会跟随它沿途遇到的箭头。

现在考虑一个吸引子,即一条曲线t,x所有这些轨迹都被吸引到的空间。这种吸引力意味着曲线下方的箭头必须指向曲线,在曲线上它们指向与曲线相切的箭头,在曲线上方它们必须指向曲线下方。现在想象你正在向后积分并且你已经积累了一些数值误差,所以你不再完全在吸引子曲线上。由于您现在沿着相反方向的箭头,从什么是“吸引子”的陈述中可以清楚地看出,如果您在相反方向工作,吸引子实际上会变成“排斥者”,并且您将一旦你不再完全处于曲线上,就必须远离它。