第12章 MATLAB常微分方程(组)数值求解方程与方程组的数值解
matlab解常微分方程组

matlab解常微分方程组摘要:一、引言1.常微分方程组简介2.Matlab 在解常微分方程组中的应用二、Matlab 解常微分方程组的基本步骤1.安装并配置Matlab2.准备常微分方程组模型3.使用Matlab 求解器求解方程组4.分析解的结果三、Matlab 解常微分方程组的常用命令1.初始化常微分方程组2.定义方程组3.使用ode45 等求解器解方程组4.输出结果四、Matlab 解常微分方程组的实际应用1.物理模型中的应用2.工程领域中的应用3.生物学和经济学模型中的应用五、结论1.Matlab 在解常微分方程组方面的优势2.需要注意的问题和技巧3.展望Matlab 在常微分方程组求解领域的发展前景正文:一、引言常微分方程组在自然科学、工程技术和社会科学等领域中有着广泛的应用。
随着科技的发展,Matlab 作为一种功能强大的数学软件,已经成为常微分方程组求解的重要工具。
本文将介绍Matlab 解常微分方程组的基本方法、常用命令以及实际应用。
二、Matlab 解常微分方程组的基本步骤1.安装并配置Matlab:首先需要在计算机上安装Matlab 软件。
安装完成后,需要对Matlab 进行配置,以便更好地使用相关功能。
2.准备常微分方程组模型:根据实际问题,建立相应的常微分方程组模型。
这包括确定变量、方程和边界条件等。
3.使用Matlab 求解器求解方程组:Matlab 提供了丰富的求解器,如ode45、ode23、ode113 等。
根据问题特点选择合适的求解器,调用相关函数求解常微分方程组。
4.分析解的结果:求解完成后,需要对结果进行分析,检查其合理性和准确性。
可以使用Matlab 内置的图形功能绘制解的图像,直观地了解解的变化规律。
三、Matlab 解常微分方程组的常用命令1.初始化常微分方程组:使用`pdsolve`函数可以求解常微分方程组。
首先需要定义微分方程和边界条件,然后调用`pdsolve`函数求解。
matlab 常系数微分方程组

Matlab常系数微分方程组在数学和工程领域,常系数微分方程组是一种重要的数学工具,用于描述许多自然现象和工程问题。
Matlab是一种功能强大的数值计算软件,它提供了许多工具和函数来求解常系数微分方程组。
本文将介绍如何使用Matlab解决常系数微分方程组的问题。
1. 常系数微分方程组的定义常系数微分方程组是指方程组中的系数是常数,不随自变量的变化而变化。
一般形式的常系数微分方程组可以表示为:a_1*y_1' + a_2*y_2' + ... + a_n*y_n' = g(t)其中,y_1, y_2, ..., y_n是未知函数,a_1, a_2, ..., a_n是常数,g(t)是已知函数。
2. Matlab求解常系数微分方程组的函数Matlab提供了多种函数和工具箱来求解常系数微分方程组。
其中,常用的函数有dsolve和ode45。
2.1 dsolve函数dsolve函数是Matlab中用于求解符号微分方程的函数。
对于常系数微分方程组,可以使用dsolve函数来求解。
例如,对于一个二阶常系数微分方程组:a*y'' + b*y' + c*y = g(t)可以使用以下代码来求解:syms y(t)eqn = a*diff(y, 2) + b*diff(y) + c*y == g(t);sol = dsolve(eqn);其中,y(t)是未知函数,a, b, c是常数,g(t)是已知函数。
eqn是微分方程的符号表达式,sol是方程的解。
2.2 ode45函数ode45函数是Matlab中用于求解常微分方程的函数。
对于常系数微分方程组,可以使用ode45函数来求解。
例如,对于一个二阶常系数微分方程组:a*y'' + b*y' + c*y = g(t)可以使用以下代码来求解:function dydt = odefun(t, y)dydt = zeros(2, 1);dydt(1) = y(2);dydt(2) = (g(t) - b*y(2) - c*y(1)) / a;end[t, y] = ode45(@odefun, [t0, tf], [y0, y0']);其中,odefun是一个自定义的函数,用于定义微分方程组的右侧。
matlab求解常微分方程

