常微分方程数值解欧拉matlab,MATLAB常微分方程数值解——欧拉法、改进的欧拉法与四阶龙格库塔方法...

MATLAB常微分方程数值解

1.一阶常微分方程初值问题

20190116200113082085.png

2.欧拉法

20190116200113221734.png

3.改进的欧拉法

20190116200113334039.png

4.四阶龙格库塔方法

20190116200113463921.png

5.例题

用欧拉法,改进的欧拉法及4阶经典Runge-Kutta方法在不同步长下计算初值问题。步长分别为0.2,0.4,1.0.

20190116200113723687.png

matlab程序:

function z=f(x,y)

z=-y*(1+x*y);

function R_K(h)

%欧拉法

y=1;

fprintf(‘欧拉法:x=%f, y=%f\n‘,0,1);

for i=1:1/h

x=(i-1)*h;

K=f(x,y);

y=y+h*K;

fprintf(‘欧拉法:x=%f, y=%f\n‘,x+h,y);

end

fprintf(‘\n‘);

%改进的欧拉法

y=1;

fprintf(‘改进的欧拉法:x=%f, y=%f\n‘,0,1);

for i=1:1/h

x=(i-1)*h;

K1=f(x,y);

K2=f(x+h,y+h*K1);

y=y+(h/2)*(K1+K2);

fprintf(‘改进的欧拉法:x=%f, y=%f\n‘,x+h,y);

end

fprintf(‘\n‘);

%龙格库塔方法

y=1;

fprintf(‘龙格库塔法:x=%f, y=%f\n‘,0,1);

for i=1:1/h

x=(i-1)*h;

K1=f(x,y);

K2=f(x+h/2,y+(h/2)*K1);

K3=f(x+h/2,y+(h/2)*K2);

K4=f(x+h,y+h*K3);

y=y+(h/6)*(K1+2*K2+2*K3+K4);

fprintf(‘龙格库塔法:x=%f, y=%f\n‘,x+h,y);

end

结果:

>> R_K(0.2)

欧拉法:x=0.000000, y=1.000000

欧拉法:x=0.200000, y=0.800000

欧拉法:x=0.400000, y=0.614400

欧拉法:x=0.600000, y=0.461321

欧拉法:x=0.800000, y=0.343519

欧拉法:x=1.000000, y=0.255934

改进的欧拉法:x=0.000000, y=1.000000

改进的欧拉法:x=0.200000, y=0.807200

改进的欧拉法:x=0.400000, y=0.636118

改进的欧拉法:x=0.600000, y=0.495044

改进的欧拉法:x=0.800000, y=0.383419

改进的欧拉法:x=1.000000, y=0.296974

龙格库塔法:x=0.000000, y=1.000000

龙格库塔法:x=0.200000, y=0.804636

龙格库塔法:x=0.400000, y=0.631465

龙格库塔法:x=0.600000, y=0.489198

龙格库塔法:x=0.800000, y=0.377225

龙格库塔法:x=1.000000, y=0.291009

>> R_K(0.4)

欧拉法:x=0.000000, y=1.000000

欧拉法:x=0.400000, y=0.600000

欧拉法:x=0.800000, y=0.302400

改进的欧拉法:x=0.000000, y=1.000000

改进的欧拉法:x=0.400000, y=0.651200

改进的欧拉法:x=0.800000, y=0.405782

龙格库塔法:x=0.000000, y=1.000000

龙格库塔法:x=0.400000, y=0.631625

龙格库塔法:x=0.800000, y=0.377556

>> R_K(1)

欧拉法:x=0.000000, y=1.000000

欧拉法:x=1.000000, y=0.000000

改进的欧拉法:x=0.000000, y=1.000000

改进的欧拉法:x=1.000000, y=0.500000

龙格库塔法:x=0.000000, y=1.000000

龙格库塔法:x=1.000000, y=0.303395

注意:在步长h为0.4时,要将for i=1:1/h改为for i=1:0.8/h。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值