[vip专享]MATLAB微分方程几种求解方法及程序

合集下载

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进行微分方程求解的方法

使用Matlab进行微分方程求解的方法

使用Matlab进行微分方程求解的方法引言微分方程是数学中非常重要的一部分,广泛应用于物理、经济、工程等领域。

对于大部分微分方程的解析解往往难以求得,而数值解法则成为了一种常用的解决手段。

Matlab作为一种强大的科学计算软件,也提供了丰富的工具和函数用于求解微分方程,本文将介绍一些常见的使用Matlab进行微分方程求解的方法。

一、数值求解方法1. 欧拉方法欧拉方法是最简单的一种数值求解微分方程的方法,它将微分方程的微分项用差分的方式进行近似。

具体的公式为:y(n+1) = y(n) + hf(x(n), y(n))其中,y(n)表示近似解在第n个点的值,h为步长,f(x, y)为微分方程的右端项。

在Matlab中使用欧拉方法进行求解可以使用ode113函数,通过设定不同的步长,可以得到不同精度的数值解。

2. 中点法中点法是较为精确的一种数值求解微分方程的方法,它的计算公式为:k1 = hf(x(n), y(n))k2 = hf(x(n) + h/2, y(n) + k1/2)y(n+1) = y(n) + k2中点法通过计算两个斜率的平均值来得到下一个点的值,相较于欧拉方法,中点法能提供更精确的数值解。

3. 4阶龙格库塔法龙格库塔法是一类高阶数值求解微分方程的方法,其中4阶龙格库塔法是最常用的一种。

它的计算公式为:k1 = hf(x(n), y(n))k2 = hf(x(n) + h/2, y(n) + k1/2)k3 = hf(x(n) + h/2, y(n) + k2/2)k4 = hf(x(n) + h, y(n) + k3)y(n+1) = y(n) + (k1 + 2k2 + 2k3 + k4)/64阶龙格库塔法通过计算多个斜率的加权平均值来得到下一个点的值,相较于欧拉方法和中点法,它的精度更高。

二、Matlab函数和工具除了可以使用以上的数值方法进行微分方程求解之外,Matlab还提供了一些相关的函数和工具,方便用户进行微分方程的建模和求解。

二元1阶微分方程的matlab解法

二元1阶微分方程的matlab解法

二元1阶微分方程的matlab解法全文共四篇示例,供读者参考第一篇示例:二元1阶微分方程是微分方程中一种较为复杂的形式,通常表示为形如dy/dx = f(x, y)的方程,其中y是关于x的函数。

解决二元1阶微分方程的方法有很多种,其中一种是利用matlab进行数值解法。

在matlab中,我们可以利用ode45函数来求解二元1阶微分方程。

ode45是一种常用的ODE求解器,可用于求解一阶或二阶常微分方程。

它采用了一个显式的Runge-Kutta法,能够求解刚性和非刚性的常微分方程。

下面我们来看一个例子,假设我们要求解如下的二元1阶微分方程:dy/dx = x + y我们可以使用matlab来求解这个微分方程,步骤如下:1. 定义微分方程的函数:我们需要在matlab中定义一个匿名函数,表示我们的微分方程。

在这个例子中,我们的微分方程式dy/dx = x + y,我们可以定义一个函数如下:f = @(x, y) x + y;2. 制定初值条件:接下来,我们需要指定初值条件,即在x=0时,y的值为多少。

在这个例子中,我们假设y(0) = 1。

3. 调用ode45函数:我们可以调用ode45函数来求解微分方程。

调用方式如下:[x, y] = ode45(f, [0, 10], 1);f是表示微分方程的函数,[0, 10]表示求解区间为[0, 10],1表示初值条件y(0) = 1。

通过以上步骤,我们就可以求得微分方程dy/dx = x + y的数值解。

最终得到的结果是一个向量y,包含了在求解区间[0, 10]上的y值。

我们可以将结果可视化,得到微分方程的解曲线。

利用matlab求解二元1阶微分方程是一种简单、快速的方法,尤其是对于较为复杂的微分方程。

