• 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。

  • 相关阅读:
    tail,more查看日志(定点和翻页)
    Python:浅拷贝和深拷贝
    mybatis sql查子list
    mybatis在insert中获取到id
    mvn安装jar到本地仓库
    微信支付wxpay -- 移动端app第二章节 -- java 后端代码
    微信支付wxpay -- 移动端app第一章节 -- 注意点
    java字符串大小写转化
    Zxing图片右下角生成二维码
    switchTap、navigateTo、switchTap
  • 原文地址:https://www.cnblogs.com/kailugaji/p/10278619.html
Copyright © 2020-2023  润新知