用matlab求解常微分方程
matlab-常微分方程

Events
含义 为‘on’时,控制解向量 有效值: 范数的相对误差,使每 on、off 步计算中,满足: 缺省值: norm(e)<=max(RelTol*n off orm(y),AbsTol) 有效值: 为‘on’时,返回相应的 on、off 事件记录
取值
参数设置
属性名 含义 若无输出参量,则solver 将执行下面操作之一: 有效值: 画出解向量中各元素随 odeplot、 时间的变化; odephas2、画出解向量中前两个分 odephas3、量构成的相平面图; odeprint 画出解向量中前三个分 缺省值: 量构成的三维相空间图 odeplot ; 随计算过程,显示解向 量 取值
使用于精度较低 的情形
OD 求解器 E类 Solver 型 非 ode113 刚 性 适 度 ode23t 刚 性 刚 ode15s 性
特点
说明
多步法;Adams算 计算时间比ode45 法;高低精度均可 短 -3~10-6 到10 采用梯形算法 适度刚性情形
多步法;Gear’s反 若ode45失效时, 向数值微分;精度 可尝试使用 中等
• (6)若没有给定输出参量,则在命令窗口显 示解列表。若该命令找不到解析解,则返 回一警告信息,同时返回一空的sym对象。 这时,用户可以用命令ode23或ode45求解 方程组的数值解。
y ′′ = −a y ′ y ( 0) = 1 y ′(π / a ) = 0
2
例1
例2
• >> [u,v] = dsolve('Du=v,Dv=u') u= C1*exp(-t)+C2*exp(t) V= -C1*exp(-t)+C2*exp(t)
matlab ode45 求解带积分的常微分方程

概述在工程和科学领域中,常微分方程是一种常见的数学建模工具。
其中,带积分的常微分方程更是一种需要特殊解法的方程形式。
MATLAB是一种功能强大的数学工具软件,而ode45是MATLAB中用于求解常微分方程的函数之一。
本文将详细介绍如何使用MATLAB中的ode45函数来求解带积分的常微分方程。
一、带积分的常微分方程简介带积分的常微分方程是指在微分方程中出现积分形式的项,通常表现为对某个函数进行积分。
这种形式的微分方程在工程和科学领域中有着广泛的应用,例如在电路分析、控制系统、生物学模型等领域中都能见到。
典型的带积分的常微分方程形式如下所示:y' = f(t,y) + ∫g(t,y)dt其中,y'表示y对自变量t的导数,f(t,y)为已知的函数,g(t,y)为未知的函数需要求解。
这种形式的微分方程要比普通的常微分方程更复杂,需要使用特定的求解方法来得到解析解或数值解。
二、MATLAB中的ode45函数介绍MATLAB是一种被广泛应用于科学计算和工程领域的数学软件工具,其中有丰富的数值计算函数库。
其中,用于求解常微分方程的ode45函数是应用较为广泛的函数之一。
ode45函数可以通过数值计算的方法来求解常微分方程的数值解,其基本调用格式如下:[t,y] = ode45(odefun,tspan,y0)其中,odefun是定义了微分方程的函数句柄,tspan是求解的时间范围,y0是初始条件。
ode45函数会返回微分方程在tspan范围内的数值解t和对应的y值。
三、使用MATLAB求解带积分的常微分方程对于带积分的常微分方程,我们需要将其转化为标准形式,然后利用MATLAB的ode45函数进行求解。
假设我们有如下形式的带积分的常微分方程:y' = f(t,y) + ∫g(t,y)dt我们将其转化为等价的无積分項的方程形式,例如∂F/∂t = f(t,y) + ∫g(t,y)dt我们可以利用MATLAB中的ode45函数来求解上述形式的微分方程。
matlab ode45求解常系数微分方程组