通过matlab,我们可以快速得到微分方程的数值解,进而分析微分方程的性质和特点。

希望本文能帮助读者更好地了解二元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作为一种常用的科学计算软件,在微分方程的数值解法领域具有广泛的应用。

微分方程是描述自然现象中变化规律的数学工具,而数值解法则是指使用计算机进行近似求解微分方程的方法。

在Matlab 中,有多种常用的数值解法可以用来求解微分方程,例如欧拉法、改进的欧拉法、四阶龙格-库塔法等。

本文将对这些数值解法进行介绍和比较,以帮助读者更好地理解和应用微分方程求解数值方法。

二、欧拉法欧拉法是微分方程的最简单的数值解法之一,它通过离散化微分方程进行近似求解。

具体而言,对于一阶常微分方程dy/dx=f(x,y),可以利用欧拉法进行数值解。

欧拉法的基本思想是将自变量x的增量Δx分成n个小区间,然后根据微分方程的数值近似公式y(x+Δx)=y(x)+f(x,y)Δx对每个小区间进行迭代计算。

欧拉法的优点是简单易实现,但由于它是一阶的数值方法,因此对于某些微分方程求解效果可能不够准确。

三、改进的欧拉法改进的欧拉法是对欧拉法的一种改进,它通过在每个小区间内使用平均斜率来提高求解的精度。

具体而言,对于微分方程dy/dx=f(x,y),改进的欧拉法可以通过以下迭代公式进行数值求解:y(x+Δx)=y(x)+Δx/2[f(x,y)+f(x+Δx,y+Δx*f(x,y))]改进的欧拉法相比于欧拉法具有更高的数值精度,但计算量也相对增加。

四、四阶龙格-库塔法四阶龙格-库塔法是一种常用的数值微分方程求解方法,它通过四次迭代计算来获得微分方程的数值解。

具体而言,对于微分方程dy/dx=f(x,y),四阶龙格-库塔法可以用以下公式进行数值求解:k1=f(x,y)k2=f(x+Δx/2,y+Δx/2*k1)k3=f(x+Δx/2,y+Δx/2*k2)k4=f(x+Δx,y+Δx*k3)y(x+Δx)=y(x)+Δx/6*(k1+2*k2+2*k3+k4)四阶龙格-库塔法相比于欧拉法和改进的欧拉法具有更高的数值精度和稳定性,但计算量也相对较大。

Matlab关于微分方程的解法

Matlab关于微分方程的解法

Matlab关于微分方程的解法MATLAB使用龙格-库塔-芬尔格(Runge-Kutta-Fehlberg)方法来解ODE问题。

在有限点内计算求解。

而这些点的间距有解的本身来决定。

当解比较平滑时,区间内使用的点数少一些,在解变化很快时,区间内应使用较多的点。

为了得到更多的有关何时使用哪种解法和算法的信息,推荐使用helpdesk。

所有求解方程通用的语法或句法在命令集中头两行给出。

时间间隔将以向量t=[t0,tt]给出。

命令ode23可以求解(2,3)阶的常微分方程组,函数ode45使用(4,5)阶的龙格-库塔-芬尔格方法。

注意,在这种情况下x’是x的微分不是x的转置。

在命令集中solver将被诸如ode45函数所取代。

命令集龙格-库塔-芬尔格方法[time,x]=solver(str,t,x0)计算ODE或由字符串str给定的ODE的值,部分解已在向量time中给出。

在向量time中给出部分解,包含的是时间值。

还有部分解在矩阵x中给出,x的列向量是每个方程在这些值下的解。

对于标量问题,方程的解将在向量x中给出。

这些解在时间区间t(1)到t(2)上计算得到。

其初始值是x0即x(t(1)).此方程组有str指定的M文件中函数表示出。

这个函数需要两个参数:标量t和向量x,应该返回向量x’(即x的导数)。

因为对标量ODE来说,x和x’都是标量。

在M文件中输入odefile可得到更多信息。

同时可以用命令numjac来计算Jacobi函数。

[t,x]=solver(str,t,x0,val)此方程的求解过程同上,结构val包含用户给solver的命令。