matlab求解常微分⽅程本⽂主要介绍matlab中求解常微分⽅程(组)的dsolve和ode系列函数,并通过例⼦加深读者的理解。
⼀、符号介绍D: 微分符号;D2表⽰⼆阶微分,D3表⽰三阶微分,以此类推。
⼆、函数功能介绍及例程1、dsolve 函数dsolve函数⽤于求常微分⽅程组的精确解,也称为常微分⽅程的符号解。
如果没有初始条件或边界条件,则求出通解;如果有,则求出特解。
1)函数格式Y = dsolve(‘eq1,eq2,…’ , ’cond1,cond2,…’ , ’Name’)其中,‘eq1,eq2,…’:表⽰微分⽅程或微分⽅程组;’cond1,cond2,…’:表⽰初始条件或边界条件;‘Name’:表⽰变量。
没有指定变量时,matlab默认的变量为t;2)例程例1.1(dsolve 求解微分⽅程)求解微分⽅程:dsolve('Dy=3*x^2','x')例1.2(加上初始条件)求解微分⽅程:例2(dsolve 求解微分⽅程组)求解微分⽅程组:由于x,y均为t的导数,所以不需要在末尾添加’t’。
2、ode函数在上⽂中我们介绍了dsolve函数。
但有⼤量的常微分⽅程,虽然从理论上讲,其解是存在的,但我们却⽆法求出其解析解,此时,我们需要寻求⽅程的数值解。
ode是Matlab专门⽤于解微分⽅程的功能函数。
该求解器有变步长(variable-step)和定步长(fixed-step)两种类型。
不同类型有着不同的求解器,具体说明如下图。
其中,ode45求解器属于变步长的⼀种,采⽤Runge-Kutta算法;其他采⽤相同算法的变步长求解器还有ode23。
ode45表⽰采⽤四阶-五阶Runge-Kutta算法,它⽤4阶⽅法提供候选解,5阶⽅法控制误差,是⼀种⾃适应步长(变步长)的常微分⽅程数值解法,其整体截断误差为(Δx)^5。
解决的是Nonstiff(⾮刚性)常微分⽅程。
matlab解常微分方程

matlab解常微分⽅程1. ODE常微分⽅程ordinary differential equation的缩写,此种表述⽅式常见于编程,如MATLAB中Simulink求解器solver已能提供了7种微分⽅程求解⽅法:ode45(Dormand-Prince),ode23(Bogacki-Shampine),ode113(Adams),ode15s(stiff/NDF),ode23s(stiff/Mod. Rosenbrock),ode23t(mod.stiff/Trapezoidal),ode23tb(stiff/TR-BDF2)。
微分⽅程、微分⽅程组⾃标量 因变量 ⼀元 多元 函数 映射⼀元:只有⼀个因变量多元:有多个因变量导数 偏导:谁对谁的导数,因变量对⾃变量的导数,默认或缺省⾃变量为t 、x ?⼀元⽅程 多元⽅程 多元⽅程组 n个⽅程解n个未知量微分⽅程 ⼀阶 ⾼阶微分⽅程 ⼀阶微分⽅程组⼀阶常微分⽅程:Dx/dt + x = e^t⾼阶常微分⽅程:d^2x/dt^2+dx/dt+x=e^2t⼀阶微分⽅程组(多元):dy/dt+x=e^2tdx/dt+2y-x=e^t初始条件:dy/dt0=... dx/dt0=... y0=... x0=...可以解出:y=f(t)=.... x=f(t)=.... 两个⽅程解两个未知数(因变量)⼀个N阶(多元)微分⽅程可以写成(分解成)N个⼀阶微分⽅程(即微分⽅程组)如:x.. + 2x. -x = u令x.=x2; x=x1 则...微分⽅程的精确解: r=dsolve('eqn1','eqn2',...,'cond1','cond2',...,'var').数值解: [t,y]=solver('odefun',tspan,y0,options)1. 求精确解1.微分⽅程r=dsolve('eqn1','eqn2',...,'cond1','cond2',...,'var').该命令中可以⽤D表⽰微分符号,其中D2表⽰⼆阶微分,D3表⽰三阶微分,以此类推。
matlab求解常微分方程组的解析解

