提问人:Pablo Borrego 提问时间:11/5/2023 最后编辑:Lutz LehmannPablo Borrego 更新时间:11/7/2023 访问量:26
Runge-Kutta 与 Taylor 算法
Runge-Kutta vs Taylor algorithm
问:
我正在为我的数值方法科目做一项任务,他们要求使用 Runge-Kutta 和 Taylor 方法来估计微分系统(Chua 电路)的解,其场由下式确定:
F(x,y,z)=\[2\*(y-0.5\*x+ (1/2)*abs(x+1)-abs(x-1)), x-y+z, -2*y\],
为了应用这些算法,我开发了两个函数:
> def taylor(F, ini , t, n):
> k = [0] * (n + 1)
> k[0] = ini
> h = (t - 0)/n
> for i in range(n):
> xk, yk, zk = k[i]
> f1x, f1y, f1z = F
> f2xx = f1x.diff(x)(xk, yk, zk)
> f2xy = f1x.diff(y)(xk, yk, zk)
> f2xz = f1x.diff(z)(xk, yk, zk)
> f2yy = f1y.diff(y)(xk, yk, zk)
> f2yz = f1y.diff(z)(xk, yk, zk)
> f2zz = f1z.diff(z)(xk, yk, zk)
>
> k[i+1] = [xk + (h/2)*f1x(xk, yk, zk) + ((h**2)/6)*(f2xx + 2*f2xy + 2*f2xz + f2yy + 2*f2yz + f2zz),
> yk + (h/2)*f1y(xk, yk, zk) + ((h**2)/6)*(f2yy + 2*f2yz + f2zz),
> zk + (h/2)*f1z(xk, yk, zk)]
> return k
和
> def Runge_Kutta(F,ini,t,n):
> k = [0] * (n + 1)
> k[0] = ini
> h = (t - 0)/n
> for i in range(n):
> xk, yk, zk = k[i]
>
> K1 = F(xk, yk, zk)
> K2 = F(xk + (h/2) * K1[0], yk + (h/2) * K1[1], zk + (h/2) * K1[2])
> K3 = F(xk + (h/2) * K2[0], yk + (h/2) * K2[1], zk + (h/2) * K2[2])
> K4 = F(xk + h * K3[0], yk + h * K3[1], zk + h * K3[2])
>
> x_nuevo = xk + (h/6) * (K1[0] + 2*K2[0] + 2*K3[0] + K4[0])
> y_nuevo = yk + (h/6) * (K1[1] + 2*K2[1] + 2*K3[1] + K4[1])
> z_nuevo = zk + (h/6) * (K1[2] + 2*K2[2] + 2*K3[2] + K4[2])
>
> k[i+1] = [x_nuevo, y_nuevo, z_nuevo]
>
> return k
问题是,如果我为两个函数分配相同的“t”,我会得到不同的结果,但是如果我将“t”应用于 Taylor,将“t/2”应用于 Runge-Kutta,我会得到非常相似的结果。
我想知道为什么会这样。
是因为我的算法错了吗?
答: 暂无答案
评论
h
h**2/2