Matlab之四阶龙格—库塔法方法:解常微分初值问题
目录
1. 题目
2. 算法原理
3. 代码
4. 结果
4.1 运行结果
4.2 结果分析
【若觉文章质量良好且有用,请别忘了点赞收藏加关注,这将是我继续分享的动力,万分感谢!】
直接通过解题的方式进行学习,代入感更强
1. 题目
用经典四阶龙格库塔方法对初值问题,步长分别取求解,观察稳定区间的作用。
2. 算法原理
某些常微分方程有解析解,但大多数都没有,因此需要进行数值解计算。
龙格—库塔法是利用f(x,y)在某些特殊点上的函数值的线性组合,来估算高阶单步法的平均斜率。
经典的龙格—库塔法是四阶的,也就是在中用四个点处的斜率来估计其平局斜率,构成四阶龙格—库塔公式
其准确解y(x)在一系列点xi处y(xi)的近似值yi的方法,yi称为数值解。经典的四阶龙格库塔法方程如下:
其中:
其中的各个参数具体如下:
其整合之后为:
其中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 <= numx_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;endfigure()plot(X_output,Y_output)xlabel('x')ylabel('y')title(['Runge-Kutta4阶,步长为:', num2str(step)])X_outputY_outputclear 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.0000Y_output =
1.0000 0.3333 0.1111 0.0370 0.0123 0.0041 0.0014 0.0005 0.0002 0.0001 0.0000Step = 0.2时
X_output =
0 0.2000 0.4000 0.6000 0.8000 1.0000Y_output =
1 5 25 125 625 3125
4.2 结果分析
用经典四阶龙格库塔方法求解,其求解结果与设置得步长有很大的相关性,步长设置合适时,其求解情况与真实值基本一致,趋于稳定。但步长加大时,其求解值与真实值相差太大。
【若觉文章质量良好且有用,请别忘了点赞收藏加关注,这将是我继续分享的动力,万分感谢!】
Matlab之四阶龙格—库塔法方法:解常微分初值问题相关推荐
- matlab:使用4阶龙格库塔方法求解常微分方程组
%书籍:常用数值算法及其matlab实现 %第10章 常微分方程初值问题的数值解法,例10.14使用 %四阶龙格库塔方法 function [t,z] = rk4symeq(fun, t0, tf, ...
- 有确定项微分方程的matlab程序,微分方程的数值解法matlab四阶龙格—库塔法课件...
<微分方程的数值解法matlab四阶龙格-库塔法课件>由会员分享,可在线阅读,更多相关<微分方程的数值解法matlab四阶龙格-库塔法课件(36页珍藏版)>请在人人文库网上搜索 ...
- matlab:使用四阶龙格库塔方法求解微分方程组
%书籍:常用数值算法及其matlab实现 %第10章 常微分方程初值问题的数值解法,例10.14使用 %四阶龙格库塔方法 function [t,z] = rk4symeq(fun, t0, tf, ...
- 用四阶龙格-库塔方法求微分方程组
最近一段时间再忙期末考试,小学期课程设计的东西,没怎么更新博客.... 更新一个用四阶龙格库塔方法求解脉冲微分方程,题目来源是一篇论文<Impulsive control of projecti ...
- 常微分方程的数值解-欧拉、四阶龙格-库塔法等C语言
*题目描述:*求常微分方程y'=y-2x/y && y(0)=1的数值解.解析解为:y=sqrt(1+2x) 编译环境vc++6.0: 代码如下: /* 1.y'=y-2x/y &am ...
- 经典龙格-库塔法(四阶龙格-库塔法)求解求一阶常微分方程相应的特解的Python程序
基本原理 例题 代码 #四阶龙格-库塔法 #求一阶常微分方程,相应的特解 #x变量的区间 a = 0 b = 1 #已知条件 X = [0] Y = [1] h = 0.2 #设置步长 n = (b- ...
- 计算方法实验(三):四阶龙格-库塔方法
四阶Runge-Kutta数学原理 给定常微分方程初值问题 {dydx=f(x,y),a≤x≤by(a)=αh=b−aN\left\{ \begin{matrix} \frac{\text{dy}}{ ...
- 四阶龙格-库塔法求解常微分方程的初值问题
算法原理和程序框图 龙格-库塔法是一种求其准确解y(x)在一系列点xi处y(xi)的近似值yi的方法,yi称为数值解.经典的四阶龙格库塔法方程如下: y'=f(t,y),y(t0)=y0输出按如下求解 ...
- 四阶龙格库塔方程解二阶常微分方程组并计算船舶在迎浪下的纵摇埀荡耦合运动方程-附Python代码
0 写在前面 这篇博客是在将我上一篇博客的matlab代码移植到python中,应为后续要开展深度强化学习下的船舶减摇研究,总的来说还是在python上做这项工作比较合适.具体方程的解法和背景不在赘述 ...
- matlab 一元方程程序,用牛顿方法解一元非线性方程的根(Matlab实现)
题目:用牛顿法求方程x-cos(x)=0的实根(精确到1E-6). (1)要求用函数调用. (2)进一步研究和弦截法作比较. 算法分析: (1) 此题是利用牛顿方法解一元非线性方程的根.( ...
最新文章
- 关于WSE_CLIPSIBLINGS
- 【java基础】POJO和JavaBean的区别
- linux图形图像三剑客,就linux三剑客简单归纳
- JS类似Java String.format的函数
- docker相关配置
- 通过 PXE 自动安装操作系统:部署 PXE Server
- Python字符串replace()
- Xamarin.Forms入门-使用 Xamarin.Forms 来创建跨平台的用户界面
- 拿到窗口ID,为什么画的内容没有显示出来
- 大一c语言程序考试常考程序题,C语言程序常考题
- 【功能更新-1:选项统一】利用python生成自制英语试题程序开发
- html页面中添加分页符,在生成的HTML中插入分页符.doc
- 南海云课堂春季11(T)K1 拓展:单调队列
- 优化 AIX 6.1 的性能 (转帖)
- 携程网今日瘫痪 官方称遭到不明攻击
- 比较全的Struts介绍04
- 生活就是这样充满一些小插曲的2020.11.21日记
- php压缩包 加密,php加密压缩文件
- 阿里达摩盘:双11大促人群诊断、DEEPLINK洞察、大促标签定制
- 工厂废品小爱同学mini的重生(3)——— Uboot和硬改SD卡