matlab求解常微分方程组的解析解
Matlab求解常微分方程组的解析解,解答了很多年来研究者的苦恼。
在不久
的将来,有望摆脱其斑驳的笔划,取得更紧密的推导,并出现更多直观的效果。
在过去,解决常微分方程组的方法大致可分为数值解和解析解两类。
从这两种
方式中,要获得准确的解决方案比较困难,限定条件和计算结果本身存在较大误差。
因此,Matlab求解常微分方程组的解析解,受到了业界的极大关注。
Matlab求解常微分方程组的解析解,具有良好的可靠性和稳定性,通过简单
易懂的推导,可以得到准确有限的结果,降低多项式和微分方程组的计算复杂度,提高解决问题的效率。
Matlab求解常微分方程组的解析解,还可以提供评估和参数拟合的功能,以
获得更大的精度和平滑度,从而实现回归分析和模型拟合。
特别是在工程实际中,由于设计中所需的参数经常是浮点数和整数,因此可以利用Matlab求解常微分方
程组的解析解,优化设计结果,满足实际要求。
借助现有的各种计算工具,Matlab求解常微分方程组的解析解将是一个极具
计算潜力的新兴技术。
它既可以帮助企业优化设计,提升创新的能力,又可以帮助科研人员以多样化的角度分析复杂的事物,践行自然理性。
结合工程实践,来提升当下与未来社会的繁荣发展。
matlab 解常微分方程

matlab 解常微分方程Matlab是一种功能强大的数学软件,它提供了解常微分方程的工具和函数。
常微分方程是数学中的一种重要的方程类型,描述了各种物理、工程和生物现象的变化规律。
本文将介绍如何使用Matlab 解常微分方程,并通过具体的实例来说明其应用。
我们需要了解常微分方程的基本概念。
常微分方程是指一个函数的导数与自变量之间的关系方程。
常微分方程的解是该函数在给定初始条件下的解析解或数值解。
在Matlab中,我们可以使用ode45函数来求解常微分方程的数值解。
接下来,我们将以一个简单的一阶常微分方程为例来说明Matlab 的使用。
考虑以下的一阶常微分方程:dy/dx = x^2 - y我们将该方程转化为Matlab中的函数形式,并设定初始条件y(0) = 1。
代码如下:```matlabfunction dydx = myODE(x, y)dydx = x^2 - y;endxspan = [0 10];y0 = 1;[x, y] = ode45(@myODE, xspan, y0);plot(x, y)xlabel('x')ylabel('y')title('Solution of dy/dx = x^2 - y')```在上述代码中,我们首先定义了一个名为myODE的函数,该函数接受两个参数x和y,并返回dy/dx的值。
然后,我们使用ode45函数来求解该常微分方程的数值解。
最后,我们绘制了解的曲线图,并添加了相应的坐标轴标签和标题。
通过运行上述代码,我们可以得到常微分方程dy/dx = x^2 - y的数值解,并绘制出解的曲线图。
这个例子展示了Matlab解常微分方程的基本步骤和方法。
除了一阶常微分方程,Matlab还可以解决更高阶的常微分方程。
对于高阶常微分方程,我们可以将其转化为一组一阶常微分方程,并使用类似的方法来求解。
Matlab提供了一系列的函数和工具箱来处理不同类型的常微分方程,并提供了丰富的文档和示例来帮助用户理解和应用这些工具。
常微分方程matlab求解命令方法.ppt

