【发布时间】:2020-02-23 01:59:23
【问题描述】:
我想绘制洛伦兹系统 (s=10, r=28, b=8/3) 的起始条件,它应该给出 0,因为它是由 v1 和 v2 跨越的平面中的起始条件并通过临界点 (0,0,0)(平面方程:-x + (-9- \sqrt(1201))/56 * y = 0)当我使用 Runge-Kutta 方法以起始条件 ((-9-sqrt(1201))/56 绘制解决方案时,1,10) 我的图没有收敛到 0,我不知道为什么。
[X,Y,Z,T] = Runge(T0,(-9-sqrt(1201))/56,1,10,h,1000);
plot(T,X);
plot(T,Y);
plot(T,Z);
我希望有一个解决方案,其中图中的线变为 0。但我得到了一些随机函数,它一直上下波动。
这可能是由近似值引起的吗?
提前致谢
这是Runge函数
function [X,Y,Z,T] = Runge(t0,x0,y0,z0,h,n)
X=[x0];
Y=[y0];
Z=[z0];
T=[t0];
k1x = 0;
k1y = 0;
k1z = 0;
k2x=0;
k2y=0;
k2z=0;
k3x=0;
k3y=0;
k3z=0;
k4x=0;
k4y=0;
k4z=0;
for k = 1:n
T(k+1)= T(k) +h;
k1x = F(X(k),Y(k),Z(k));
k1y = G(X(k),Y(k),Z(k));
k1z = H(X(k),Y(k),Z(k));
k2x = F(X(k)+h/2*k1x,Y(k) + h/2*k1y, Z(k) + h/2*k1z);
k2y= G(X(k)+h/2*k1x,Y(k) + h/2*k1y, Z(k) + h/2*k1z);
k2z= H(X(k)+h/2*k1x,Y(k) + h/2*k1y, Z(k) + h/2*k1z);
k3x= F(X(k)+h/2*k2x,Y(k)+h/2*k2y,Z(k) + h/2*k2z);
k3y=G(X(k)+h/2*k2x,Y(k)+h/2*k2y,Z(k) + h/2*k2z);
k3z=H(X(k)+h/2*k2x,Y(k)+h/2*k2y,Z(k) + h/2*k2z);
k4x= F(X(k)+h*k3x,Y(k)+h*k3y,Z(k)+h*k3z);
k4y=G(X(k)+h*k3x,Y(k)+h*k3y,Z(k)+h*k3z);
k4z=H(X(k)+h*k3x,Y(k)+h*k3y,Z(k)+h*k3z);
X(k+1) = X(k) + h/6 * (k1x + 2*k2x + 2*k3x + k4x);
Y(k+1) = Y(k) + h/6 * (k1y + 2*k2y + 2*k3y + k4y);
Z(k+1) = Z(k) + h/6 * (k1z + 2*k2z + 2*k3z + k4z);
end
end
【问题讨论】:
-
如果不知道
Runge做了什么,这是不可能回答的。 -
在
Runge、F、G和H中未定义,所以我很惊讶你的代码甚至可以运行。 -
F、G、H是函数,系统中的函数