题目:Matlab ode45求解常系数微分方程组一、介绍在科学计算中,微分方程组是一个非常重要的数学模型,它描述了自然界中诸多物理现象的规律性。
求解微分方程组是科学研究和工程技术中的常见问题之一。
Matlab是一种非常流行的科学计算工具,它提供了很多函数和工具箱,方便用户对微分方程进行数值求解。
其中,ode45函数是Matlab中用于求解常系数微分方程组的常用工具之一。
二、ODE45函数简介ode45是Matlab中用于求解常系数微分方程组的函数。
它采用一种叫做“Runge-Kutta法”的数值积分方法,能够比较准确地求解各种微分方程组。
用户只需要提供微分方程的形式以及初值条件,ode45就可以自动求解微分方程组并给出数值解。
在Matlab中,ode45的调用格式为:[t, y] = ode45((t, y)fun(t, y), tspan, y0)其中,fun是用户定义的微分方程组函数,tspan是时间范围,y0是初值条件。
ode45会返回时间向量t和对应的解向量y。
三、常系数微分方程组的形式常系数微分方程组是指微分方程中各个系数都是常数的情况。
一般来说,常系数微分方程组的形式可以表示为:dx1/dt = a11*x1 + a12*x2 + ... + a1n*xn + b1(t)dx2/dt = a21*x1 + a22*x2 + ... + a2n*xn + b2(t)...dxn/dt = an1*x1 + an2*x2 + ... + ann*xn + bn(t)其中,x1, x2, ..., xn是未知函数,a11, a12, ..., ann是常系数,b1(t), b2(t), ..., bn(t)是已知函数。
四、使用ode45求解常系数微分方程组在Matlab中,我们可以很方便地利用ode45函数求解常系数微分方程组。
我们需要定义微分方程组的函数形式,例如:function dydt = fun(t, y)dydt = zeros(2, 1);dydt(1) = -0.1*y(1) + 0.2*y(2);dydt(2) = 0.1*y(1) - 0.2*y(2);end我们可以通过调用ode45函数进行求解,例如:tspan = [0, 10];y0 = [1; 1];[t, y] = ode45((t, y)fun(t, y), tspan, y0);我们可以通过绘图等方式来分析微分方程组的数值解。
matlab_常微分方程数值解法

dt 2
简朴问题可以求得解析解,多数实际问题靠数值求解 。
第4页
一阶常微分方程(ODE )初值问题 : ODE :Ordinary Differential Equation
dy
f
(x,
y)
dx
x0 x xn
y(x0 ) y0
数值解法就是求y(x)在某些分立旳节点 xn 上旳近似值 yn,用以近似y(xn)
x0
y0
x1 f y(x), x dx
x0
x2 f y(x), x dx
x1
y(x1) f y(x1), x1 h
第17页
同样,在[x0,xn+1] ,积分采用矩形近似,得:
y(xn1) y0
f xn1
x0
y(x), x dx
y(xn ) f y(xn ), xn h
yn y(xn )
第5页
2、欧拉近似办法
2.1 简朴欧拉(L.Euler, 1707-1783)办法。
dy
dx
f
(y, x)
y(x0 ) y0
欧拉数值算法就是由初值通过递推求解,递推求解
就是从初值开始,后一种函数值由前一种函数值得到。核 心是构造递推公式。
y0 y1 y2 yn
第6页
i 1,2,...
第36页
没有一种算法可以有效地解决所有旳 ODE 问题,因此 MATLAB 提供了多种ODE函数。
函数 ODE类
特点
阐明
型
ode45
非刚性 单步法;4,5 阶 R-K 措施;合计 大部分场合旳首选措施
截断误差为 (△x)3
ode23
非刚性 单步法;2,3 阶 R-K 措施;合计 使用于精度较低旳情形
matlab梯形法求常微分方程

