四阶Runge-Kutta(Matlab实现)

目录

1、原理

2、案例

3、代码 

4、结果

​ 


1、原理

 

2、案例

 

3、代码 

function sijierungekutta(X0,Y0,Z0,h,T)
dxdt=inline('-0.013*x-1000*x*y', 'x', 'y', 'z');

dydt=inline('-2500*y*z', 'x', 'y', 'z');

dzdt=inline('-0.013*x-1000*x*y-2500*y*z', 'x', 'y', 'z');

x0 = [1 1 0]';
h=0.0001;
T=0.0201;
t = [0:0.0001:0.0201]';
x1 = ones(T/h+1,3);
x1(1,:) = x0;
x2 = ones(T/h+1,3);
x2(1,:) = x0;
f1 = ones(T/h,3);
f2 = ones(T/h,3);
f3 = ones(T/h,3);
f4 = ones(T/h,3);
format long

for i=1:T/h

f1(i,1) = feval(dxdt,x1(i,1),x1(i,2),x1(i,3)); 

f1(i,2) = feval(dydt,x1(i,1),x1(i,2),x1(i,3)); 

f1(i,3) = feval(dzdt,x1(i,1),x1(i,2),x1(i,3));

f2(i,1) = feval(dxdt,x1(i,1)+h/2*f1(i,1),x1(i,2)+h/2*f1(i,2),x1(i,3)+h/2*f1(i,3));

f2(i,2) = feval(dydt,x1(i,1)+h/2*f1(i,1),x1(i,2)+h/2*f1(i,2),x1(i,3)+h/2*f1(i,3));

f2(i,3) = feval(dzdt,x1(i,1)+h/2*f1(i,1),x1(i,2)+h/2*f1(i,2),x1(i,3)+h/2*f1(i,3));

f3(i,1) = feval(dxdt,x1(i,1)+h/2*f2(i,1),x1(i,2)+h/2*f2(i,2),x1(i,3)+h/2*f2(i,3));

f3(i,2) = feval(dydt,x1(i,1)+h/2*f2(i,1),x1(i,2)+h/2*f2(i,2),x1(i,3)+h/2*f2(i,3));

f3(i,3) = feval(dzdt,x1(i,1)+h/2*f2(i,1),x1(i,2)+h/2*f2(i,2),x1(i,3)+h/2*f2(i,3));

f4(i,1) = feval(dxdt,x1(i,1)+h*f3(i,1),x1(i,2)+h*f3(i,2),x1(i,3)+h*f3(i,3));

f4(i,2) = feval(dydt,x1(i,1)+h*f3(i,1),x1(i,2)+h*f3(i,2),x1(i,3)+h*f3(i,3));

f4(i,3) = feval(dzdt,x1(i,1)+h*f3(i,1),x1(i,2)+h*f3(i,2),x1(i,3)+h*f3(i,3));

x2(i+1,:) = x1(i,:)+h/6*(f1(i,:)+2*f2(i,:)+2*f3(i,:)+f4(i,:));

    x1(i+1,:) = x2(i,:);
end
format long
fprintf('\n      x          y         z         t   \n');
for j=1:T/h+1
fprintf('  %7.5f  %8.7f  %8.7f  %8.7f  \n',t(j),x2(j,1),x2(j,2),x2(j,3));
    
end

subplot(1,3,1);
plot(x2(1:1:T/h+1,1),x2(1:1:T/h+1,2),'r');%x-y的二维投影
title('x-y');

subplot(1,3,2)
plot(x2(1:1:T/h+1,1),x2(1:1:T/h+1,3),'r');%x-z的二维投影
title('x-z');

subplot(1,3,3)
plot(x2(1:1:T/h+1,2),x2(1:1:T/h+1,3),'r');%y-z的二维投影
title('y-z');

% plot3(x1(1:1:T/h+1,1),x1(1:1:T/h+1,2),x1(1:1:T/h+1,3),'r');%三维图像
end

4、结果

 

 

       二维投影中可见x,y,z的关系分布,中间变量为时间t ,自变量令为x取值范围取[0,0.0201],取h=0.0001时,倍数为20,40,200可得最后结果。 

 

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝科研社

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值