• Matlab之四阶龙格—库塔法方法:解常微分初值问题


    目录

    1. 题目

    2. 算法原理

    3. 代码

    4. 结果

    4.1 运行结果

    4.2 结果分析


    【若觉文章质量良好且有用,请别忘了点赞收藏加关注,这将是我继续分享的动力,万分感谢!】

    直接通过解题的方式进行学习,代入感更强

    1. 题目

    用经典四阶龙格库塔方法对初值问题{y=20yy(0)=1{y=20yy(0)=1,步长分别取求解,观察稳定区间的作用。

    2. 算法原理

    某些常微分方程有解析解,但大多数都没有,因此需要进行数值解计算。

    龙格—库塔法是利用f(x,y)在某些特殊点上的函数值的线性组合,来估算高阶单步法的平均斜率。

    经典的龙格—库塔法是四阶的,也就是在(xi,xi+1)(xi,xi+1)中用四个点处的斜率来估计其平局斜率,构成四阶龙格—库塔公式

    其准确解y(x)在一系列点xiyxi)的近似值yi的方法,yi称为数值解。经典的四阶龙格库塔法方程如下:

    yi+1=yi+c1K1+c2K2+c3K3+c4K4yi+1=yi+c1K1+c2K2+c3K3+c4K4

    其中:

    {K1=hf(xi,yi)K2=hf(xi+a2h,yi+b21K1)K3=hf(xi+a3h,yi+b31K1+b32K2)K4=hf(xi+a4h,yi+b41K1+b42K2+b43K3)

    其中的各个参数具体如下:

    a2=a3=b21=b32=12b31=b41=b42=0a4=b43=1c1=c4=16c2=c3=13

    其整合之后为:

    {yi+1=yi+16(K1+2K2+2K3+K4)K1=hf(xi,yi)K2=hf(xi+h2,yi+12K1)K3=hf(xi+h2,yi+12K2)K4=hf(xi+h,yi+K3)

    其中h为步长。

    3. 代码

    1. clear;
    2. clc;
    3. for step = [0.1, 0.2]
    4. x_0 = 0;
    5. y_0 = 1;
    6. num = floor(1/step);
    7. n = 1;
    8. X_output = [0];
    9. Y_output = [1];
    10. disp("y'= -20 * y")
    11. while n <= num
    12. x_1 = x_0 + step;
    13. K_1 = step * fun(x_0,y_0);
    14. K_2 = step * fun(x_0 + step/2, y_0 + K_1/2);
    15. K_3 = step * fun(x_0 + step/2, y_0 + K_2/2);
    16. K_4 = step * fun(x_0 + step, y_0 + K_3);
    17. y_1 = y_0 + (K_1 + 2 * K_2 + 2 * K_3 + K_4) / 6 ;
    18. X_output = [X_output x_1];
    19. Y_output = [Y_output y_1];
    20. x_0 = x_1;
    21. y_0 = y_1;
    22. n = n + 1;
    23. end
    24. figure()
    25. plot(X_output,Y_output)
    26. xlabel('x')
    27. ylabel('y')
    28. title(['Runge-Kutta4阶,步长为:', num2str(step)])
    29. X_output
    30. Y_output
    31. clear X_output Y_output
    32. end
    33. [x,y] = ode45('fun', [0:1], 1);
    34. figure()
    35. plot(x,y)
    36. xlabel('x')
    37. ylabel('y')
    38. title('自带函数求解结果')
    39. function dy = fun(x, y)
    40. dy = - 20*y;
    41. end

    4. 结果

    4.1 运行结果

    1. Step = 0.1
    2. X_output =
    3. 0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000
    4. 1.0000
    5. Y_output =
    6. 1.0000 0.3333 0.1111 0.0370 0.0123 0.0041 0.0014 0.0005 0.0002 0.0001 0.0000
    7. Step = 0.2
    8. X_output =
    9. 0 0.2000 0.4000 0.6000 0.8000 1.0000
    10. Y_output =
    11. 1 5 25 125 625 3125

     

     

    4.2 结果分析

    用经典四阶龙格库塔方法求解,其求解结果与设置得步长有很大的相关性,步长设置合适时,其求解情况与真实值基本一致,趋于稳定。但步长加大时,其求解值与真实值相差太大。

    ​​​​​​​【若觉文章质量良好且有用,请别忘了点赞收藏加关注,这将是我继续分享的动力,万分感谢!】

  • 相关阅读:
    vue中使用@liveqing/liveplayer报错问题踩坑记录
    SpringSecurity框架学习
    SpringCloud Alibaba微服务第4章Docker安装Nacos
    【优化求解】基于matlab遗传算法求解立体仓库出入库路径优化问题【含Matlab源码 2028期】
    web3js实现通过合约方法进行代币交易查询余额
    SpringBoot + openFeign实现远程接口调用
    浅记录一下MATLAB安装心得
    restTemplate 请求 远程调用
    【无公网IP】在公网环境下Windows远程桌面Ubuntu 18.04
    3.3 C++高级编程_函数模板_引入
  • 原文地址:https://blog.csdn.net/weixin_41406486/article/details/127758414