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

目录

1. 题目

2. 算法原理

3. 代码

4. 结果

4.1 运行结果

4.2 结果分析


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

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

1. 题目

用经典四阶龙格库塔方法对初值问题\left\{\begin{array}{l} y^{\prime}=-20 y \\ y(0)=1 \end{array}\right.,步长分别取求解,观察稳定区间的作用。

2. 算法原理

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

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

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

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

y_{i+1}=y_i+c_1 K_1+c_2 K_2+c_3 K_3+c_4 K_4

其中:

\left\{\begin{array}{l} K_1=h f\left(x_i, y_i\right) \\ K_2=h f\left(x_i+a_2 h, y_i+b_{21} K_1\right) \\ K_3=h f\left(x_i+a_3 h, y_i+b_{31} K_1+b_{32} K_2\right) \\ K_4=h f\left(x_i+a_4 h, y_i+b_{41} K_1+b_{42} K_2+b_{43} K_3\right) \end{array}\right.

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

\begin{gathered} a_2=a_3=b_{21}=b_{32}=\frac{1}{2} \\ b_{31}=b_{41}=b_{42}=0 \\ a_4=b_{43}=1 \\ c_1=c_4=\frac{1}{6} \\ c_2=c_3=\frac{1}{3} \end{gathered}

其整合之后为:

\left\{\begin{array}{l} y_{i+1}=y_i+\frac{1}{6}\left(K_1+2 K_2+2 K_3+K_4\right) \\ K_1=h f\left(x_i, y_i\right) \\ K_2=h f\left(x_i+\frac{h}{2}, y_i+\frac{1}{2} K_1\right) \\ K_3=h f\left(x_i+\frac{h}{2}, y_i+\frac{1}{2} K_2\right) \\ K_4=h f\left(x_i+h, y_i+K_3\right) \end{array}\right.

其中h为步长。

3. 代码

clear;
clc;

for step = [0.1, 0.2]
    
    x_0 = 0;
    y_0 = 1;
    num = floor(1/step);
    n = 1;
    X_output = [0];
    Y_output = [1];

    disp("y'= -20 * y")
    while n <= num
        x_1 = x_0 + step;
        K_1 = step * fun(x_0,y_0);
        K_2 = step * fun(x_0 + step/2, y_0 + K_1/2);
        K_3 = step * fun(x_0 + step/2, y_0 + K_2/2);
        K_4 = step * fun(x_0 + step, y_0 + K_3);
        y_1 = y_0 + (K_1 + 2 * K_2 + 2 * K_3 + K_4) / 6 ;
        X_output = [X_output x_1];
        Y_output = [Y_output y_1];
        x_0 = x_1;
        y_0 = y_1;
        n = n + 1;
    end
    figure()
    plot(X_output,Y_output)
    xlabel('x')
    ylabel('y')
    title(['Runge-Kutta4阶,步长为:', num2str(step)])
    X_output
    Y_output
    clear X_output Y_output
end

[x,y] = ode45('fun', [0:1], 1);
figure()
plot(x,y)
xlabel('x')
ylabel('y')
title('自带函数求解结果')

function dy = fun(x, y)
dy = - 20*y;
end

4. 结果

4.1 运行结果

Step = 0.1 时

X_output =
0    0.1000    0.2000    0.3000    0.4000    0.5000    0.6000    0.7000    0.8000    0.9000          
1.0000

Y_output =
1.0000    0.3333    0.1111    0.0370    0.0123    0.0041    0.0014    0.0005    0.0002    0.0001    0.0000

Step = 0.2时
X_output =
0    0.2000    0.4000    0.6000    0.8000    1.0000

Y_output =
1           5          25         125         625        3125

 

 

4.2 结果分析

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

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

  • 39
    点赞
  • 218
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 15
    评论
四阶龙格库塔法是一种用于数值求常微分方程的方法,可以用于决各种阶数的微分方程。在MATLAB中,有许多开发者提供了相关的程序和代码来实现四阶龙格库塔法微分方程。 其中一个资源是一个包含自定义MATLAB函数、丰富的演示实例和详细说明文档的MATLAB程序,可用于求常微分方程。该程序是经过测试和校正后百分百成功运行的,使用简单易懂。 另外还有一个MATLAB项目全套源码,其中包含了四阶龙格库塔法的源代码。这些源码也是经过测试和校正的,确保能够成功运行。 通过使用这些资源中提供的MATLAB程序和源代码,您可以轻松地实现四阶龙格库塔法来求四阶微分方程。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [四阶龙格库塔法(Runge-Kutta)求常微分方程的Matlab程序及案例.rar](https://download.csdn.net/download/MatlabFans_Mfun/15771769)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [MATLAB四阶龙格库塔法_求微分方程数值_源程序代码_fourth_order_Runge_Kutta_matlab](https://download.csdn.net/download/m0_53407570/85190131)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

vm-1215

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

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

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

打赏作者

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

抵扣说明:

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

余额充值