(整理)实验五用matlab求解常微分方程.
matlab求解矩阵常微分方程
matlab求解矩阵常微分方程标题:基于Matlab的矩阵常微分方程求解导言:矩阵常微分方程是指微分方程中的未知函数为矩阵,常见于控制系统、信号处理、计算机图形学等领域。
Matlab作为一款功能强大的数学软件,提供了许多工具和函数用于求解矩阵常微分方程。
本文将介绍如何使用Matlab求解矩阵常微分方程的基本方法和步骤。
一、矩阵常微分方程的定义矩阵常微分方程可以写成如下形式:$$\frac{dX(t)}{dt} = A(t)X(t)$$其中,$X(t)$是未知函数矩阵,$A(t)$是已知函数矩阵。
二、Matlab中的矩阵常微分方程求解函数Matlab提供了几个函数用于求解矩阵常微分方程,其中最常用的是ode45函数。
ode45函数是基于龙格-库塔法的数值求解器,可以高效地求解大多数常微分方程问题。
三、使用ode45函数求解矩阵常微分方程的步骤1. 定义矩阵常微分方程的参数和初始条件。
2. 编写一个函数,用于描述矩阵常微分方程的右端项。
3. 调用ode45函数,传入函数句柄和初始条件,求解矩阵常微分方程。
四、示例:求解矩阵常微分方程假设我们要求解如下矩阵常微分方程:$$\frac{dX(t)}{dt} = \begin{bmatrix} 0 & 1 \\ -1 & 0 \end{bmatrix} X(t)$$初始条件为$X(0) = \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix}$。
根据上述步骤,我们可以先定义矩阵常微分方程的参数和初始条件:```matlabA = [0 1; -1 0];X0 = [1 0; 0 1];```然后编写一个函数,用于描述矩阵常微分方程的右端项:```matlabfunction dXdt = matrixODE(t, X)A = [0 1; -1 0];dXdt = A * X;end```最后调用ode45函数求解矩阵常微分方程:```matlab[t, X] = ode45(@matrixODE, [0 10], X0);```其中,@matrixODE表示函数句柄,[0 10]表示求解时间范围。
matlab常微分方程的数值解法实验报告
实验四常微分方程的数值解法 指令:[t,y]=ode23(‘fun ’,tspan,yo) 2/3阶龙格库塔方法 [t,y]=ode45(‘fun ’,tspan,yo) 4/5阶龙格库塔方法 [t,y]=ode113(‘fun ’,tspan,yo) 高阶微分方程数值方法其中fun 是定义函数的文件名。
该函数fun 必须以为dx 输出量,以t,y 为输入量。
tspan=[t0 tfina]表示积分的起始值和终止值。
yo 是初始状态列向量。
考虑到初始条件有00d , (0)0,d d , (0)0.d SSI S S tI SI I I I tββμ⎧=-=>⎪⎪⎨⎪=-=≥⎪⎩ (5.24) 这就是Kermack 与McKendrick 的SIR 仓室模型. 方程(5.24)无法求出()S t 和()I t 的解析解.我们先做数值计算。
Matlab 代码为:function dy=rigid(t,y) dy=zeros(2,1); a=1; b=0.3;dy(1)=a*y(1).*y(2)-b*y(1); dy(2)=-a*y(1).*y(2);ts=0:.5:50; x0=[0.02,0.98];[T,Y]=ode45('rigid',ts,x0); %plot(T,Y(:,1),'-',T,Y(:,2),'*') plot(Y(:,2),Y(:,1),'b--') xlabel('s') ylabel('i')任务:1 画出i (t ),2分析各参数的影响例57:求解两点边值问题:0)5(,0)1(,32==='-''y y x y y x 。
(注意:相应的数值解法比较复杂)。
y=dsolve('x*D2y-3*Dy=x^2','y(1)=0,y(5)=0','x') ↙ y =-1/3*x^3+125/468+31/468*x^4例:用数值积分的方法求解下列微分方程 π21''2t y y -=+设初始时间t0=0;终止时间tf=3*pi ;初始条件0|',0|00====x x y y 。
常微分方程matlab程序
常微分方程MATLAB程序以下是一个简单的MATLAB 程序,用于求解一阶常微分方程:matlab复制代码% 定义微分方程 dy/dx = f(x, y)f = @(x, y) -x*y;% 初始条件 y(0) = 1y0 = 1;% 定义 x 的范围xspan = [0, 10];% 使用 MATLAB 内置函数 ode45 进行求解[t, y] = ode45(f, xspan, y0);% 绘制解的图形plot(t, y(:,1));xlabel('x');ylabel('y');title('Solution of the differential equation dy/dx = -xy');在这个程序中,我们定义了一个一阶常微分方程dy/dx = -xy,并使用MATLAB 内置函数ode45进行求解。
初始条件为y(0) = 1,求解范围为xspan = [0, 10]。
最后,我们使用plot函数绘制了解的图形。
这个程序是用来求解一阶常微分方程的,而这个方程是dy/dx = -xy。
这是一个简单的线性方程,但它的解在物理和工程中有许多实际应用。
接下来,我们逐行解释一下代码:1.% 定义微分方程 dy/dx = f(x, y):这是一个注释,说明下面的代码是定义微分方程。
2. f = @(x, y) -x*y;:这行定义了一个匿名函数f,它接受两个参数x和y,并返回-x*y。
这个函数就是我们的微分方程dy/dx的右边部分。
3.% 初始条件 y(0) = 1:这是一个注释,说明下面的代码是定义初始条件。
4.y0 = 1;:这行定义了初始条件y(0) = 1,也就是说当x=0时,y=1。
5.% 定义 x 的范围:这是一个注释,说明下面的代码是定义自变量x的范围。
6.xspan = [0, 10];:这行定义了自变量x的范围从0到10。
7.% 使用 MATLAB 内置函数 ode45 进行求解:这是一个注释,说明下面的代码将使用MATLAB 的内置函数ode45来求解微分方程。
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求解常微分方程数值解目录1.容简介12.Euler Method(欧拉法)求解12.1.显式Euler法和隐式Euler法22.2.梯形公式和改进Euler法32.3.Euler法实用性53.Runge-Kutta Method(龙格库塔法)求解53.1.Runge-Kutta基本原理63.2.MATLAB中使用Runge-Kutta法的函数74.使用MATLAB求解常微分方程84.1.使用ode45函数求解非刚性常微分方程84.2.刚性常微分方程95.总结9参考文献11附录121.显式Euler法数值求解122.改进Euler法数值求解123.四阶四级Runge-Kutta法数值求解134.使用ode45求解141.容简介把《高等工程数学》看了一遍,增加对数学容的了解,对其中数值解法比较感兴趣,这大概是因为在其它各方面的学习和研究中经常会遇到数值解法的问题。
理解模型然后列出微分方程,却对着方程无从下手,无法得出精确结果实在是让人难受的一件事情。
实际问题中更多遇到的是利用数值法求解偏微分方程问题,但考虑到先从常微分方程下手更为简单有效率,所以本文只研究常微分方程的数值解法。
把一个工程实际问题弄出精确结果远比弄清楚各种细枝末节更有意思,因此文章中不追求非常严格地证明,而是偏向如何利用工具实际求解出常微分方程的数值解,力求将课程上所学的知识真正地运用到实际方程的求解中去,在以后遇到微分方程的时候能够熟练运用MATLAB得到能够在工程上运用的结果。
文中求解过程中用到MATLAB进行数值求解,主要目的是弄清楚各个函数本质上是如何对常微分方程进行求解的,对各种方法进行MATLAB编程求解,并将求得的数值解与精确解对比,其中源程序在附录中。
最后考察MATLAB中各个函数的适用围,当遇到实际工程问题时能够正确地得到问题的数值解。
2.Euler Method(欧拉法)求解Euler法求解常微分方程主要包括3种形式,即显式Euler法、隐式Euler法、梯形公式法,本节容分别介绍这3种方法的具体容,并在最后对3种方法精度进行对比,讨论Euler法的实用性。
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求解常微分方程如果未知函数是一元的,那么对应的微分方程称为常微分方程。
常微分方程的求解问题分为:初值问题和边值问题,以及求解微分代数方程组问题。
一般情况下,只有很少一类常微分方程可以得到解析解。
这里只介绍常微分方程的数值解问题,即根据常微分方程的不同性质,求其离散化的解。
部分常微分方程命令ode23:解非刚性微分方程,低精度,使用Runge-Kutta(龙格-库塔)法的二三阶算法。
ode45:解非刚性微分方程,中等精度,使用Runge-Kutta(龙格-库塔)法的四五阶算法。
ode113:解非刚性微分方程,变精度变阶次Adams-Bashforth-MoultonPECE(阿姆斯特)算法。
ode23t:解中等刚性微分方程,使用自由内插法的梯形法则(多步长外推法)。
ode15s:解刚性微分方程,使用可变阶次的数值微分(NDFs)算法。
ode23s:解刚性微分方程,低阶方法,使用修正的Rosenbrock(罗森伯里克)公式。
ode23tb:解刚性微分方程,低阶方法,使用TR-BDF2方法(方向内推法),即Runger-Kutta公式的第一级采用梯形法则,第二级采用Gear法。
解常微分方程命令的一般语法:[t,y]=ode*('odefun',tspan,y0)或[t,y]=ode*(@odefun,tspan,yo)[t,y]=ode*('odefun',tspan,y0,options)或[t,y]=ode*(@odefun,tspan,yo,options)[t,y]=ode*('odefun',tspan,y0,options,p1,p2,...)[t,y,Te,Ye,Ie]=ode*('odefun',tspan,yo,options)这里ode*:常微分方程命令odefun:常微分方程定义函数tspan:时域t的范围y0:初始值options:解微分方程的各种选项p1,p2,...:微分方程odefun的参数赋值刚性方程:刚性是指其Jacobian矩阵的特征值相差十分悬殊。
用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教学视频常微分方程在MATLAB中的求解方法MATLAB是一个功能强大的数学计算和模拟软件,可以用于解决各种数学和工程问题。
在MATLAB中,求解常微分方程(组)是一个重要的应用领域之一、本文将介绍在MATLAB中求解常微分方程(组)的方法和技巧。
在MATLAB中,求解常微分方程(组)可以通过以下几种方法进行:1. 符号计算方法:MATLAB提供了符号计算工具箱(Symbolic Math Toolbox),可以用于求解符号表达式的解析解。
对于简单的常微分方程,可以使用dsolve函数进行求解。
例如,对于一阶常微分方程y' = -2y,可以使用以下代码求解:```matlabsyms y(t)ode = diff(y(t), t) == -2 * y(t);sol = dsolve(ode);ySol(t) = sol;```这样就可以得到方程的解析解y(t) = C * exp(-2t),其中C是一个任意常数。
2. 数值计算方法:对于复杂的常微分方程(组),往往很难获得解析解。
这时可以使用数值计算方法来求解。
MATLAB提供了ode45、ode23、ode15s等函数,可以用来求解常微分方程的数值解。
其中,ode45函数是最常用的函数之一,适用于求解非刚性的、一般性的初值问题。
例如,对于一阶常微分方程y' = -2y,可以使用以下代码求解:```matlabtspan = [0 5]; % 时间范围y0=1;%初始条件[t, y] = ode45(fun, tspan, y0);plot(t, y);```这样就可以得到常微分方程的数值解,并用plot函数绘制出解的图像。
3. 建立模型方法:对于更复杂的常微分方程(组),可以利用MATLAB 的建模工具来建立数学模型,并使用数值方法求解。
MATLAB提供了Simulink工具,可以用于建立动态系统的模型。
例如,对于带有阻尼和弹簧的简谐振动系统,可以使用以下代码建立模型,并求解:```matlabm=1;%质量c=0.1;%阻尼系数k=1;%弹簧系数sim('harmonic_oscillator_model.slx'); % 运行模型plot(t, y);```这样就可以得到简谐振动系统的数值解,并用plot函数绘制出解的图像。
常微分方程初值问题的MATLAB解法
1用Matlab 求常微分方程(ODE)的初值问题(IVP)本节考虑一阶常微分方程000(,) ()u f t u t t Tu t u '=<≤⎧⎨=⎩ (1.1)的数值求解问题,包括算法公式及编程问题。
对一阶常微分方程组的初值问题010111120221220200120()(,,,,)(,,,,)() (,,,,)()m mm m m m m u t u u f t u u u u f t u u u u t u t t T u f t u u u u t u ⎧='=⎧⎪⎪'==⎪⎪<≤⎨⎨⎪⎪⎪⎪'==⎩⎩ (1.2)可以通过引入列向量0,,u u f化成类似(1.1)的形式000(,) ()u f t u t t Tu t u ⎧'=<≤⎪⎨=⎪⎩(1.3)其中1101122202120012()()(,,,,)()()(,,,,)(),,(,)()()(,,,,)m m m m mm u t u t f t u u u u t u t f t u u u u t u f t u u t u t f t u u u ⎛⎫⎛⎫⎛⎫⎪ ⎪ ⎪ ⎪ ⎪ ⎪=== ⎪ ⎪ ⎪ ⎪ ⎪ ⎪⎝⎭⎝⎭⎝⎭ (1.4)另外一个高阶常微分方程的初值问题()(1)0(1)(1)000000(,,,,,) (),(),,()m m m m u f t u u u u t t Tu t u u t u u t u ---'''⎫=<≤⎪⎬''===⎪⎭(1.5)也可以通过变换(1)123,,,,m m u u u u u u u u -'''==== 化成维微分方程组:1223112(,,,,)m mmm u u u u u uu f t u u u -'=⎧⎪'=⎪⎪⎨⎪'=⎪'=⎪⎩(1.6)我们在设计算法时通常先对一维一阶常微分方程(1.1)进行,然后再将这个算法写成适合求解(1.3)的向量形式,并以向量形式来进行编程。
matlab中常用来解常微分方程的原理
matlab中常用来解常微分方程的原理Matlab是一种常用的科学计算软件,它在解常微分方程方面具有很强的功能。
在实际应用中,常微分方程是描述自然现象和工程问题的重要数学模型。
通过使用Matlab,我们可以方便地求解各种类型的常微分方程,从而得到问题的解析解或数值解。
本文将介绍Matlab中常用来解常微分方程的原理和方法。
常微分方程是描述一个未知函数及其导数之间关系的方程。
它可以分为初值问题和边值问题两种类型。
初值问题是给定方程的初始条件,要求求解出函数的解析解或数值解;而边值问题是给定方程在两个或多个点上的边界条件,要求求解出满足这些条件的函数解。
Matlab提供了多种方法来解这些问题,如常微分方程求解器、符号计算工具箱和数值计算工具箱等。
我们来介绍常微分方程求解器。
Matlab中的常微分方程求解器可以直接求解一阶或高阶的常微分方程。
常见的求解器有ode45、ode23、ode15s等。
其中,ode45是一种常用的求解器,它采用的是龙格-库塔方法,可以求解刚性和非刚性的常微分方程。
使用这些求解器,我们只需要定义好方程的形式和初始条件,就可以得到方程的数值解。
我们介绍符号计算工具箱。
符号计算工具箱可以对常微分方程进行符号计算,得到方程的解析解。
通过符号计算,我们可以得到方程的精确解,而不仅仅是数值解。
在Matlab中,符号计算工具箱提供了dsolve函数来求解常微分方程。
我们只需要输入方程的形式,就可以得到方程的解析解。
符号计算工具箱对于一些简单的常微分方程求解非常方便,但对于复杂的方程,可能需要更复杂的方法来求解。
我们介绍数值计算工具箱。
数值计算工具箱提供了各种数值方法来求解常微分方程。
常见的数值方法有欧拉方法、龙格-库塔方法和有限差分法等。
这些方法可以将常微分方程转化为一系列迭代计算,从而得到方程的数值解。
在Matlab中,数值计算工具箱提供了多个函数来实现这些数值方法,如euler、ode23s和fdcoeffF等。
Matlab在常微分方程求解中的应用
求解常微分方程初值问题的数值解的整体思路:
dy f (x, y) dx y(x0 ) y0
(1)
寻求准确解 y(x ) 在一系列离散节点:
x0 x1 x2 xn 上的近似值 y0 , y1, y2 ,, yn ,
yn 称为问题的数值解,数值解所满足的离散方程统称为差
分格式, hi xi xi1 称为步长,实用中常取定步长。
ode23t ode23tb
Trapezoidal rule with a “free” interpolant
Implicit Runge-Kutta formula with a backward differentiation formula of order two
Stiff ODE Stiff ODE Stiff ODE
2、使用Matlab软件求数值解时,高阶微分方程必须 等价地变换成一阶微分方程组.
Van der Pol微分方程
1928年荷兰的范德波耳(Van der Pol)为描述LC 回路的电子管振荡器建立了著名的vanderPol方 程.它在自激振荡理论中有着重要的意义,一直作 为数学物理方程中的一个基本方程.这是一个具有 可变非线性阻尼的微分方程,代表了一类极为典型 的非线性问题.和其他非线性微分方程在数学上无 法精确求解一样,人们一直在努力寻找求解这类方 程近似解析解的方法,并乐于用Van der Pol方程 来检验求解方法的有效性.
>> type vdp1.m function dy = vdp1(t, y) mu = 1; dy = [y(2); mu*(1-y(1)^2)*y(2)-y(1)];
建立了vdp1.m后,即可选用前述ODE指令来求解
在 =1时,van der Pol方程并非 Stiff系统,所 以使用ode45来显示结果 odeBasic01.m
matlab解隐式常微分方程
matlab解隐式常微分方程隐式常微分方程是指解析式中包含未知函数的导数的微分方程。
与显式常微分方程不同,隐式方程无法通过代数运算解出未知函数,需要通过数值方法求解。
而Matlab作为一款强大的数值计算工具,可以很好地解决隐式常微分方程的求解问题。
Matlab中求解隐式常微分方程的函数是ode15i,其使用方法与ode45等其他求解ODE的函数类似。
我们可以通过一个简单的例子来说明ode15i的使用方法。
假设我们要求解如下的隐式常微分方程:$$y''(t) + y(t) = 0$$其解析式为:$$y(t) = A\sin(t) + B\cos(t)$$其中A、B为常数。
现在我们使用ode15i函数来求解该隐式方程。
我们先定义隐式方程的函数句柄,其形式为:$$F(t,y,y',p) = y''(t) + y(t)$$其中p为待求解的参数,这里我们将其设为1。
代码如下:function dydt = myode(t,y,yp)dydt = [yp(1); -y(1)];end然后我们定义初值条件:$$y(0) = 0, y'(0) = 1$$代码如下:y0 = [0; 1];接下来,我们使用ode15i函数求解该隐式方程:[t,y] = ode15i(@myode,[0 10],y0,[],1);其中,@myode表示隐式方程的函数句柄,[0 10]表示求解的时间区间,y0为初值条件,[]表示没有事件函数,1为待求解的参数。
我们将求解结果绘制成图形:plot(t,y(:,1));运行以上代码,我们可以得到如下的求解结果:从图中可以看出,我们求解得到的结果与解析式的结果非常接近,证明了ode15i函数的有效性。
在实际应用中,隐式常微分方程的求解往往比较复杂,需要使用更加复杂的数值方法。
Matlab提供了多种求解ODE的函数,可以帮助我们快速、准确地求解各种类型的微分方程,为科学研究和工程应用提供了有力的支持。
常微分方程数值求解 MATLAB 求解
dsolve 举例
例:[x,y]=dsolve('Dx+5*x=0', 'Dy-3*y=0', ...
'x(0)=1', 'y(0)=1', 't') sol = dsolve('Dx+5*x=0', 'Dy-3*y=0', ...
'x(0)=1', 'y(0)=1', 't') 这里返回的 sol 是一个 结构类型 的数据 sol.x % 查看解函数 x(t) sol.y % 查看解函数 y(t)
常微分方程数值求解
—— MATLAB 求解
Matlab 解初值问题函数
用 Maltab自带函数 解初值问题
求解析解:dsolve
求数值解:
ode45、ode23、 ode113、ode23t、ode15s、 ode23s、ode23tb
2
符号求解
符号求解
dsolve
3
dsolve 求解析解
如果省略自变量,则默认自变量为 t
dsolve('Dy=2*x','x'); % dy/dx = 2x
dsolve('Dy=2*x');
% dy/dt = 2x
若找不到解析解,则提出警告,并返回空解。
5
dsolve 的使用
使用符号方程
导数:diff,如 diff(y),diff(y,2) 等号:== 必须声明应变量与自变量!
求解析解:dsolve
y=dsolve('eq1','eq2', ... ,'cond1','cond2', ... ,'v')
常微分方程组的MATLAB求解范例
微分方程求解是系统仿真、数学模型实现以及很多工程问题求解的核心部分,应用MATLAB可以方便地对一阶常微分方程组进行求解,这里将对其基本方法进行介绍。
值得注意的是,高阶微分方程组可以通过引进参变量化为一阶常微分方程组,也可以同样方便解决。
若有一个微分方程(组)的参变量为列向量,即,且它参变量随时间变化的微分方程可以有以下方程描述:这里的f函数是一个列向量,即, i=1,2,3…,n,它可以是任意非线性函数。
则一般微分方程可以如此求解:[t,x]=ode45(f,timespan,x0)对于刚性方程,即一些解变化缓慢,一些解变化剧烈,且两者相差较为悬殊的这种方程,通常调用ode15s而非o de45进行求解。
例1:解:编写function或者用匿名函数表达f=y-2*x/y即可;function dy=f(t,y)dy=y-2*t/y;end命令:t=[0,1];%y0=1;[x,y]=ode45('f',t,1);%注意这里的x相当于自变量tplot(x,y,x,sqrt(1+2*x)),legend('数值解','解析解');可见求解效果不错。
例2、解:编写functionfunction dx=f(t,x)%返回值是列向量dx=[-x(2)-x(3);x(1)+0.2*x(2);0.2+(x(1)-5.7)*x(3)];end命令:t=[0,100];y0=[0 0 0]';%注意是列向量[x,y]=ode45('f',t,y0);plot(x,y);例3、这是一个二阶微分方程组,可以引进变量,由此ODE可以化成如下形式可以采用和例2相同的方法求解:function dx=f(t,x)dx=[x(2);-(x(1)^2-1)*x(2)-x(1)];End。
用matlab求解常微分方程
实验六 用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反过来,在许多情况下,一阶微分方程组也可化为高阶方程。
MATLAB求解常微分方程
的数值解, x1 (0) = 1, x1 (0) = 1, x 2 (0) = 2, x 2 (0) = 2 ,并绘制出轨迹曲线。
引入 u1 = x1 , u 2 = x1 , u 3 = x 2 , u 4 = x 2 , 可写出如下的隐式方程标准型为
• •
•
•
• u1 − u 2 = 0 • 2 • − u3 2 2 2 sin( ) + 5 =0 u u u u u 2 4 1 3 2 u 4 cos(u1 ) + t u1u 3 − e • 可用下面的程序求解: u 3 − u 4 = 0 • u u + u• u sin(u 2 ) + cos(u• u ) − sin t = 0 4 2 1 4 3 2 3
x ' = − y − z y ' = x + ay 将 a,b,c 作为附加参数, 给定微分方程组 z ' = b + ( x − c) z
选定 a=0.2,b=0.5,c=10 时,绘制出状态变量的三维图。
用下面的程序求解:
f=inline('[-x(2)-x(3);x(1)+a*x(2);b+(x(1)-c)*x(3)]',... 't','x','flag','a','b','c');%flag不可省去,用于占位 [t,x]=ode45(f,[0,100],[0;0;0],[],0.2,0.5,10); plot3(x(:,1),x(:,2),x(:,3));grid
Hale Waihona Puke = e −5t cos(2t + 1) + 5 , 试求出下面微分方
matlab求解超大量常微分方程
matlab求解超大量常微分方程超大量常微分方程是指在某个范围内有大量的微分方程需要求解。
在数学和工程领域中,常微分方程是一类重要的数学模型,用于描述动力系统、物理系统、生物系统等的变化规律。
在实际问题中,常常需要求解大量的微分方程,以获得系统的动态行为。
解超大量常微分方程的问题,在很多领域都具有重要的意义。
例如,在金融领域中,需要求解大量的微分方程来模拟股票价格的变化,以便进行投资决策。
在天气预报中,需要求解大量的微分方程来模拟大气环流和气候变化,以提供准确的天气预测。
在生物医学领域中,需要求解大量的微分方程来模拟生物过程和疾病发展,以便研究和治疗疾病。
求解超大量常微分方程的方法有很多种,其中一种常用的方法是数值求解。
数值求解是通过将微分方程离散化,转化为一组代数方程,并通过迭代计算来逼近微分方程的解。
在数值求解中,常用的方法有欧拉法、龙格-库塔法、变步长法等。
这些方法能够有效地求解大规模的微分方程组,并得到较为准确的数值解。
在MATLAB中,也提供了丰富的数值求解工具箱,可以用于求解超大量常微分方程。
MATLAB提供了各种数值求解算法和函数,如ode45、ode23、ode15s等,可以根据问题的特点选择合适的算法进行求解。
同时,MATLAB还提供了绘图工具,可以将求解结果可视化,更直观地展示系统的动态行为。
为了更好地求解超大量常微分方程,还可以利用并行计算技术。
MATLAB提供了并行计算工具箱,可以将求解任务分配给多个处理器或计算机进行并行计算,加快求解速度。
通过并行计算,可以有效地处理大规模的求解任务,提高求解效率。
在实际应用中,求解超大量常微分方程需要考虑多个因素。
首先,需要选择合适的数值求解算法和函数,根据问题的特点进行求解。
其次,需要合理选择离散化的步长和时间区间,以保证求解的精度和效率。
此外,还需要考虑求解过程中的数值稳定性和收敛性,避免出现发散或震荡的情况。
求解超大量常微分方程是一个具有挑战性的问题,但在MATLAB的支持下,我们可以利用数值求解和并行计算技术,有效地解决这一问题。
- 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.2图7.2 数值解由图7.2可见,θ随时间t 周期变化。
习题1.求下列微分方程的解析解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的数值解,并进行比较.。