近年来,随着科技的迅猛发展,人们对数学问题的求解需求也越来越迫切。
在数值分析中,常微分方程的求解一直是一个备受关注的领域。
而在这个领域中,matlab梯形法求解常微分方程成为了一种被广泛应用的方法。
那么,什么是matlab梯形法?它又是如何应用于求解常微分方程的呢?让我们来深入了解matlab梯形法。
在matlab中,梯形法是一种常用的数值求解方法,它可以用于求解常微分方程。
该方法的基本思想是将微分方程中的导数用差分代替,从而将微分方程转化为代数方程组,再利用matlab进行求解。
通过该方法,我们可以得到微分方程的数值解,从而更好地理解和分析问题。
现在,让我们来探讨matlab梯形法在求解常微分方程中的应用。
假设我们需要求解如下的一阶常微分方程:\[ \frac{dy}{dt} = f(t,y) \]其中,\( f(t,y) \) 是关于\( t \)和\( y \)的函数。
我们需要将微分方程离散化,即用差分代替导数。
通过将时间区间\( [a, b] \)进行均匀划分,我们可以得到:\[ t_0 = a, t_1, t_2, ..., t_n = b \]\[ y_0 = \alpha, y_1, y_2, ..., y_n \]\[ h = \frac{b-a}{n} \]其中,\( t_i \) 是时间节点,\( y_i \) 是对应的近似解,\( h \) 是时间步长。
接下来,我们可以利用梯形法进行求解。
梯形法的迭代公式为:\[ y_{i+1} = y_i + \frac{h}{2}[f(t_i, y_i) + f(t_{i+1}, y_{i+1})] \]通过不断迭代,我们可以得到微分方程的数值解。
在实际应用中,matlab梯形法可以很好地处理各种类型的常微分方程。
无论是线性方程还是非线性方程,matlab梯形法都能提供较为准确的数值解。
该方法还可以用于求解初值问题和边值问题,具有较好的通用性和适用性。
matlab数值求解常微分方程快速方法

MATLAB是一种用于科学计算和工程应用的高级编程语言和交互式环境。
它在数学建模、模拟和分析等方面有着广泛的应用。
在MATLAB 中,常微分方程的数值求解是一个常见的应用场景。
在实际工程问题中,通常需要对常微分方程进行数值求解来模拟系统的动态行为。
本文将介绍MATLAB中对常微分方程进行数值求解的快速方法。
1. 基本概念在MATLAB中,可以使用ode45函数来对常微分方程进行数值求解。
ode45是一种常用的Runge-Kutta法,它可以自适应地选取步长,并且具有较高的数值精度。
使用ode45函数可以方便地对各种类型的常微分方程进行求解,包括一阶、高阶、常系数和变系数的微分方程。
2. 函数调用要使用ode45函数进行常微分方程的数值求解,需要按照以下格式进行函数调用:[t, y] = ode45(odefun, tspan, y0)其中,odefun表示用于描述微分方程的函数,tspan表示求解的时间跨度,y0表示初值条件,t和y分别表示求解得到的时间序列和对应的解向量。
3. 示例演示为了更好地理解如何使用ode45函数进行常微分方程的数值求解,下面我们以一个具体的例子来进行演示。
考虑如下的一阶常微分方程:dy/dt = -2*y其中,y(0) = 1。
我们可以编写一个描述微分方程的函数odefun:function dydt = odefun(t, y)dydt = -2*y;按照上述的函数调用格式,使用ode45函数进行求解:tspan = [0 10];y0 = 1;[t, y] = ode45(odefun, tspan, y0);绘制出解曲线:plot(t, y);4. 高级用法除了基本的函数调用方式外,MATLAB中还提供了更多高级的方法来对常微分方程进行数值求解。
可以通过设定选项参数来控制数值求解的精度和稳定性,并且还可以对刚性微分方程进行求解。
5. 性能优化在实际工程应用中,常常需要对大规模的常微分方程进行数值求解。
matlab 求解微分方程