参见odeset和表1,可得到更多信息。

Ode45此方法被推荐为首选方法。

Ode23这是一个比ode45低阶的方法。

Ode113用于更高阶或大的标量计算。

Ode23t用于解决难度适中的问题。

Ode23s用于解决难度较大的微分方程组。

对于系统中存在常量矩阵的情况也有用。

matlab梯形法解微分方程

matlab梯形法解微分方程

主题:matlab梯形法解微分方程内容:一、微分方程的概念和求解方法1. 微分方程的定义2. 微分方程的分类3. 微分方程的解析解和数值解求解方法二、梯形法的原理和步骤1. 梯形法的原理2. 梯形法的求解步骤3. 梯形法的适用范围和优缺点三、matlab中梯形法的实现步骤1. matlab中梯形法的基本函数2. matlab中使用梯形法解微分方程的示例四、实际案例分析1. 利用matlab中的梯形法求解一阶常微分方程2. 利用matlab中的梯形法求解二阶常微分方程五、matlab梯形法解微分方程的应用1. 工程领域中的应用案例2. 科学研究中的应用案例六、总结1. 梯形法解微分方程的优势和局限性2. matlab中梯形法的实际应用效果3. 未来发展方向和展望文章:微分方程是描述自然现象、工程问题等方面中的变化规律的数学工具,它在科学研究和工程应用中都有着重要的地位。

解微分方程的方法有很多种,其中梯形法作为一种数值解方法在matlab中有着丰富的应用。

本文将通过对微分方程的概念、梯形法的原理和步骤、matlab中梯形法的实现步骤、以及实际案例分析,深入探讨matlab梯形法解微分方程的方法和应用。

一、微分方程的概念和求解方法1. 微分方程的定义微分方程是包含一个或多个未知函数及其导数(偏导数)的方程。

根据未知函数、自变量和导数的类型的不同,微分方程可分为常微分方程和偏微分方程。

常微分方程是研究一个未知函数和它的有限阶导数之间的关系的微分方程,而偏微分方程是包含有多个独立变量的方程。

微分方程通常用来描述系统的动力学行为,如弹簧振动、电路的响应等。

2. 微分方程的分类微分方程根据方程中含有未知函数的最高阶导数的阶数、未知函数的个数和自变量的个数等不同特征可以将其分类。

常见的微分方程类型有一阶微分方程、二阶微分方程、线性微分方程、非线性微分方程、常系数微分方程、变系数微分方程等。

3. 微分方程的解析解和数值解求解方法微分方程的解析解法主要包括分离变量法、变参数法、特解法等。

matlab用四阶龙格库塔函数求解微分方程组

matlab用四阶龙格库塔函数求解微分方程组

一、介绍Matlab作为一种强大的科学计算软件,提供了众多函数和工具来解决微分方程组。

其中,四阶龙格库塔函数是一种常用的数值方法,用于求解常微分方程组。

本文将介绍如何使用Matlab中的四阶龙格库塔函数来求解微分方程组,并对该方法的原理和实现进行详细说明。

二、四阶龙格库塔方法四阶龙格库塔方法是一种常用的数值方法,用于求解常微分方程组。

它是一种显式的Runge-Kutta方法,通过逐步逼近微分方程的解,在每一步使用多个中间值来计算下一步的解。

该方法通过四个中间值来计算下一步的状态,并且具有较高的精度和稳定性。

三、在Matlab中使用四阶龙格库塔方法求解微分方程组在Matlab中,可以使用ode45函数来调用四阶龙格库塔方法来解决微分方程组的问题。

ode45函数是Matlab提供的用于求解常微分方程组的函数,可以通过指定微分方程组以及初值条件来调用四阶龙格库塔方法来进行求解。

1. 定义微分方程组我们需要定义要求解的微分方程组。

可以使用Matlab中的匿名函数来定义微分方程组,例如:```matlabf = (t, y) [y(2); -sin(y(1))];```其中,f是一个匿名函数,用于表示微分方程组。

在这个例子中,微分方程组是y' = y2, y2' = -sin(y1)。

2. 指定初值条件和求解区间接下来,我们需要指定微分方程组的初值条件和求解区间。

初值条件可以通过指定一个初始时刻的状态向量来完成,例如:```matlabtspan = [0, 10];y0 = [0, 1];```其中,tspan表示求解区间,y0表示初值条件。

3. 调用ode45函数进行求解我们可以通过调用ode45函数来求解微分方程组的数值解。

具体的调用方式如下:```matlab[t, y] = ode45(f, tspan, y0);```其中,t和y分别表示求解的时间点和对应的状态值。

四、示例下面我们通过一个具体的例子来演示如何使用Matlab中的四阶龙格库塔方法来求解微分方程组。

matlab求解微分方程特解

matlab求解微分方程特解

一、概述微分方程是描述自然现象和工程问题的数学工具,其中特解是微分方程的解的一种。

而MATLAB是一种高级技术计算语言和交互式环境,被广泛应用于工程、科学和其他领域。

在MATLAB中求解微分方程特解是非常常见的问题,本文将介绍如何使用MATLAB求解微分方程特解。

二、微分方程特解的概念微分方程的一般形式可表示为:dy/dx = f(x, y)其中y是未知函数,x是自变量,f是已知函数。

微分方程的特解是指满足特定初值条件的解,通常表示为y(x0) = y0,其中x0和y0是已知的初值。

三、MATLAB求解微分方程特解的基本步骤1. 定义微分方程在MATLAB中,首先需要定义微分方程的函数形式。

假设我们要求解的微分方程为dy/dx = x + y,则在MATLAB中可以定义函数形式为:function dydx = myfun(x, y)dydx = x + y;2. 定义初值条件接下来需要定义初值条件,即给定的初始条件。

假设初值条件为y(0)= 1,则在MATLAB中可以定义为:x0 = 0;y0 = 1;3. 求解微分方程通过调用MATLAB中的内置函数ode45,可以求解微分方程的特解。

具体的求解过程为:[t, y] = ode45(myfun, [x0, xf], y0);其中myfun表示微分方程的函数形式,[x0, xf]表示求解的自变量范围,y0表示初值条件,t和y分别为求解得到的自变量和特解。

四、示例下面通过一个具体的示例来演示如何使用MATLAB求解微分方程特解。

假设我们要求解的微分方程为dy/dx = x^2 + y,初值条件为y(0) = 1,求解范围为x从0到5。

在MATLAB中定义微分方程的函数形式为:function dydx = myfun(x, y)dydx = x^2 + y;然后定义初值条件为:x0 = 0;y0 = 1;最后调用ode45函数求解微分方程特解:[t, y] = ode45(myfun, [x0, 5], y0);求解得到的自变量和特解分别存储在t和y中,可以通过绘图或其他方式对特解进行进一步分析。

用MATLAB求解微分方程

用MATLAB求解微分方程
用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求解二阶微分方程,以及程序实例(2010-03-25 12:56:36)转载标签:matlab程序实例二阶微分方程dsolve文化微分方程的求解主要用到一个dsolve函数,如下面的“Uc1=dsolve('D2y+1000*Dy+10^6*y=0','y(0)=10','Dy(0)=0','t');”,可以看出,函数的第一部分是所要求解的微分方程,其次是初始条件,最后是对自变量的说明。

下面给出的程序实例是用于分析一个最简单零输入的二阶电路。

其中C=1uf,L=1H。

R是不确定的,他的值的选取将会直接影响到方程解的形式以及最后画出的曲线形状,在此我取R的值分别为1000,2000,3000欧姆。

R=1000;while (R<=3000)if R<2000Uc1=dsolve('D2y+1000*Dy+10^6*y=0','y(0)=10','Dy(0)=0','t');It1=-1*diff(Uc1)*(1e-6);Ul1=diff(It1);elseif R==2000Uc2=dsolve('D2y+2000*Dy+10^6*y=0','y(0)=10','Dy(0)=0','t');It2=-1*diff(Uc2)*(1e-6);Ul2=diff(It2);elseUc3=dsolve('D2y+3000*Dy+10^6*y=0','y(0)=10','Dy(0)=0','t'); It3=-1*diff(Uc3)*(1e-6);Ul3=diff(It3);endR=R+1000;end%while i<=3figure (1)xlabel('t')ylabel('Uc(t)')hold on;p1=ezplot(Uc1,[0,0.02]);p2=ezplot(Uc2,[0,0.02]);p3=ezplot(Uc3,[0,0.02]);title('电容电压Uc(t)变化曲线')set(p1,'LineStyle',':');set(p2,'LineStyle','--');legend('uc1','uc2','uc3');set(p1,'Color','r');set(p2,'Color','k');legend('uc1','uc2','uc3');hold off;axis auto;figure (2)xlabel('t')ylabel('I(t)')hold on;p4=ezplot(It1,[0,0.02]);p5=ezplot(It2,[0,0.02]);p6=ezplot(It3,[0,0.02]);title('电流I(t)变化曲线') set(p4,'LineStyle',':');set(p5,'LineStyle','--'); legend('uc1','uc2','uc3');set(p4,'Color','r');set(p5,'Color','k');legend('It1','It2','It3');hold off;axis auto;figure (3)xlabel('t')ylabel('Ul(t)')hold on;p7=ezplot(Ul1,[0,0.02]);p8=ezplot(Ul2,[0,0.02]);p9=ezplot(Ul3,[0,0.02]);title('电感电压Ul(t)变化曲线')set(p7,'LineStyle',':'); set(p8,'LineStyle','--'); legend('uc1','uc2','uc3'); set(p7,'Color','r');set(p8,'Color','k'); legend('Ul1','Ul2','Ul3'); hold off;axis auto;。

Matlab求解微分方程

Matlab求解微分方程

4、求解微分方程:2'xy yy=-,()01y=,h=0.2,区间为[0,1];%建立微分方程函数;function yd=f(x,y)if nargin==2yd=y-2*x/y;endend%欧拉方法程序;%x0为给定的初值x,y0为给定的初值y;%n为需要计算的次数;%h为步长;%f(x)为建立的微分方程函数;function [x,y]=oula(x0,y0,n,h)x0=input('Please enter the value of x0:'); y0=input('Please enter the value of y0:'); n=input('Please enter the value of n:'); h=input('Please enter the value of h:'); y=[y0];x=[x0];for k=1:1:ny1=y0+h*(y0-2*x0/y0);y(k+1)=y1;y0=y1;x0=x0+h;x(k+1)=x0;endend此题中,h=0.2,区间为[0,1],所以n=5,程序运行结果为x= 0 0.2000 0.4000 0.6000 0.8000 1.0000y= 1.0000 1.2000 1.3733 1.5315 1.6811 1.8269%欧拉改进方法程序;%x0为给定的初值x,y0为给定的初值y;%n为需要计算的次数;%h为步长;%f(x)为建立的微分方程函数;function [x,y]=oulagai(x0,y0,n,h)x0=input('Please enter the value of x0:');y0=input('Please enter the value of y0:');n=input('Please enter the value of n:');h=input('Please enter the value of h:');y=[y0];x=[x0];for k=1:1:nyp=y0+h*f(x0,y0);yc=y0+h*f(x0+h,yp);y1=(yp+yc)/2;y(k+1)=y1;y0=y1;x(k+1)=x0+h;x0=x0+h;endend程序运行结果x= 0 0.2000 0.4000 0.6000 0.8000 1.0000 y=1.0000 1.1867 1.3483 1.4937 1.6279 1.7542 若改变微分方程,需将原方程函数改变。

MATLAB求解微分方程(实验6)微分方程求解-文档资料

