非线性微分方程求解——RK4算法
Matlab求解程序:
h=0.2;
tf=4;
t=0;
Xin=[1;0];
tlog = zeros(tf/h,1);
xlog = zeros(tf/h,2);
xlog(1,1)=1;
xlog(1,2)=0;
tlog(1,1)=0;
for n =1:tf/h
Xout = RK4(@fuc,t,Xin,h);
tlog(n+1,1)=n*h;
t=n*h;
Xin = Xout;
xlog(n+1,:) = Xin';
end
plot(tlog(:,1),xlog(:,1));
function X_new=RK4(fun,t,Xin,h)
k1=fun(t,Xin);
k2=fun(t+h/2,Xin+h*k1/2);
k3=fun(t+h/2,Xin+h*k2/2);
k4=fun(t+h,Xin+h*k3);
X_new=Xin+(k1+2*k2+2*k3+k4)*h/6;
end
function dXin=fuc(t,Xin)
x1 = Xin(1,:);
x2 = Xin(2,:);
dx1=x2;
dx2=-2*x1^3+sin(2*t);
dXin = [dx1;dx2];
end
输出x的图像: