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

Posted kailugaji

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MATLAB常微分方程数值解——欧拉法改进的欧拉法与四阶龙格库塔方法相关的知识,希望对你有一定的参考价值。

MATLAB常微分方程数值解

作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/

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

技术分享图片

2.欧拉法

 技术分享图片

3.改进的欧拉法

技术分享图片

4.四阶龙格库塔方法

技术分享图片

5.例题

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

技术分享图片

matlab程序:

function z=f(x,y)
z=-y*(1+x*y);
function R_K(h)
%欧拉法
y=1;
fprintf(‘欧拉法:x=%f, y=%f
‘,0,1);
for i=1:1/h
    x=(i-1)*h;
    K=f(x,y);
    y=y+h*K;
    fprintf(‘欧拉法:x=%f, y=%f
‘,x+h,y);
end
fprintf(‘
‘);
%改进的欧拉法
y=1;
fprintf(‘改进的欧拉法:x=%f, y=%f
‘,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
‘,x+h,y);
end
fprintf(‘
‘);
 %龙格库塔方法
 y=1;
fprintf(‘龙格库塔法:x=%f, y=%f
‘,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
‘,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。

 

以上是关于MATLAB常微分方程数值解——欧拉法改进的欧拉法与四阶龙格库塔方法的主要内容,如果未能解决你的问题,请参考以下文章

Matlab常微分方程数值解法

数值分析:用改进欧拉法解微分方程初值问题(vf编程) 100

matlab编程问题利用欧拉方法求常微分方程近似数值解

MATLAB-1个实例-欧拉法改进欧拉法ode45求解微分方程

MATLAB实战应用案例:欧拉法改进欧拉法ode45求解微分方程实例

MATLAB实战应用案例:欧拉法改进欧拉法ode45求解微分方程实例