MATLAB求解微分方程(实验6)微分方程求解-文档资料
实验
Experiments in Mathematics 微分方程求解
1
实验目的 实验内容
1、学会用Matlab求简单微分方程的解析解. 2、学会用Matlab求微分方程的数值解.
1、求简单微分方程的解析解. 2、求微分方程的数值解.
实验软件 MATLAB
2
微分方程的解析解
求微分方程(组)的解析解命令: dsolve(‘方程1’, ‘方程2’,…‘方程n’, ‘初始条件’, ‘自变量’)
(ltest.m)
23
1、 lorenz.m function xdot=lorenz(t,x) xdot=[-8/3,0,x(2);0,-10,10;-x(2),28,-1]*x; 2、ltest.m x0=[0 0 0.1]'; [t,x]=ode45('lorenz',[0,10],x0); plot(t,x(:,1),'-',t,x(:,2),'*',t,x(:,3),'+') pause plot3(x(:,1),x(:,2),x(:,3)),grid on
选择一组状态变量
x1 y, x2 y, , xn y(n1)
x1 x2 , x2 x3,
xn f (t, x1, x2 , , xn )
15
注意
x1 x2 , x2 x3,
xn f (t, x1, x2 , , xn )
1、建立M文件函数
function xdot = fun(t,x,y) xdot = [x2(t);x3(t);…;f(t, x1(t), x2(t),…xn(t))];
x=simple(x) % 将x简化 y=simple(y) z=simple(z)

第六章用MATLAB求解微分方程及微分方程组

第六章用MATLAB求解微分方程及微分方程组

运行结果:u = tan(t-c)
例 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 =3e-2xsin(5x)
不同求解器Solver的特点
求解器 Solver ode23s
OD E类 型
刚 性
特点
说明
刚 ode23tb 性
一步法;2阶 当精度较低时, Rosebrock算法; 计算时间比 低精度 ode15s短 当精度较低时, 梯形算法;低精 计算时间比 度 ode15s短
d 2x dx 2 1000(1 x 2 ) x 0 例 4 dt dt x(0) 2; x' (0) 0 解: 令 y1=x,y2=y1’
y Me k1t 即
模型2:快速饮酒后,体液中酒精含量的变化率
dx k2 x k1Mek1t dt x(0) 0
用Matlab求解模型2:
syms x y k1 k2 M t x=dsolve('Dx+k2*x=k1*M*exp(-k1*t)','x(0)=0','t') 运行结果: M*k1/(-k1+k2)*exp(-k2*t+t*(-k1+k2))-exp(-k2*t)*M*k1/(-k1+k2) 即:
(1)
2. 由于弹头始终对准乙舰,故导弹的速度平行于乙舰与导弹头位置的差向量,

利用MATLAB求解微分方程数值解的相关命令

利用MATLAB求解微分方程数值解的相关命令

利用MATLAB求解微分方程数值解的相关命令利用MATLAB求解微分方程数值解的相关命令1 指令函数及调用格式1.1 指令函数:dsolve注:此指令函数用于求解微分方程(组)的符号(解析)解。

1.2 单变量常微分方程的调用格式:f=dsolve(‘eq’, ‘cond’, ‘v’)注:此调用格式用于求符号微分方程的通解或特解,其中eq代表微分方程,cond代表微分方程的初始条件(若缺少,则求微分方程的通解),v为指定自变量(如未指定,系统默认t为自变量)。

1.3 常微分方程组的调用格式:f=dsolve(‘eq1’, ‘eq2’,…, ‘eqn’, ‘cond1’, ‘cond2’,…, ‘condn’, ‘v1’, ‘v2’, …, ‘vn’)注:此调用格式用于求解符号常微分方程组。

其中eq1,...,eqn 代表n个微分方程构成的微分方程组;cond1,...,condn代表微分方程组的初始条件(若缺少,则求微分方程组的通解),v1 , (v)为指定自变量(如未指定,系统默认t为自变量)。

1.4 记述规定:MATLAB中,用D(注意:一定是大写)记述微分方程中函数的导数。

当y是因变量时,用‘Dny’表示‘y的n阶导数’。

如,Dy表示y的一阶导数y ',Dny表示y的n阶导数。

Dy(0)=5表示y ' (0)=5。