N(t)表示人口数量,取人口变化率r =0.015,微分方程
dN 0.015N dt
N(1994) 12
18 16 14 12 1990 1995 2000 2005 2010 2015 2020
编辑窗口 function z=fun1(t,N) z=0.015*N;
命令窗口 ode23('fun1',[1994,2020],12)
y0 —— 初始条件 注: 函数F(t,y) 必须返回列向量. 数值解 y 的每一行对应于列向量T中的每一行数据
4/16
捕食者与被捕食者问题
海岛上有狐狸和野兔,当野兔数量增多时,狐狸捕食 野兔导致狐群数量增长;大量兔子被捕食使狐群进入 饥饿状态其数量下降;狐群数量下降导致兔子被捕食 机会减少,兔群数量回升。微分方程模型如下
1 2
k
t 2v sin
8/16
2008电影《集结号》展现出视听震撼的战争场面, 92式山炮,炮弹初速: 198米/秒,最大射程:2788米 利用实验程序确定阻力系数 k
function Xmax=mlab72(k) alfa=pi/4; v=198;g=9.8; t=0;dt=.1; x=0;y=0; while y>=0;
微分方程与计算机模拟
常微分方程数值解方法 捕食者与被捕食者问题 有阻力抛射曲线问题 卫星轨道模拟问题
1/16
数值方法求常微分方程初值问题
求解步骤:
y f (x, y)
y(
x
0
)
y0
(1)用函数文件定义一阶微分方程(或方程组)右端函数; (2)用MATLAB命令ode23()求数值解或绘积分曲线。
matlab解常微分方程组

