matlab_微分方程求解
Matlab中微分方程求解

Matlab中微分方程求解2008年11月24日星期一 11:193 Matlab软件求解前面已经介绍了微分方程(组)的求解方法:解析解法、数值解法和图解法等等。
这些方法计算工作量大,需要借助于计算机实现。
下面简单介绍Matlab在此领域的应用。
3.1 解析解desolve(‘eqn1’,’eqn2’, ...) 求常微分方程(组)的解析解。
1. 微分方程例1:求解二阶微分方程x2y’’ + xy’ + (x2-n2)y = 0, y (p/2) = 2, y’(p /2) = - 2/p, n = 1/2.解析解:dsolve('D2y+(1/x)*Dy+(1-(1/2)^2/x^2)*y=0','y(pi/2)=2,Dy(pi/2)=-2/pi','x')ans = 2^(1/2)*pi^(1/2)*sin(x)/x^(1/2)pretty(ans)2.微分方程组例2:求解 d f/d x=3f+4g; d g/d x=-4f+3g。
通解: [f,g]=dsolve('Df=3*f+4*g','Dg=-4*f+3*g')f= exp(3*t)*cos(4*t)*C1+exp(3*t)*sin(4*t)*C2g=-exp(3*t)*sin(4*t)*C1+exp(3*t)*cos(4*t)*C2特解: [f,g]=dsolve('Df=3*f+4*g','Dg=4*f+3*g','f(0)=0,g(0)=1')f=exp(3*t)*sin(4*t)g=exp(3*t)*cos(4*t)3.2 数值解在微分方程(组)难以获得解析解的情况下,可以用Matlab方便地求出数值解。
格式为:[t,y] = ode23('F',TSPAN,Y0,OPTIONS,P1,P2,...)注意:微分方程组形式:y' = F(t, y),t为自变量,y为因变量(可以是多个,如微分方程组)。
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中对常微分方程进行数值求解的快速方法。
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求简单微分方程的解析解、数值解,加深对微分方程概念和应用的理解;针对一些具体的问题,如追击问题,掌握利用软件求解微分方程的过程;了解微分方程模型解决问题思维方法及技巧;体会微分方程建摸的艺术性.1微分方程相关函数(命令)及简介因为没有一种算法可以有效地解决所有的ODE 问题,为此,Matlab 提供了多种求解器Solver,对于不同的ODE 问题,采用不同的Solver.阶常微分方程(组)的初值问题的解的 Matlab 的常用程序,其中:ode23 采用龙格-库塔2 阶算法,用3 阶公式作误差估计来调节步长,具有低等的精度.ode45 则采用龙格-库塔4 阶算法,用5 阶公式作误差估计来调节步长,具有中等的精度.2 求解微分方程的一些例子2.1 几个可以直接用 Matlab 求微分方程精确解的例子:例1:求解微分方程22x xe xy dxdy -=+,并加以验证. 求解本问题的Matlab 程序为:syms x y %line1y=dsolve('Dy+2*x*y=x*exp(-x^2)','x') %line2diff(y ,x)+2 *x*y-x*exp(-x^2) %line3simplify(diff(y ,x)+2*x*y-x*exp(-x^2)) %line4说明:(1) 行line1是用命令定义x,y 为符号变量.这里可以不写,但为确保正确性,建议写上;(2) 行line2是用命令求出的微分方程的解:1/2*exp(-x^2)*x^2+exp(-x^2)*C1(3) 行line3使用所求得的解.这里是将解代入原微分方程,结果应该为0,但这里给出:-x^3*exp(-x^2)-2*x*exp(-x^2)*C1+2*x*(1/2*exp(-x^2)*x^2+exp(-x^2)*C1)(4) 行line4 用 simplify() 函数对上式进行化简,结果为 0, 表明)(x y y =的确是微分方程的解.例2:求微分方程0'=-+x e y xy 在初始条件e y 2)1(=下的特解,并画出解函数的图形.求解本问题的 Matlab 程序为:syms x yy=dsolve('x*Dy+y-exp(x)=0','y(1)=2*exp(1)','x')ezplot(y)微分方程的特解为:y=1/x*exp(x)+1/x* exp (1) (Matlab 格式),即x e e y x+=,此函数的图形如图 1:图1 y 关于x 的函数图象2.2 用ode23、ode45等求解非刚性的标准形式的一阶常微分方程(组)的初值问题的数值解(近似解).例3:求解微分方程初值问题⎪⎩⎪⎨⎧=++-=1)0(2222y x x y dx dy 的数值解,求解范围为区间[0, 0.5].fun=inline('-2*y+2*x^2+2*x','x','y');[x,y]=ode23(fun,[0,0.5],1); x; yplot(x,y ,'o-')>> x'ans =0.0000 0.0400 0.0900 0.1400 0.1900 0.24000.2900 0.3400 0.3900 0.4400 0.4900 0.5000>> y'ans =1.0000 0.9247 0.8434 0.7754 0.7199 0.67640.6440 0.6222 0.6105 0.6084 0.6154 0.6179图形结果为图2.图2 y关于x的函数图像3 常微分在实际中的应用3.1 导弹追踪问题设位于坐标原点的甲舰向位于x轴上点A(1,0)处的乙舰发射导弹,导弹v沿平行于y轴的直线行驶,导弹的速度始终对准乙舰。
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是一款功能强大的数学软件,它可以对微分方程组进行求解并得到精确的数值解。
微分方程组是描述自然现象的数学模型,经常出现在物理、化学、生物等领域的科学研究中。
掌握如何使用Matlab 对微分方程组进行求解是非常重要的。
二、微分方程组求解基本原理微分方程组是由多个未知函数及其导数的方程组成。
通常情况下,微分方程组很难直接求解,需要借助数值方法进行近似求解。
Matlab 提供了丰富的工具和函数来解决微分方程组求解的问题,其中最常用的是ode45函数。
三、Matlab微分方程组求解代码示例以下是一个简单的二阶微分方程组的求解代码示例:```function dydt = myODE(t, y)dydt = zeros(2,1);dydt(1) = y(2);dydt(2) = -y(1) - 0.1*y(2);end[t, y] = ode45(myODE, [0 20], [1 0]);plot(t, y(:,1))```在这个示例中,我们首先定义了一个函数myODE来描述微分方程组的右端。
然后使用ode45函数对微分方程组进行求解,得到了微分方程组的数值解,并利用plot函数进行了可视化展示。
四、常见问题及解决方法在使用Matlab进行微分方程组求解时,可能会遇到一些常见问题,以下是一些常见问题及解决方法:1. 参数设置错误:在使用ode45函数时,需要正确设置求解的时间范围和初始条件,否则可能得到错误的结果。
可以通过仔细阅读ode45函数的文档来解决这个问题。
2. 数值稳定性:对于一些复杂的微分方程组,数值求解可能会遇到数值稳定性问题,导致结果不准确。
可以尝试调整ode45函数的参数或者使用其他数值解法来提高数值稳定性。
五、总结通过本文的介绍,我们了解了在Matlab中如何对微分方程组进行求解。
Matlab提供了丰富的工具和函数来解决微分方程组求解的问题,有效提高了微分方程组求解的效率和精度。
matlab符号运算求解微分方程
matlab符号运算求解微分方程在科学研究和工程技术领域,微分方程是一种常见的数学模型,用于描述存在着变化和相互关联的自然现象。
然而,微分方程通常需要采用解析或数值方法才能得到精确的解。
而作为一种强大的数学计算软件和编程语言,MATLAB的符号计算工具可以提供一种方便有效的方式来求解微分方程。
符号计算是一种基于数学公式和符号代数方法的计算技术,相比于数字计算,它更加精确和高效。
在MATLAB中,通过Symbolic Math Toolbox可以轻松实现符号计算,包括求解微分方程、计算积分、求解方程等。
下面我们将从三个方面介绍如何使用MATLAB求解微分方程。
一、符号变量的定义和使用在MATLAB中,我们首先需要定义符号变量。
通过声明符号变量,我们可以让MATLAB知道我们要处理的变量是符号变量,而不是数字变量。
定义符号变量可以使用syms函数。
例如,我们要定义一个符号变量x,只需要在MATLAB命令窗口中输入以下代码:syms x接下来,我们可以使用符号变量x来表示各种函数表达式和微分方程中的未知函数。
例如,我们可以定义一个函数表达式f(x):f(x) = x^2 + 2*x + 1我们可以使用f(x)来表示这个函数,在MATLAB命令窗口中输入f(x),就可以得到函数的值。
同时,符号变量也可以用来表示微分方程中的未知函数。
例如,我们可以定义一个一阶常微分方程:syms y(x)ode = diff(y,x) == x其中,y(x)表示未知函数,而ode表示微分方程。
diff函数用于求解函数y(x)对x的导数。
我们可以使用dsolve函数来求解微分方程。
例如,我们可以在命令窗口中输入以下代码:dsolve(ode)通过这个函数调用,MATLAB将给出微分方程的解析解。
二、符号运算和微分方程求解在MATLAB中,我们可以使用符号运算来对方程进行化简和求解。
符号运算包括:1. simplify:对表达式进行化简;2. collect:将表达式中相似的项进行合并;3. factor:将表达式进行因式分解;4. expand:将表达式展开;5. subs:用指定的符号代替表达式中的变量。
用MATLAB求解微分方程
1. 微分方程的解析解
求微分方程(组)的解析解命令:
dsolve(‘方程1’, ‘方程2’,…‘方程n’, ‘初始条件’, ‘自变量’)
结 果:u = tan(t-c)
解 输入命令:dsolve('Du=1+u^2','t')
STEP2
STEP1
解 输入命令: y=dsolve('D2y+4*Dy+29*y=0','y(0)=0,Dy(0)=15','x')
导弹追踪问题
设位于坐标原点的甲舰向位于x轴上点A(1, 0)处的乙舰发射导弹,导弹头始终对准乙舰.如果乙舰以最大的速度v0(是常数)沿平行于y轴的直线行驶,导弹的速度是5v0,求导弹运行的曲线方程.又乙舰行驶多远时,导弹将它击中? 解法一(解析法)
由(1),(2)消去t整理得模型:
解法二(数值解)
结 果 为:x = (c1-c2+c3+c2e -3t-c3e-3t)e2t y = -c1e-4t+c2e-4t+c2e-3t-c3e-3t+c1-c2+c3)e2t z = (-c1e-4t+c2e-4t+c1-c2+c3)e2t
2、取t0=0,tf=12,输入命令: [T,Y]=ode45('rigid',[0 12],[0 1 1]); plot(T,Y(:,1),'-',T,Y(:,2),'*',T,Y(:,3),'+')
3、结果如图
图中,y1的图形为实线,y2的图形为“*”线,y3的图形为“+”线.
matlab求解微分方程数值解与解析解
matlab求解微分方程数值解与解析解微分方程是数学中的重要内容,它描述了物理、工程、经济等领域中的许多现象和问题。
在实际应用中,我们经常需要求解微分方程的解析解或数值解。
本文将以Matlab为工具,探讨如何求解微分方程并对比解析解与数值解的差异。
一、引言微分方程是描述自然界中许多现象和问题的数学语言,它包含了未知函数及其导数与自变量之间的关系。
微分方程的求解可以帮助我们了解问题的性质和变化规律,并为实际应用提供参考。
在许多情况下,微分方程的解析解很难求得,这时我们可以利用计算机进行数值求解。
二、微分方程的数值解法1.欧拉法欧拉法是最简单的数值求解微分方程的方法之一。
它通过将微分方程转化为差分方程,然后利用离散的点逼近连续的解。
具体步骤如下:(1)将微分方程转化为差分方程,即用近似的导数代替真实的导数;(2)选择初始条件,即确定初始点的值;(3)选择步长和求解区间,即确定求解的范围和步长;(4)使用迭代公式计算下一个点的值;(5)重复步骤(4),直到达到指定的求解区间。
2.改进的欧拉法欧拉法存在精度较低的问题,为了提高精度,可以使用改进的欧拉法。
改进的欧拉法是通过使用两次导数的平均值来计算下一个点的值,从而提高了数值解的精度。
3.龙格-库塔法龙格-库塔法是一种常用的数值求解微分方程的方法,它通过使用多个点的导数来逼近连续解。
龙格-库塔法的步骤如下:(1)选择初始条件和步长;(2)使用迭代公式计算下一个点的值;(3)计算下一个点的导数;(4)根据导数的值和步长计算下一个点的值;(5)重复步骤(3)和(4),直到达到指定的求解区间。
龙格-库塔法的精度较高,适用于求解一阶和高阶微分方程。
三、微分方程的解析解解析解是指能够用公式或函数表示的方程的解。
有些微分方程具有解析解,可以通过数学方法求得。
例如,一阶线性常微分方程和某些特殊类型的二阶微分方程等。
解析解的优势在于精确性和直观性,能够帮助我们深入理解问题的本质。
Matlab微分方程的解法
-0.5
-0.55
-0.6
-0.65
-0.7
-0.75
-0.8
-0.85
-0.9
-0.95
-1
0
0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9
1
time t0=0,tt=1
图3 给定新的初始数据,由函数xprim2定义的ODE解的图形
(d) 求解下面方程组并不难:
x x x x ì ' = - 0.1
在下面的初值问题中,有两个未知函数:x1(t)和x2(t),并用以下式子表达其微... 页码,1/11
Matlab关于微分方程的解法
MATLAB使用龙格-库塔-芬尔格(Runge-Kutta-Fehlberg)方法来解ODE问题。在有限点内计算求解。而 这些点的间距有解的本身来决定。当解比较平滑时,区间内使用的点数少一些,在解变化很快时,区间内应使 用较多的点。 为了得到更多的有关何时使用哪种解法和算法的信息,推荐使用helpdesk。所有求解方程通用的语法或句法在 命令集中头两行给出。时间间隔将以向量t=[t0,tt]给出。 命令ode23可以求解(2,3)阶的常微分方程组,函数ode45使用(4,5)阶的龙格-库塔-芬尔格方法。注意,在这种情 况下x’是x的微分不是x的转置。 在命令集中solver将被诸如ode45函数所取代。
0.6
0.55
0.5
0
0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9
1
time t0=0,tt=1
图1 由函数xprim1定义的ODE解的图形
(b) 解下面的ODE过程是等价的:
ïíìx' = x2
ïîx(0) = 1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
解
du 的通解. = 1 + u 2 的通解 dt 输入命令: 输入命令:u=dsolve('Du=1+u^2','t')
结果:u = tan (t+c1)
例如求下例微分方程的特解。 例如求下例微分方程的特解。
dy = e x , y (0) = e dx
命令窗口中输入: 在Matlab命令窗口中输入: 命令窗口中输入 y=dsolve('Dy=exp(x)','y(0)=exp(1)','x') 输出结果为: 输出结果为: y =exp(x)-1+exp(1) 如想画出函数在自变量x在区间 如想画出函数在自变量 在区间 [-10,10]的函数图像,可在 的函数图像, 的函数图像 命令窗口中输入: 命令窗口中输入: ezplot(y,[-10,10])
例2
求微分方程的特解. 求微分方程的特解
d 2 y dy 2 + 4 + 29 y = 0 dx dx y (0) = 0, y ' (0) = 15
输入命令: 解 输入命令 y=dsolve('D2y+4*Dy+29*y=0','y(0)=0,Dy(0)=15','x') 结 果 为 : y =3*exp(-2*x)*sin(5*x) 作图命令: 作图命令:ezplot(y,[1.0,4])
1、微分方程的解析解 、
求微分方程( 求微分方程(组)的解析解命令: 的解析解命令 dsolve(‘方程 ‘方程 方程1’, 方程 方程2’,…‘方程 ‘初始条件’, ‘自变量’) 方程n’, 初始条件 初始条件’ 自变量 自变量’ 方程 方程
记号: 在表达微分方程时, 表示求微分, 、 记号 在表达微分方程时,用字母 D 表示求微分,D2、 D3 等表示求高阶微分 任何 D 后所跟的字母为因变量,自 等表示求高阶微分.任何 后所跟的字母为因变量, 变量可以指定或由系统规则选定为确省. 变量可以指定或由系统规则选定为确省 d2y 例如, = 0 应表达为:D2y=0. 应表达为: 例如,微分方程 2 dx
例3
求微分方程组的通解. 求微分方程组的通解 dx dt = 2 x − 3 y + 3 z dy = 4 x − 5 y + 3z dt dz = 4 x − 4 y + 2 z dt
解 输入命令 :
[x,y,z]=dsolve('Dx=2*x-3*y+3*z','Dy=4*x-5*y+3*z','Dz=4*x-4*y+2*z', 't') ;
例6
解微分方程组.
y1 ' = y2 y3 , y2 ' = − y1 y3 , y3 ' = −0.51y1 y2 , y1 (0) = 0, y2 (0) = 1, y3 (0) = 1.
文件rigid.m如下: 如下: 解 1、建立 文件 、建立m-文件 如下 function dy=rigid(t,y) dy=zeros(3,1); dy(1)=y(2)*y(3); dy(2)=-y(1)*y(3); dy(3)=-0.51*y(1)*y(2); 2、取t0=0,tf=12,输入命令: 、 , ,输入命令: [T,Y]=ode45('rigid',[0 12],[0 1 1]); plot(T,Y(:,1),'-',T,Y(:,2),'*',T,Y(:,3),'+') 3、结果如图: 、结果如图:
1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 0 2 4 6 8 10 12
的图形为“ 线 图中, 的图形为实线, 的图形为“ ” 图中,y1的图形为实线,y2的图形为“*”线,y3的图形为“+”线.
2 1.5 1 0.5 0 -0.5 -1 -1.5 -2 -2.5 0 500 1000 1500 2000 2500 3000
2、取t0=0,tf=3000,在matlab主命令窗口中输入命令: 、 主命令窗口中输入命令: , , 主命令窗口中输入命令 [T,Y]=ode15s('vdp1000',[0 3000],[2 0]); plot(T,Y(:,1),'-') 3、结果如图: 、结果如图:
注意: 注意 1、在解n个未知函数的方程组时,x0和x均为 维向量, 、在解 个未知函数的方程组时 个未知函数的方程组时, 均为n维向量 均为 维向量, m-文件中的待解方程组应以 x 的分量形式写成 文件中的待解方程组应以 的分量形式写成.
2、使用 Matlab 软件求数值解时,高阶微分方程必须等价 、 软件求数值解时, 地变换成一阶微分方程组.
运行结果为: 运行结果为: x=C2*exp(-t)+C3*exp(2*t) y = C2*exp(-t)+C3*exp(2*t)+exp(-2*t)*C1 z = C3*exp(2*t)+exp(-2*t)*C1
2、微分方程的数值解 、
(一)常微分方程数值解的定义 在生产和科研中所处理的微分方程往往很复杂且大多得 不出一般解.而在实际上对初值问题 而在实际上对初值问题, 不出一般解 而在实际上对初值问题,一般是要求得到解在若 干个点上满足规定精确度的近似值, 干个点上满足规定精确度的近似值,或者得到一个满足精确 度要求的便于计算的表达式. 度要求的便于计算的表达式 因此,研究常微分方程的数值解法是十分必要的. 因此,研究常微分方程的数值解法是十分必要的
t=0:0.1:1; y=t+exp(-t); plot#39;szj',[0,1],1); plot(t,y,'ro'); xlabel('t'); ylabel('y');
例5
解: 令 y1=x,y2=y1’ ,
d 2x 2 dx 2 − 1000(1 − x ) − x = 0, dt dt x(0) = 2; x '(0) = 0.
例1 求解微分方程 y ' =
− y + t + 1, y (0) = 1,
先求解析解, 先求解析解,再
求数值解,并进行比较。 求数值解,并进行比较。
解析解: 解析解:输入命令 解得 y=t+exp(-t) 数值解: 数值解: %M函数szj.m function dy=szj(t,y) dy=-y+t+1; y=dsolve('Dy=-y+t+1','y(0)=1','t')
则微分方程变为一阶微分方程组:
y1 ' = y2 , y2 ' = 1000(1 − y12 ) y2 − y1 , y (0) = 2, y (0) = 0. 1 2
1、建立m-文件 、建立 文件 文件vdp1000.m如下: 如下: 如下 function dy=vdp1000(t,y) dy=zeros(2,1); dy(1)=y(2); dy(2)=1000*(1-y(1)^2)*y(2)-y(1);
用Matlab软件求常微分方程的数值解 软件求常微分方程的数值解
[t, x]=solver(’f’,ts,x0) (
自变 量值 函数 值 ode45 ode23 ode113 ode15s ode23s 由待解 方程写 成的m成的 文件名 ts=[t0,tf], 函数的 , 初值 t0、tf为自 、 变量的初 值和终值