D3y+D2y+Dy-x+5=0表示微分方程y'''+y''+y'-x+5=0。

2 实例演示例1、求微分方程2'22xy xy xe-+=的通解命令输入:>> y=dsolve('Dy+2*x*y=2*x*exp(-x^2)','x')得结果为:y =(x^2+C1)*exp(-x^2)若输入命令:>>y=dsolve('Dy+2*x*y=2*x*exp(-x^2)')则系统默认t为自变量,而把真正的自变量x当作常数处理,把y 当作t的函数,得到错误的结果:y =exp(-2*x*t-x*(x-2*t))+exp(-2*x*t)*C1例2、求微分方程22420250d x dxxdt dt-+=的通解命令输入:>> x=dsolve('4*D2x-20*Dx+25*x=0')得结果为:x =C1*exp(5/2*t)+C2*exp(5/2*t)*t%系统默认t 为自变量例3、求微分方程'''54100y y y +-+=在条件'006,4x x y y ====下的特解。

matlab常微分方程和常微分方程组求解方法

matlab常微分方程和常微分方程组求解方法

并做出解函数的曲线图。 6.完成实验报告。
为:
[X,Y]=dsolve('Dx+2*x-Dy=10*cos(t),Dx+Dy+2*y=4*exp(-2*t)','x(0)=2','y(0)=0' ) 以上这些都是常微分方程的精确解法,也称为常微分方程的符号解。但是, 我们知道,有大量的常微分方程虽然从理论上讲,其解是存在的,但我们却无法 求出其解析解, 此时, 我们需要寻求方程的数值解, 在求常微分方程数值解方面, MATLAB 具有丰富的函数,我们将其统称为 solver,其一般格式为: [T,Y]=solver(odefun,tspan,y0) 该函数表示在区间 tspan=[t0,tf]上,用初始条件 y0 求解显式常微分方程
[X,Y]=dsolve('Dx+5*x+y=exp(t),Dy- x-3*y=exp(2*t)','t')
dy dx 2x 10 cos t , x t 0 2 dt dt dx dy 2 y 4e2t , y 0 t 0 dt dt 例 4: 求常微分方程组 通解的 MATLAB 程序
常微分方程和常微分方程组的求解
一、实验目的: 熟悉 Matlab 软件中关于求解常微分方程和常微分方程组的各种命令,掌握 利用 Matlab 软件进行常微分方程和常微分方程组的求解。 二、相关知识 在 MATLAB 中,由函数 dsolve()解决常微分方程(组)的求解问题,其具体 格式如下: X=dsolve(‘eqn1’,’eqn2’,…) 函数 dsolve 用来解符号常微分方程、方程组,如果没有初始条件,则求出通 解,如果有初始条件,则求出特解。

matlab微分方程谱方法

matlab微分方程谱方法

matlab微分方程谱方法MATLAB是一个功能强大的数学软件,拥有多种求解微分方程的方法,其中谱方法是非常重要的一种。

谱方法是一种基于傅里叶级数的解微分方程的方法,它通过将函数表示为傅里叶级数的形式,利用傅里叶级数的性质,能够高效地求解微分方程。

谱方法的主要思想是利用傅里叶级数展开函数,然后根据微分方程求解出每个傅里叶系数的关系式,最后再利用傅里叶反变换得到函数的解。

谱方法的优点是数值精度高,收敛速度快,适用于各种类型的微分方程,但是在实际应用中,由于计算量较大,需谨慎选择计算参数。

在MATLAB中,使用谱方法求解微分方程的步骤如下:1. 将函数表示为傅里叶级数的形式,即将函数按照正交基函数的形式展开;2. 根据微分方程求解出每个傅里叶系数的关系式,这要涉及到微分方程的离散化;3. 利用傅里叶反变换得到函数的解;4. 对解进行检验,确定计算参数的正确性。

MATLAB中提供了许多谱方法的函数,如chebfun、dct、fft等,这些函数可大大减少编写代码的难度。

下面以使用chebfun求解微分方程为例,演示MATLAB中使用谱方法求解微分方程的步骤。

步骤1:构造函数我们考虑求解下列微分方程:u'' - u = x, 0 < x < pi该微分方程的边界条件为:u(0) = 0, u(pi) = 0首先,我们将函数表示为傅里叶级数的形式,即:u(x) = sum(a_n * cos(n * x) + b_n * sin(n * x))其中,a_n和b_n是待求解的系数。