matlab解常微分方程组(最新版)目录1.引言2.常微分方程组的概念3.MATLAB 解常微分方程组的方法4.示例:解二维常微分方程组5.结论正文一、引言常微分方程组在数学、物理、生物、化学等学科中有着广泛的应用。
随着计算机技术的发展,使用 MATLAB 求解常微分方程组已经成为了研究者们的常用方法。
本文将介绍如何使用 MATLAB 解常微分方程组。
二、常微分方程组的概念常微分方程组是指包含多个未知函数的微分方程组,其中每个方程的导数都是常数。
例如:x" + y" = 1x" - y" = 0三、MATLAB 解常微分方程组的方法MATLAB 提供了多种求解常微分方程组的函数,如 ode45、ode23 等。
下面以 ode45 为例,介绍如何使用 MATLAB 解常微分方程组。
1.创建 MATLAB 中的常微分方程组在 MATLAB 中,可以使用符号运算创建常微分方程组。
例如,上述二维常微分方程组可以表示为:eq = ["x" + "y" == 1;"x" - "y" == 0];2.使用 ode45 求解常微分方程组在 MATLAB 中,可以使用 ode45 函数求解常微分方程组。
该函数的用法如下:sol = ode45(@(t,x) eq, [0,10], x0);其中,eq 表示常微分方程组,[0,10] 表示时间区间,x0 表示初始条件。
3.显示解MATLAB 中的 plot3 函数可以显示三维图形,如下所示:plot3(sol(:,1), sol(:,2), sol(:,3));四、示例:解二维常微分方程组考虑以下二维常微分方程组:x" + y" = exp(-t)x" - y" = sin(t)按照上述方法,我们可以使用 MATLAB 求解该方程组。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2017/1/1
©
吴鹏, MATLAB从零到进阶.
常微分方程数值解
一、 微分代数方程(DAE)举例
【例12.4-1】的结果图:
方 法 1计 算 结 果 图 1 1 方 法 2计 算 结 果 图 1 方 法 3计 算 结 果 图
0.8
0.8
0.8
0.6
0.6
0.6
0.4
0.4
0.4
0.2
0.2
0.2
-2.5
-6 -3
-2
-1
0 位移
1
2
3
2017/1/1
©
吴鹏, MATLAB从零到进阶.
常微分方程数值解
三、 刚性问题举例
问题见书中【例12.2-2】, 【例12.2-3】。下图是【例12.2-2】不同 求解器得到解的图像对比。
子 函 数 形 式 /ode23 100 90 80 70 60 50 40 30 20 10 0 子 函 数 形 式 /ode15s 匿 名 函 数 形 式 /ode15s 100 100 90 80 70 60 50 40 30 20 10 0 90 80 70 60 50 40 30 20 10 0
0
0.5
1
1.5
2
2.5
3
3.5
4
4.5
5
t
2017/1/1
©
吴鹏, MATLAB从零到进阶.
常微分方程数值解
第四节 微分代数方程(DAE)与延 迟微分方程(DDE)求解
2017/1/1
©
吴鹏, MATLAB从零到进阶.
常微分方程数值解
一、 微分代数方程(DAE)举例
DAE的求解一般有三种办法,一种是变量替换法,一种是 用ode15s函数还有一种是用12.3节中提到的ode15i函数 【例12.4-1】是利用上述三种方法求解的普通微分代数方 程 。 【例12.4-2】是变量替换后用fsolve函数求解出每一计算 节点的值,然后再调用ode45、ode23tb等函数求解,另一种 方法就是直接利用ode15i函数求解 。
2017/1/1
©
吴鹏, MATLAB从零到进阶.
常微分方程数值解
二、初值问题求解函数
1. 提供的函数
ode23, ode45, ode113, ode15s, ode23s, ode23t, ode23tb,这些函数统一 的调用格式如下: [T,Y] = solver(odefun,tspan,y0) [T,Y] = solver(odefun,tspan,y0,options) sol = solver(odefun,[t0 tf],y0...) 输入参数说明: odefun 表示微分方程(组)的句柄。 tspan 微分方程(组)的求解时间区间,有两种格式[t0,tf]或者 [t0,t1,…,tf],两者都以t0为初值点,根据tf自动选择积分步长。前者 返回实际求解过程中所有求解的时间点上的解,而后者只返回设定 的时间点上的解。后者对计算效率没有太大影响,但是求解大型问 题时,可以减少内存存储。
ode23s
刚性
ode23tb 刚性
2017/1/1
©
吴鹏, MATLAB从零到进阶.
常微分方程数值解
三、 延迟问题以及边值问题求解函数
1. 延迟问题
MATLAB提供了dde23和ddesd函数用来求解。前者用来求解状态变量 延迟为常数的微分方程(组),后者用来求解状态变量延迟不为常数 的微分方程(组)。调用格式以及参数意义大部分类似ode系列求解函 数,不同的是要输入延迟参数以及系统在时间小于初值时的状态函数。
2017/1/1
©
吴鹏, MATLAB从零到进阶.
常微分方程数值解
二、 非刚性问题举例
问题见书中【例12.2-1】,左图微分方程的解,右图平面相轨迹
x(t) 2.5 2 1.5 1
6
4
=1 =2 =3
2
0.5 0
速度
0 5 10 15 t 20 25 30
0
-0.5 -1
-2
-1.5
-4
-2
0
5
10
0
5
10
0
5
10
t
2017/1/1
t
t
©
吴鹏, MATLAB从零到进阶.
常微分方程数值解
三、 刚性问题举例
下图是【例12.2-3】得到解的图像,以及两个解的和的图像
10 y1 (t) 8 6 4 4 2 2 0 0 -2 -4 -6 -2 -4 -6 y2 (t) 10 8 6 12
F(t) = y1 (t) + y2 (t) y = 0直线
0
0
0
-0.2
y1 (t) y2 (t) y3 (t)
-0.2
y1 (t) y2 (t) y3 (t)
-0.2
y1 (t) y2 (t) y3 (t)
-0.4
0
5
10
15
20
-0.4
0
5
10
15
20
-0.4
0
2017/1/1
t
t
©
5
10
15
20
吴鹏 t , MATLAB从零到进阶.
常微分方程数值解
常微分方程数值解
三、 利用fzero/fsolve函数
下图是【例12.3-3】结果图像。 【例12.3-4】是利用ode15i求解【例12.33】算例,速度明显增快,结果一致,图像也是下图。
45 y1 (t) 40 35 30 25 20 15 10 5 0 y2 (t) y3 (t) y4 (t)
2017/1/1
©
吴鹏, MATLAB从零到进阶.
常微分方程数值解
四、 求解前准备工作
微分方程的形式是多种多样的,一般来说,很多高阶微分方程可以通过 变量替换转化成一阶微分方程组,即可以写成下面的形式: M t, y y ' F t , y ( 1) M t , y 称为质量矩阵,如果其非奇异的话,上式可以写成: y ' M 1 t, y F t, y ( 2) 将(2)式右半部分用odefun表示出来(具体表现形式可以采用匿名函数、 子函数、嵌套函数、单独m文件等形式),就是ode45,ode23等常微分 方程初值问题求解的输入参数odefun。
t
2017/1/1
t
©
吴鹏, MATLAB从零到进阶.
常微分方程数值解
2017/1/1
©
吴鹏, MATLAB从零到进阶.
常微分方程数值解
二、初值问题求解函数
y0 :微分方程(组)的初值,即所有状态变量在t0时刻的值。 options 结构体,通过odeset设置得到的微分优化参数。
返回参数说明: T:时间点组成的列向量 Y:微分方程(组)的解矩阵,每一行对应相应T的该行上时间点的微 分方程(组)的解。 sol:以结构体的形式返回解。
2017/1/1
©
吴鹏, MATLAB从零到进阶.
常微分方程数值解
二、初值问题求解函数
2. 函数介绍
函数 ode45 ode23 问题类型 精确度 非刚性 非刚性 中等 低 说明 采用算法为4-5阶Runge-Kutta法,大多数 情况下首选的函数 基于 Bogacki-Shampine 2-3阶Runge-Kutta 公式,在精度要求不高的场合,以及对于 轻度刚性方程,ode23的效率可能好于 ode45。 基于变阶次Adams-Bashforth-Moutlon PECE算法。在对误差要求严格的场合或 者输入参数odefun代表的函数本身计算量 很大情况下比ode45效率高。ode113可以看 成一个多步解算器,因为它会利用前几次 时间节点上的解计算当前时间节点的解。 因此它不适应于非连续系统。
2017/1/1
©
吴鹏, MATLAB从零到进阶.
常微分方程数值解
第一节数值求解常微分方程(组) 函数概述
2017/1/1
©
吴鹏, MATLAB从零到进阶.
常微分方程数值解
一、 概述
第9章介绍了符号求解各类型的微分方程组,但是 能够求得解析解的微分方程往往只是出现在大学课 堂上,在实际应用中,绝大多数微分方程(组)无 法求得解析解。这就需要利用数值方法求解。 MATLAB以数值计算见长,提供了一系列数值求解 微分方程的函数。 这些函数可以求解非刚性问题,刚性问题,隐式 微分方程,微分代数方程等初值问题,也可以求解 延迟微分方程,以及边值问题等。
隐式微分方程无法写成(1)或者(2)的形式,其求解方法本章也有讨论。
2017/1/1
©
吴鹏, MATLAB从零到进阶.
常微分方程数值解
第二节 非刚性/刚性常微分方程 初值问题求解
2017/1/1
©
吴鹏, MATLAB从零到进阶.
常微分方程数值解
一、 概述
所谓刚性、非刚性问题最直观的判别方法就是从 解 在某段时间区间内的变化来看。非刚性问题变化相对缓 慢,而刚性问题在某段时间内会发生剧烈变化,即很短 的时间内,解的变化巨大。对于刚性问题不适合用 ode45来求解,如果硬要用ode45来求解的话,达到指定 精度所耗费的时间往往会非常长 。
如果质量矩阵奇异的话,(1)称为微分代数方程组(differential algebraic equations, DAEs.),可以利用求解刚性微分方程的函数如ode15s,ode23s 等来求解,从输入形式上看,求解DAEs和求解普通的ODE很类似,主 要区别是需要给微分方程求解器指定质量矩阵。
常微分方程数值解
常微分方程(组) 数值求解
吴鹏(rocwoods)