[MATLAB]常微分方程数值求解(ode45 ode15s ode23 solver)
本次讨论取材于中南大学《科学计算与matlab语言》内容为常微分方程数值解法
- 常微分方程数值求解的一般概念
- 常微分方程数值求解函数
- 刚性问题
常微分方程数值求解的一般概念
求解常微分方程初值问题就是寻找函数y(t)使之满足如下方程:
所谓其数值解法,就是求y(t)在离散结点t0处的函数近似值y0的方法
- 单步法:在计算Yn+1时只用到前一步的Yn,因此在有了初值之后就可以逐步往下计算,其代表是龙格–库塔(Runge-Kutta)法.
- 多步法:在计算Yn+1时,除了用到前一步的值Yn之外,还要用到Yn-p(p=1,2,…,k,k>0)的值,即前面的k步,其代表就是亚当斯(Adams)法。
常微分方程的求解函数
函数调用格式为:
[t,y]=solver(filename,tspan,y0,option)
其中,t和y分别给出时间向量和相应的数值解;solver为求常微分方程数值解的函数;filename是定义f(t,y)的函数名,该函数必须返回一个列向量;tspan形式为[t0,tf],表示求解区间;y0是初始状态向量;Option是可选参数,用于设置求解属性.
常微分方程数值求解函数的统一命名格式:
odennxx
其中ode是Ordinary Differential Equation的缩写,是常微分方程的意思;nn是数字,代表所用方法的阶数;xx是字母,用于标注方法的专门特征。
>> f=@(t,y) (y^2-t-2)/4/(t+1);
>> [t,y]=ode23(f,[0,10],2);
>> y1=sqrt(t+1)+1;
>> plot(t,y,'b:',t,y1,'r');
>>
例2 已知一个二阶线性系统的微分方程为:
取a=2,绘制系统的时间响应曲线和相平面图。
令x2=x,x1=x’,则得到系统的状态方程:
f=@(t,x) [-2,0;0,1]*[x(2);x(1)];
[t,x]=ode45(f,[0,20],[1,0]);
subplot(2,2,1);plot(t,x(:,2));
subplot(2,2,2);plot(x(:,2),x(:,1));
刚性问题
有一类常微分方程,其解的分量有的变化很快,有的变化很慢,且相差悬殊,这就是所谓的刚性问题(Stiff)
例3 假如点燃一个火柴,火焰球迅速增大直至某个临界体积,然后,维持这一体积不变,其原因是火焰球内部燃烧耗费的氧气和从球表面所或氧气达到平衡。
主要观看λ值得大小,是否会真正影响问题模型!
>> lamda=0.01;
>> f=@(t,y) y^2-y^3;
>> tic;[t,y]=ode45(f,[0,2/lamda],lamda);toc
Elapsed time is 0.034000 seconds.
>> disp(['ode45计算的点数' num2str(length(t))]);
ode45计算的点数157
>>
时间已过0.034000秒
ode45计算的点数157
>> lamda=1e-5;
>> f=@(t,y) y^2-y^3;
>> tic;[t,y]=ode45(f,[0,2/lamda],lamda);toc
Elapsed time is 5.690000 seconds.
>> disp(['ode45计算的点数' num2str(length(t))]);
ode45计算的点数120565
>>
不同的λ值,式子所用的秒数不同,问题瞬间变成刚性,直接换用ode15s,再去计算!直接秒出答案!
>> tic;[t,y]=ode15s(f,[0,2/lamda],lamda);toc
Elapsed time is 0.348000 seconds.
>> disp(['ode15s计算的点数' num2str(length(t))]);
ode15s计算的点数98
>>
>> f=@(t,x) [-8/3*x(1)+x(2)*x(3);-10*x(2)+10*x(3);-x(2)*x(1)+28*x(2)-x(3)];>> [t,x]=ode45(f,[0,50],[0,0,10^(-10)]);>> plot(t,x)
[MATLAB]常微分方程数值求解(ode45 ode15s ode23 solver)相关推荐
- matlab常微分方程数值求解
本节将介绍常微分方程初值问题的数值求解,主要内容分为三个部分:常微分方程数值求解的概念.求解函数及刚性问题. 一.常微分方程数值求解的一般概念 首先,凡含有参数,未知函数和未知函数导数 (或微分) 的 ...
- 常微分方程数值解matlab欧拉,matlab 常微分方程数值解法 源程序代码
matlab 常微分方程数值解法 源程序代码 所属分类:其他 开发工具:matlab 文件大小:16KB 下载次数:41 上传日期:2019-02-13 11:03:29 上 传 者:XWLYF 说明 ...
- matlab数学实验报告西安交通大学微分方程模型高为16米,数学实验第二次作业——常微分方程数值求解...
实验4常微分方程数值解 实验目的: 1. 练习数值积分的计算: 2. 掌握用MATLAB软件求微分方程初值问题数值解的方法: 3. 通过实例学习用微分方程模型解决简化的实际问题: 4. 了解欧拉方法和 ...
- 常微分方程数值求解【python】
简述 这里只考虑最为简单的一种常微分方程 dydx=f(x,y)\frac{dy}{dx} = f(x,y)dxdy=f(x,y) 然后这里的实例都是以下面这个方程来做展示的. dydx=y∗(1− ...
- 微分方程matlab源代码,matlab 常微分方程数值解法 源程序代码
11.1 Euler方法 380 11.1.1 Euler公式的推导 380 11.1.2 Euler方法的改进 383 11.2 Runge-Kutta方法 385 11.2.1 二阶Runge-K ...
- matlab的数值求解实验报告,matlab计算方法实验报告5(数值积分)
计算方法实验报告(5) 学生姓名杨贤邦学号指导教师吴明芬实验时间2014.4.16地点综合实验大楼203 实验题目数值积分方法 实验目的●利用复化梯形.辛普森公式和龙贝格数值积分公式计算定积分的 近似 ...
- matlab之常微分方程(ODE)求解
问题描述:已知理想全混釜的初始进料条件,并知道各物料的动力学,求解足够长时间后全混釜中各物质的浓度 常微分方程:只包含一个自变量的微分方程是常微分方程(Ordinary differential eq ...
- 非线性常微分方程组 matlab,matlab常微分方程和常微分方程组求解.doc
常微分方程和常微分方程组的求解 ? 一.实验目的: 熟悉Matlab软件中关于求解常微分方程和常微分方程组的各种命令,掌握利用Matlab软件进行常微分方程和常微分方程组的求解. ? 二.相关知识 在 ...
- matlab定积分上界求解,定积分问题的数值求解及Matlab实现.pdf
定积分问题的数值求解及Matlab实现 第28卷第5期 哈 尔滨 商 业 大 学 学报 (自然科学版) Vo1.28No.5 2012年 10月 JournalofHarbinUniversityof ...
最新文章
- 我在北京大学,剑桥大学读的书
- 开源 serverless 产品原理剖析 - Kubeless 1
- 阿里P7跳槽后曝光薪资截图:新公司月入税后五万多,很满足!
- php多级审核,BOS单据多级审核需在单据头上列示多个审核人员的处理方法
- Oracle基础查询
- NLPIR/ICTCLAS 2015 分词系统使用
- 计算机C盘空间减少,速减C盘空间,win7只需两步可减小C盘数G空间
- 【IDEA】如何修改已创建的文件类型,虽然很无脑,但是也很棘手
- 2021清北学堂储备营Day1
- 王二 设计模式读书笔记
- Zynga的数据分析
- 云控系统都有那些功能?
- 程序猿和测试媛——组合在一起的原因
- 实验记录 | BWA的安装
- 一个扫描器搞定TCP协议所有问题
- 全球与中国矿物加工工程市场深度研究分析报告
- linux shell脚本编写 | 三角形 | 梯形 | 菱形 | 九九乘法表 | 矩形 | 超详细
- 图片插入word文档后清晰度降低的解决方法
- 双 JK 触发器 74LS112 逻辑功能。真值表_由热靴移至机侧 尼康发布全新闪灯触发器_...
- 服务器bat脚本删除空文件夹,windows批处理命令(1)——右键清理空文件夹