引入微分算子Df = chebfun(@(x)diff(f(x)),[a b]),可以将微分方程转化为常微分方程组的形式:D2u - u = x, u(0) = 0, u(pi) = 0步骤2:求解系数我们利用微分方程的离散化求解出a_n和b_n的关系式。

假设N表示求和中的上限,则:a_n = (2/N)*sum(f(x)*cos(n*x))b_n = (2/N)*sum(f(x)*sin(n*x))利用MATLAB中的chebfun方法,我们可以轻易地实现以上公式。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第五章 控制系统仿真
§5.2 微分方程求解方法
以一个自由振动系统实例为例进行讨论。

如下图1所示弹簧-阻尼系统,参数如下:M=5 kg, b=1 N.s/m, k=2 N/m, F=1N
F
图1 弹簧-阻尼系统
假设初始条件为:时,将m 拉向右方,忽00=t 略小车的摩擦阻力, 求系m x 0)0(=s m x /0)0(=∙
统的响应。

)用常微分方程的数值求解函数求解包括
ode45、ode23、ode113、ode15s 、ode23s 等。

wffc1.m myfun1.m
一、常微分方程的数值求解函数ode45求解解:系统方程为 F kx x b x m =++∙∙∙
这是一个单变量二阶常微分方程。

将上式写成一个一阶方程组的形式,这是函数ode45调用规定的格式。

令: (位移)
x x =)1( (速度))1()2(∙
∙==x x x 上式可表示成:
⎥⎦⎤⎢⎣⎡--=⎥⎦⎤⎢⎣⎡=⎥⎥⎦
⎤⎢⎢⎣⎡∙∙)1(*20)2(*101)2()2()2()1(x x x x x x x 下面就可以进行程序的编制。

%写出函数文件myfun1.m
function xdot=myfun1(t,x)
xdot=[x(2);1-10*x(2)-20*x(1)];
% 主程序wffc1.m
t=[0 30];
x0=[0;0];
[tt,xx]=ode45(@myfun1,t,x0);
plot(tt,yy(:,1),':b',tt,yy(:,2),'-r')legend('位移','速度')
title('微分方程的解 x(t)')
二、方法2:
F
kx x b x m =++∙
∙∙2
51)()()(2++==s s s F s X s G %用传递函数编程求解ksys1.m
num=1;
den=[5 1 2];
%printsys(num,den)
%t=0:0.1:10;
sys=tf(num,den);
figure(1)
step(sys)
figure(2)
impulse(sys)
figure(3)
t=[0:0.1:10]';
ramp=t;
lsim(sys,ramp,t);
figure(4)
tt=size(t);
noise=rand(tt,1);
lsim(sys,noise,t)
figure(5)
yy=0.1*t.^2;
lsim(num,den,yy,t)
w=logspace(-1,1,100)';
[m p]=bode(num,den,w);
figure(6)
subplot(211);semilogx(w,20*log10(m)); grid on
subplot(212);semilogx(w,p)
grid on
[gm,pm,wpc,wgc]=margin(sys)
figure(7)
margin(sys)
figure(8)
nyquist(sys)
figure(9)
nichols(sys)
方法3:
F
kx x b x m =++∙∙∙1
25=++∙∙∙x x x x
x x 4.02.02.0--=∙∙∙
% 主程序wffc1.m
t=[0 30];
x0=[0;0];
[tt,yy]=ode45(@myfun1,t,x0);
figure(1)
plot(tt,yy(:,1),':b',tt,yy(:,2),'-r')hold on
plot(tt,0.2-0.2*yy(:,2)-0.4*yy(:,1),'-.k')
legend('位移','速度','加速度')
title('微分方程的解')
figure(2)
plot(yy(:,1),yy(:,2))
title('平面相轨迹')
%写出函数文件myfun1.m
function xdot=myfun1(t,x)
xdot=[x(2);0.2-0.2*x(2)-0.4*x(1)];。

相关文档
最新文档