matlab 求解微分方程
在 MATLAB中可以使用 ode45 或者 ode15s 函数来求解常微分方程。
如果想要求解初值问题,可以使用 ode45 函数,语法如下:
```
tspan = [t0, tf]; % t0为初始时刻,tf为结束时刻
y0 = [y1, y2, ..., yn]; % y1, y2, ..., yn为初始条件
[t, y] = ode45(@(t, y) diffeq(t, y), tspan, y0);
```
其中,`diffeq` 是一个用户定义的函数,用来表示微分方程的右端,它的输入参数为时间 t 和状态变量 y,输出为微分方程的右端的值。
`t` 是时间向量,`y` 是状态变量的解。
如果想要求解延迟微分方程或者刚性微分方程,可以使用ode15s 函数,语法和 ode45 函数类似:
```
[t, y] = ode15s(@(t, y) diffeq(t, y), tspan, y0);
```
需要注意的是,求解微分方程之前,需要先定义好微分方程的右端函数 `diffeq` 。
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表⽰三阶微分,以此类推。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验六 用matlab 求解常微分方程1.微分方程的概念未知的函数以及它的某些阶的导数连同自变量都由一已知方程联系在一起的方程称为微分方程。
如果未知函数是一元函数,称为常微分方程。
常微分方程的一般形式为0),,",',,()(=n y y y y t F如果未知函数是多元函数,成为偏微分方程。
联系一些未知函数的一组微分方程组称为微分方程组。
微分方程中出现的未知函数的导数的最高阶解数称为微分方程的阶。
若方程中未知函数及其各阶导数都是一次的,称为线性常微分方程,一般表示为)()(')()(1)1(1)(t b y t a y t a y t a y n n n n =++++--若上式中的系数ni t a i ,,2,1),( =均与t 无关,称之为常系数。
2.常微分方程的解析解有些微分方程可直接通过积分求解.例如,一解常系数常微分方程1+=y dt dy可化为dt y dy=+1,两边积分可得通解为1-=tce y .其中c 为任意常数.有些常微分方程可用一些技巧,如分离变量法,积分因子法,常数变异法,降阶法等可化为可积分的方程而求得解析解.线性常微分方程的解满足叠加原理,从而他们的求解可归结为求一个特解和相应齐次微分方程的通解.一阶变系数线性微分方程总可用这一思路求得显式解。
高阶线性常系数微分方程可用特征根法求得相应齐次微分方程的基本解,再用常数变异法求特解。
一阶常微分方程与高阶微分方程可以互化,已给一个n 阶方程),,",',()1()(-=n n y y y t f y设)1(21,,',-===n n y y y y y y ,可将上式化为一阶方程组⎪⎪⎪⎩⎪⎪⎪⎨⎧====-),,,,(''''2113221n n nn y y y t f y yy y y y y反过来,在许多情况下,一阶微分方程组也可化为高阶方程。
所以一阶微分方程组与高阶常微分方程的理论与方法在许多方面是相通的,一阶常系数线性微分方程组也可用特征根法求解。
3.微分方程的数值解法除常系数线性微分方程可用特征根法求解,少数特殊方程可用初等积分法求解外,大部分微分方程无限世界,应用中主要依靠数值解法。
考虑一阶常微分方程初值问题⎩⎨⎧=<<=000)()),(,()('y t y t t t t y t f t y f其中)'.,,,(,)',,,(,)',,,(020*******m m m y y y y f f f f y y y y ===所谓数值解法,就是寻求)(t y 在一系列离散节点f n t t t t ≤<<< 10上的近似值nk y k ,,1,0, =称kk k t t h -=+1为步长,通常取为常量h 。
最简单的数值解法是Euler 法。
Euler 法的思路极其简单:在节点出用差商近似代替导数h t y t y t y k k k )()()('1-≈+这样导出计算公式(称为Euler 格式),2,1,0),,(1=+=+k y t hf y y k k k k他能求解各种形式的微分方程。
Euler 法也称折线法。
Euler 方法只有一阶精度,改进方法有二阶Runge-Kutta 法、四阶Runge-Kutta 法、五阶Runge-Kutta-Felhberg 法和先行多步法等,这些方法可用于解高阶常微分方程(组)初值问题。
边值问题采用不同方法,如差分法、有限元法等。
数值算法的主要缺点是它缺乏物理理解。
4.解微分方程的MATLAB 命令MATLAB 中主要用dsolve 求符号解析解,ode45,ode23,ode15s 求数值解。
ode45是最常用的求解微分方程数值解的命令,对于刚性方程组不宜采用。
ode23与ode45类似,只是精度低一些。
ode12s 用来求解刚性方程组,是用格式同ode45。
可以用help dsolve, help ode45查阅有关这些命令的详细信息. 例1 求下列微分方程的解析解(1)b ay y +='(2)1)0(',0)0(,)2sin(''==-=y y y x y (3)1)0(',1)0(',','==-=+=g f f g g g f f 方程(1)求解的MATLAB 代码为:>>clear;>>s=dsolve('Dy=a*y+b')结果为s =-b/a+exp(a*t)*C1方程(2)求解的MATLAB代码为:>>clear;>>s=dsolve('D2y=sin(2*x)-y','y(0)=0','Dy(0)=1','x')>>simplify(s) %以最简形式显示s结果为s =(-1/6*cos(3*x)-1/2*cos(x))*sin(x)+(-1/2*sin(x)+1/6*sin(3*x))*cos(x)+5/3*sin(x) ans =-2/3*sin(x)*cos(x)+5/3*sin(x)方程(3)求解的MATLAB代码为:>>clear;>>s=dsolve('Df=f+g','Dg=g-f','f(0)=1','g(0)=1')>>simplify(s.f) %s是一个结构>>simplify(s.g)结果为ans =exp(t)*cos(t)+exp(t)*sin(t)ans =-exp(t)*sin(t)+exp(t)*cos(t)例2求解微分方程,1)0(,1'=++-=ytyy先求解析解,再求数值解,并进行比较。
由>>clear;>>s=dsolve('Dy=-y+t+1','y(0)=1','t')>>simplify(s)可得解析解为tety-+=。
下面再求其数值解,先编写M文件fun8.m%M函数fun8.mfunction f=fun8(t,y)f=-y+t+1;再用命令>>clear; close; t=0:0.1:1;>>y=t+exp(-t); plot(t,y); %化解析解的图形>>hold on; %保留已经画好的图形,如果下面再画图,两个图形和并在一起>>[t,y]=ode45('fun8',[0,1],1);>>plot(t,y,'ro'); %画数值解图形,用红色小圈画>>xlabel('t'),ylabel('y')结果见图7.1图16.6.1 解析解与数值解由图16.6.1可见,解析解和数值解吻合得很好。
例3 求方程)0(',)0(,sin "0===θθθθθmg ml的数值解.不妨取15)0(,8.9,1===θg l .则上面方程可化为0)0(',15)0(,sin 8.9"===θθθθ先看看有没有解析解.运行MATLAB 代码>>clear;>>s=dsolve('D2y=9.8*sin(y)','y(0)=15','Dy(0)=0','t') >>simplify(s)知原方程没有解析解.下面求数值解.令',21θθ==y y 可将原方程化为如下方程组⎪⎩⎪⎨⎧====0)0(,15)0()sin(8.9''211221y y y y y y建立M 文件fun9.m 如下%M 文件fun9.mfunction f=fun9(t,y)f=[y(2), 9.8*sin(y(1))]'; %f 向量必须为一列向量运行MATLAB 代码>>clear; close;>>[t,y]=ode45('fun9',[0,10],[15,0]);>>plot(t,y(:,1)); %画θ随时间变化图,y(:2)则表示'θ的值 >>xlabel('t'),ylabel('y1')结果见图7.2123456789101515.51616.5ty 1图7.2 数值解由图7.2可见,θ随时间t 周期变化。
习题16-61.求下列微分方程的解析解2.求方程3)0(',1)0(,'2")1(2===+y y xy y x的解析解和数值解,并进行比较3.分别用ode45和ode15s 求解Van-del-Pol 方程()⎪⎩⎪⎨⎧===---1)0',0)0(0)1(1000222x x x dt dxx dtx d的数值解,并进行比较.。