Matlab求解微分方程(组)及偏微分方程(组)
- 格式:doc
- 大小:49.50 KB
- 文档页数:10
matlab 微分方程表达式使用Matlab求解微分方程是一种常见的数学建模方法。
微分方程在科学和工程领域中具有广泛的应用,例如描述物理系统、生物过程和经济变化等。
本文将介绍如何使用Matlab来求解微分方程,并通过一个具体的实例来说明其应用。
我们需要了解什么是微分方程。
微分方程是描述未知函数及其导数之间关系的方程。
一般来说,微分方程可以分为常微分方程和偏微分方程两种类型。
常微分方程是只含有未知函数的导数的方程,而偏微分方程是含有未知函数及其偏导数的方程。
在Matlab中,我们可以使用ode45函数来求解常微分方程。
ode45是一种常用的数值求解器,可以求解一阶或高阶常微分方程。
它的基本调用格式为:[t, y] = ode45(@f, tspan, y0)其中,@f是一个函数句柄,表示待求的微分方程。
tspan是时间范围,y0是初始条件。
ode45函数将返回时间数组t和对应的解向量y。
下面,我们通过一个具体的实例来说明如何使用Matlab求解微分方程。
假设有一个自由落体的物体,其运动方程可以用以下微分方程来描述:m*d^2y/dt^2 = -mg其中,m是物体的质量,y是物体的位移,t是时间,g是重力加速度。
我们可以将该微分方程转化为一阶微分方程组来求解:dy/dt = vdv/dt = -g其中,v是物体的速度。
现在,我们使用Matlab来求解该微分方程组。
我们定义一个函数文件,命名为free_fall.m,代码如下:function dydt = free_fall(t, y)g = 9.8; % 重力加速度dydt = zeros(2,1);dydt(1) = y(2);dydt(2) = -g;然后,我们使用ode45函数来求解微分方程组。
假设初始条件为y(0) = 0,v(0) = 0,时间范围为0到10秒。
代码如下:[t, y] = ode45(@free_fall, [0 10], [0 0]);我们可以通过绘制y随时间变化的曲线来观察物体的自由落体运动。
在MATLAB中,可以使用`dsolve`函数来求解微分方程组。
`dsolve`函数可以求解常微分方程(Ordinary Differential Equations,ODE)和偏微分方程(Partial Differential Equations,PDE)。
下面是一个示例,演示如何使用`dsolve`函数来求解一个简单的微分方程组:
```matlab
syms t x(t) y(t)
eq1 = @(t,x) x(t)/x(t-1) - 2; 第一个方程
eq2 = @(t,x) x(t-1)/x(t) - 3; 第二个方程
sol = dsolve({eq1, eq2}, x(t), t); 求解微分方程组
disp(sol); 显示解
```
在这个示例中,我们定义了两个方程`eq1`和`eq2`,然后使用`dsolve`函数来求解这两个方程组成的微分方程组。
注意,我们需要将方程以函数的形式传递给`dsolve`函数。
在`dsolve`函数中,第一个参数是一个包含所有方程的向量,第二个参数是要求解的未知函数。
`dsolve`函数将返回一个包含所有解的表达式。
在本例中,我们将解存储在`sol`变量中,并使用`disp`函数显示解。
请注意,在使用`dsolve`函数时,需要确保输入的方程是正确的,并且与所求解的问题相对应。
此外,还需要注意符号和函数的定义和使用方式。
matlab求解偏微分方程组偏微分方程组是数学中的重要问题之一,它描述了自然界中许多现象的变化规律。
而matlab作为一种强大的数值计算软件,可以用来求解偏微分方程组,为科学研究和工程应用提供了便利。
在matlab中,求解偏微分方程组可以使用pdepe函数。
pdepe函数是一个用于求解偏微分方程组的通用求解器,可以处理各种类型的偏微分方程组。
它的基本用法是定义一个偏微分方程组的初始条件、边界条件和方程形式,然后调用pdepe函数进行求解。
首先,我们需要定义偏微分方程组的初始条件和边界条件。
初始条件是指在初始时刻各个变量的取值,而边界条件是指在空间上的边界上各个变量的取值。
这些条件可以是数值或函数形式的。
接下来,我们需要定义偏微分方程组的方程形式。
方程形式是指偏微分方程组的具体形式,包括方程的类型、系数和非线性项等。
在matlab中,可以使用函数句柄的形式来定义方程形式。
然后,我们可以调用pdepe函数进行求解。
pdepe函数的基本语法是:sol = pdepe(m,@pdex1,@pdex2,@pdex3,x,t)其中,m是一个表示方程个数的整数,@pdex1、@pdex2和@pdex3分别是定义初始条件、边界条件和方程形式的函数句柄,x和t分别是表示空间和时间的向量。
最后,我们可以通过sol来获取求解结果。
sol是一个包含求解结果的三维数组,其中第一维表示时间,第二维表示空间,第三维表示方程个数。
我们可以通过索引来获取特定时间和空间点的解。
总之,matlab提供了强大的工具来求解偏微分方程组。
通过定义初始条件、边界条件和方程形式,然后调用pdepe函数进行求解,我们可以得到偏微分方程组的数值解。
这为科学研究和工程应用提供了便利,使得我们能够更好地理解和预测自然界中的变化规律。
matlab偏微分方程组求解摘要:一、引言1.介绍Matlab 在偏微分方程组求解中的应用2.阐述偏微分方程组的重要性和应用领域3.说明Matlab 在偏微分方程组求解中的优势二、Matlab 偏微分方程组求解方法1.有限差分法2.有限元法3.边界元法4.其他求解方法三、Matlab 偏微分方程组求解步骤1.准备模型和参数2.选择适当的求解方法3.编写求解脚本4.分析结果四、Matlab 偏微分方程组求解案例分析1.二维热传导方程2.二维亥姆霍兹方程3.三维波动方程五、结论1.总结Matlab 在偏微分方程组求解中的应用2.强调Matlab 在偏微分方程组求解中的重要性3.展望Matlab 在偏微分方程组求解领域的发展前景正文:一、引言Matlab 是一款功能强大的数学软件,广泛应用于科学计算、数据分析、建模等领域。
偏微分方程组是描述众多自然现象和工程问题的数学模型,求解偏微分方程组对于理解这些现象和问题具有重要意义。
Matlab 提供了丰富的工具箱和函数,可以方便地求解偏微分方程组,为科研和工程应用提供了强大的支持。
二、Matlab 偏微分方程组求解方法Matlab 提供了多种求解偏微分方程组的方法,包括有限差分法、有限元法、边界元法等。
有限差分法是一种常用的数值求解方法,通过离散化方程组,将偏微分方程转化为离散形式的代数方程组,从而求解。
有限元法和边界元法是另外两种常用的数值求解方法,分别通过将偏微分方程转化为有限个单元的加权积分和边界上的加权积分,从而求解。
除了上述方法外,Matlab 还支持其他求解方法,如有限体积法、谱方法等。
有限体积法是将偏微分方程组的控制区域划分为有限个体积单元,通过对单元内的值进行插值,得到离散形式的偏微分方程组。
谱方法则是利用傅里叶变换将偏微分方程组转化为频域问题,从而求解。
三、Matlab 偏微分方程组求解步骤求解偏微分方程组的过程主要包括准备模型和参数、选择适当的求解方法、编写求解脚本和分析结果四个步骤。
一、介绍Matlab是一种强大的数学计算工具,用于解决各种数学问题,包括求解偏微分方程组。
偏微分方程组是描述自然界中许多物理现象的数学模型,其求解对于科学研究和工程应用具有重要意义。
在Matlab中,可以通过多种方法来求解偏微分方程组,包括有限差分方法、有限元方法、谱方法等。
本文将对Matlab中求解偏微分方程组的方法进行介绍和讨论。
二、有限差分方法有限差分方法是一种常用的求解偏微分方程组的数值方法。
其基本思想是将连续的变量离散化为有限个点,并利用差分逼近来近似偏微分方程的导数。
在Matlab中,可以通过编写相应的差分方程组来求解偏微分方程组。
对于二维热传导方程,可以将偏导数用中心差分逼近,并构建相应的差分方程来求解温度分布。
通过循环迭代的方式,可以逐步逼近偏微分方程的解,并得到数值解。
三、有限元方法有限元方法是另一种常用的求解偏微分方程组的数值方法。
其基本思想是将求解区域离散化为有限个单元,并在每个单元内建立近似函数来逼近原始方程。
在Matlab中,可以利用有限元建模工具箱来构建离散化的网格,并编写相应的有限元方程来求解偏微分方程组。
对于弹性力学方程,可以利用有限元方法来求解结构的位移和应力分布。
通过求解线性方程组,可以得到离散化网格上的数值解。
四、谱方法谱方法是一种利用特定基函数展开偏微分方程解的方法。
其基本思想是选取适当的基函数,并通过展开系数来得到偏微分方程的数值解。
在Matlab中,可以通过谱方法工具箱来实现对偏微分方程组的求解。
对于波动方程,可以利用正交多项式展开来逼近波函数,通过选取适当的基函数和展开系数,可以得到偏微分方程的数值解。
五、总结在Matlab中,有多种方法可以用来求解偏微分方程组,包括有限差分方法、有限元方法、谱方法等。
这些方法各有特点,适用于不同类型的偏微分方程和求解问题。
通过合理地选择方法和编写相应的数值算法,可以在Matlab中高效地求解偏微分方程组,为科学研究和工程应用提供重要支持。
MATLAB偏微分方程组求解介绍偏微分方程组是描述自然界中许多现象的数学模型,包括流体力学、电磁学、热传导等。
求解偏微分方程组是科学研究和工程应用中的重要问题之一。
MATLAB作为一种强大的数值计算工具,提供了丰富的函数和工具箱,可以用于求解偏微分方程组。
本文将介绍如何使用MATLAB求解偏微分方程组。
我们将从基本的概念和数学理论开始,然后介绍MATLAB中的相关函数和工具箱,最后给出一个具体的求解偏微分方程组的示例。
基本概念和数学理论偏微分方程组偏微分方程组是一个包含多个未知函数的方程组,其中每个未知函数的导数(偏导数)出现在方程中。
一般形式的偏微分方程组可以写成以下形式:F1(u1,u2,…,u n,∂u1∂x,∂u2∂x,…,∂u n∂x,∂u1∂y,∂u2∂y,…,∂u n∂y,…)=0F2(u1,u2,…,u n,∂u1∂x,∂u2∂x,…,∂u n∂x,∂u1∂y,∂u2∂y,…,∂u n∂y,…)=0⋮F m(u1,u2,…,u n,∂u1∂x,∂u2∂x,…,∂u n∂x,∂u1∂y,∂u2∂y,…,∂u n∂y,…)=0其中,u1,u2,…,u n是未知函数,∂u1∂x ,∂u2∂x,…,∂u n∂x,∂u1∂y,∂u2∂y,…,∂u n∂y,…是未知函数的偏导数。
边界条件为了求解偏微分方程组,我们需要给出适当的边界条件。
边界条件是在给定的边界上给出未知函数或其导数的值。
常见的边界条件包括:Dirichlet边界条件、Neumann边界条件和Robin边界条件。
•Dirichlet边界条件:给定未知函数在边界上的值。
•Neumann边界条件:给定未知函数的法向导数在边界上的值。
•Robin边界条件:给定未知函数和其法向导数的线性组合在边界上的值。
数值方法由于一般情况下无法找到偏微分方程组的解析解,我们需要使用数值方法来求解。
常见的数值方法包括:有限差分法、有限元法和谱方法。
•有限差分法:将偏微分方程组转化为差分方程组,通过在网格上逼近导数来近似原方程。
常微分方程:1 ODE解算器简介(ode**)2 微分方程转换3 刚性/非刚性问题(Stiff/Nonstiff)4 隐式微分方程(IDE)5 微分代数方程(DAE)6 延迟微分方程(DDE)7 边值问题(BVP) 偏微分方程(PDEs)Matlab解法偏微分方程:1 一般偏微分方程组(PDEs)的命令行求解2 特殊偏微分方程(PDEs)的PDEtool求解3 陆君安《偏微分方程的MATLAB解法先来认识下常微分方程(ODE)初值问题解算器(solver)[T,Y,TE,YE,IE] = odesolver(odefun,tspan,y0,options)sxint = deval(sol,xint)Matlab中提供了以下解算器:输入参数:odefun:微分方程的Matlab语言描述函数,必须是函数句柄或者字符串,必须写成Matlab规范格式(也就是一阶显示微分方程组),这个具体在后面讲解tspan=[t0 tf]或者[t0,t1,…tf]:微分变量的范围,两者都是根据t0和tf的值自动选择步长,只是前者返回所有计算点的微分值,而后者只返回指定的点的微分值,一定要注意对于后者tspan必须严格单调,还有就是两者数据存储时使用的内存不同(明显前者多),其它没有任何本质的区别y0=[y(0),y’(0),y’’(0)…]:微分方程初值,依次输入所有状态变量的初值,什么是状态变量在后面有介绍options:微分优化参数,是一个结构体,使用odeset可以设置具体参数,详细内容查看帮助输出参数:T:时间列向量,也就是ode**计算微分方程的值的点Y:二维数组,第i列表示第i个状态变量的值,行数与T一致在求解ODE时,我们还会用到deval()函数,deval的作用就是通过结构体solution计算t 对应x值,和polyval之类的很相似!参数格式如下:sol:就是上次调用ode**函数得道的结构体解xint:需要计算的点,可以是标量或者向量,但是必须在tspan范围内该函数的好处就是如果我想知道t=t0时的y值,不需要重新使用ode计算,而直接使用上次计算的得道solution就可以[教程] 微分方程转换为一阶显示微分方程组方法好,上面我们把Matlab中的常微分方程(ODE)的解算器讲解的差不多了,下面我们就具体开始介绍如何使用上面的知识吧!现实总是残酷的,要得到就必须先付出,不可能所有的ODE一拿来就可以直接使用,因此,在使用ODE解算器之前,我们需要做的第一步,也是最重要的一步,借助状态变量将微分方程组化成Matlab可接受的标准形式(一阶显示常微分方程)!如果ODEs由一个或多个高阶微分方程给出,则我们应先将其变换成一阶显式常微分方程组!下面我们以两个高阶微分方程构成的ODEs为例介绍如何将之变换成一个一阶显式常微分方程组。
matlab解微积分方程使用Matlab解微积分方程微积分方程是数学中的重要概念,广泛应用于物理学、工程学、经济学等领域。
解微积分方程是研究微积分方程的一个重要问题,而Matlab作为一种强大的数值计算软件,可以有效地解决微积分方程。
Matlab提供了多种求解微积分方程的方法,包括欧拉法、龙格-库塔法、四阶龙格-库塔法等。
这些方法可以用来求解常微分方程、偏微分方程以及一些特殊类型的微积分方程。
我们来看看如何使用Matlab求解常微分方程。
常微分方程是一种只涉及一个自变量的微分方程,可以表示为dy/dx = f(x, y),其中f(x, y)是已知的函数。
在Matlab中,可以使用ode45函数来求解常微分方程。
下面以一个简单的一阶常微分方程为例,来演示如何使用Matlab求解。
假设我们要求解方程dy/dx = x + y,且初始条件为y(0) = 1。
首先,我们需要定义方程的函数形式,即f(x, y) = x + y。
然后,使用ode45函数来求解:```function dydx = myode(x, y)dydx = x + y;end[t, y] = ode45(@myode, [0, 1], 1);```上述代码中,myode函数定义了方程的函数形式,ode45函数用于求解微分方程,[0, 1]表示求解的时间范围,1表示初始条件。
最后,得到的结果存储在变量t和y中,t表示时间,y表示方程的解。
除了常微分方程,Matlab还可以求解偏微分方程。
偏微分方程是一种涉及多个自变量的微分方程,可以表示为∂u/∂t = f(x, y, t, u, ∂u/∂x, ∂u/∂y)。
在Matlab中,可以使用pdepe函数来求解偏微分方程。
假设我们要求解一个简单的二维热传导方程,即∂u/∂t = ∂^2u/∂x^2 + ∂^2u/∂y^2,且初始条件为u(x, y, 0) = sin(x)sin(y),边界条件为u(0, y, t) = 0,u(π, y, t) = 0,u(x, 0, t) = 0,u(x, π, t) = 0。
matlab偏微分方程组求解(实用版)目录1.MATLAB 求解偏微分方程组的概述2.偏微分方程组的格式和类型3.MATLAB 求解偏微分方程组的方法4.常用的 MATLAB 求解偏微分方程组的工具箱5.MATLAB 求解偏微分方程组的步骤和示例正文一、MATLAB 求解偏微分方程组的概述偏微分方程组在数学、物理、工程等领域有着广泛的应用,而 MATLAB 作为一款强大的数学软件,提供了丰富的函数和工具箱来求解偏微分方程组。
本文将介绍如何使用 MATLAB 求解偏微分方程组。
二、偏微分方程组的格式和类型偏微分方程组的格式一般为:u/x = f(x, y, u)u/y = g(x, y, u)u/z = h(x, y, u)其中,u 是未知函数,x、y、z 是自变量,f、g、h 是已知函数。
偏微分方程组的类型可以根据未知函数的个数、方程的阶数、方程的形式等进行分类。
常见的类型有一阶方程组、二阶方程组、高阶方程组、线性方程组、非线性方程组等。
三、MATLAB 求解偏微分方程组的方法MATLAB 求解偏微分方程组的主要方法有以下几种:1.符号计算法:使用 MATLAB 内置的符号计算函数,如 sym、syms、subs 等,可以方便地表示和操作偏微分方程组。
2.数值计算法:使用 MATLAB 的数值计算函数,如 ode45、ode23、ode113 等,可以求解数值形式的偏微分方程组。
3.图形可视化法:使用 MATLAB 的图形函数,如 plot、contour 等,可以直观地显示偏微分方程组的解。
四、常用的 MATLAB 求解偏微分方程组的工具箱MATLAB 中有多个工具箱可以用于求解偏微分方程组,常用的有:1.ODE Toolbox:包含求解常微分方程(ODE)和偏微分方程(PDE)的函数。
2.PDE Toolbox:专门用于求解偏微分方程的工具箱,提供了丰富的PDE 求解器和可视化工具。
3.Finite Element Toolbox:用于求解有限元方法的偏微分方程组。
第四讲 Matlab 求解微分方程(组)理论介绍:Matlab 求解微分方程(组)命令 求解实例:Matlab 求解微分方程(组)实例实际应用问题通过数学建模所归纳得到的方程,绝大多数都是微分方程,真正能得到代数方程的机会很少.另一方面,能够求解的微分方程也是十分有限的,特别是高阶方程和偏微分方程(组).这就要求我们必须研究微分方程(组)的解法:解析解法和数值解法. 一.相关函数、命令及简介1.在Matlab 中,用大写字母D 表示导数,Dy 表示y 关于自变量的一阶导数,D2y 表示y 关于自变量的二阶导数,依此类推.函数dsolve 用来解决常微分方程(组)的求解问题,调用格式为:X=dsolve(‘eqn1’,’eqn2’,…)函数dsolve 用来解符号常微分方程、方程组,如果没有初始条件,则求出通解,如果有初始条件,则求出特解.注意,系统缺省的自变量为t2.函数dsolve 求解的是常微分方程的精确解法,也称为常微分方程的符号解.但是,有大量的常微分方程虽然从理论上讲,其解是存在的,但我们却无法求出其解析解,此时,我们需要寻求方程的数值解,在求常微分方程数值解方面,MATLAB 具有丰富的函数,我们将其统称为solver ,其一般格式为:[T,Y]=solver(odefun,tspan,y0)说明:(1)solver 为命令ode45、ode23、ode113、ode15s 、ode23s 、ode23t 、ode23tb 、ode15i 之一.(2)odefun 是显示微分方程'(,)y f t y =在积分区间tspan 0[,]f t t =上从0t 到f t 用初始条件0y 求解.(3)如果要获得微分方程问题在其他指定时间点012,,,,f t t t t 上的解,则令tspan 012[,,,]f t t t t =(要求是单调的).(4)因为没有一种算法可以有效的解决所有的ODE 问题,为此,Matlab 提供了多种求解器solver ,对于不同的ODE 问题,采用不同的solver.表1 Matlab中文本文件读写函数说明:ode23、ode45是极其常用的用来求解非刚性的标准形式的一阶微分方程(组)的初值问题的解的Matlab常用程序,其中:ode23采用龙格-库塔2阶算法,用3阶公式作误差估计来调节步长,具有低等的精度.ode45则采用龙格-库塔4阶算法,用5阶公式作误差估计来调节步长,具有中等的精度.3.在matlab命令窗口、程序或函数中创建局部函数时,可用内联函数inline,inline函数形式相当于编写M函数文件,但不需编写M-文件就可以描述出某种数学关系.调用inline函数,只能由一个matlab表达式组成,并且只能返回一个变量,不允许[u,v]这种向量形式.因而,任何要求逻辑运算或乘法运算以求得最终结果的场合,都不能应用inline函数,inline函数的一般形式为:FunctionName=inline(‘函数内容’, ‘所有自变量列表’)例如:(求解F(x)=x^2*cos(a*x)-b ,a,b是标量;x是向量)在命令窗口输入:Fofx=inline(‘x .^2*cos(a*x)-b’ , ‘x’,’a’,’b’); g= Fofx([pi/3 pi/3.5],4,1) 系统输出为:g=-1.5483 -1.7259注意:由于使用内联对象函数inline 不需要另外建立m 文件,所有使用比较方便,另外在使用ode45函数的时候,定义函数往往需要编辑一个m 文件来单独定义,这样不便于管理文件,这里可以使用inline 来定义函数. 二.实例介绍1.几个可以直接用Matlab 求微分方程精确解的实例 例1 求解微分方程2'2x y xy xe -+=程序:syms x y; y=dsolve(‘Dy+2*x*y=x*exp(-x^2)’,’x ’)例 2 求微分方程'0x xy y e +-=在初始条件(1)2y e =下的特解并画出解函数的图形.程序:syms x y; y=dsolve(‘x*Dy+y-exp(1)=0’,’y(1)=2*exp(1)’,’x ’);ezplot(y)例 3 求解微分方程组530tdx x y e dtdy x y dt⎧++=⎪⎪⎨⎪--=⎪⎩在初始条件00|1,|0t t x y ====下的特解并画出解函数的图形.程序:syms x y t[x,y]=dsolve('Dx+5*x+y=exp(t)','Dy-x-3*y=0','x(0)=1','y(0)=0','t') simple(x); simple(y)ezplot(x,y,[0,1.3]);axis auto2.用ode23、ode45等求解非刚性标准形式的一阶微分方程(组)的初值问题的数值解(近似解)例 4 求解微分方程初值问题2222(0)1dy y x xdx y ⎧=-++⎪⎨⎪=⎩的数值解,求解范围为区间[0,0.5].程序:fun=inline('-2*y+2*x^2+2*x','x','y');[x,y]=ode23(fun,[0,0.5],1); plot(x,y,'o-')例 5 求解微分方程22'2(1)0,(0)1,(0)0d y dyy y y y dt dtμ--+===的解,并画出解的图形.分析:这是一个二阶非线性方程,我们可以通过变换,将二阶方程化为一阶方程组求解.令12,,7dyx y x dtμ===,则 121221212,(0)17(1),(0)0dx x x dtdx x x x x dt⎧==⎪⎪⎨⎪=--=⎪⎩ 编写M-文件vdp.m function fy=vdp(t,x)fy=[x(2);7*(1-x(1)^2)*x(2)-x(1)]; end在Matlab 命令窗口编写程序 y0=[1;0][t,x]=ode45(@vdp,[0,40],y0);或[t,x]=ode45('vdp',[0,40],y0); y=x(:,1);dy=x(:,2); plot(t,y,t,dy)练习与思考:M-文件vdp.m 改写成inline 函数程序? 3.用Euler 折线法求解Euler 折线法求解的基本思想是将微分方程初值问题00(,)()dyf x y dxy x y ⎧=⎪⎨⎪=⎩ 化成一个代数(差分)方程,主要步骤是用差商()()y x h y x h +-替代微商dydx,于是00()()(,())()k k k k y x h y x f x y x h y y x +-⎧=⎪⎨⎪=⎩记1,(),k k k k x x h y y x +=+=从而1(),k k y y x h +=+于是0011(),,0,1,2,,1(,).k k k k k k y y x x x h k n y y hf x y ++=⎧⎪=+=-⎨⎪=+⎩例 6 用Euler 折线法求解微分方程初值问题22(0)1dyx y dxy y ⎧=+⎪⎨⎪=⎩的数值解(步长h 取0.4),求解范围为区间[0,2].分析:本问题的差分方程为00110,1,0.4,0,1,2,,1(,).k k k k k k x y h x x h k n y y hf x y ++===⎧⎪=+=-⎨⎪=+⎩程序:>> clear >> f=sym('y+2*x/y^2'); >> a=0; >> b=2; >> h=0.4; >> n=(b-a)/h+1; >> x=0; >> y=1;>> szj=[x,y];%数值解 >> for i=1:n-1y=y+h*subs(f,{'x','y'},{x,y});%subs ,替换函数 x=x+h; szj=[szj;x,y]; end >>szj>> plot(szj(:,1),szj(:,2))说明:替换函数subs 例如:输入subs(a+b,a,4) 意思就是把a 用4替换掉,返回 4+b ,也可以替换多个变量,例如:subs(cos(a)+sin(b),{a,b},[sym('alpha'),2])分别用字符alpha 替换a 和2替换b ,返回 cos(alpha)+sin(2)特别说明:本问题可进一步利用四阶Runge-Kutta 法求解,Euler 折线法实际上就是一阶Runge-Kutta 法,Runge-Kutta 法的迭代公式为001112341213243(),,(22),6(,),0,1,2,,1(,),22(,),22(,).k k k k k k k k k k k k y y x x x h h y y L L L L L f x y k n h h L f x y L h h L f x y L L f x h y hL ++=⎧⎪=+⎪⎪=++++⎪⎪=⎪=-⎨⎪=++⎪⎪⎪=++⎪⎪=++⎩相应的Matlab 程序为:>> clear >> f=sym('y+2*x/y^2'); >> a=0; >> b=2; >> h=0.4; >> n=(b-a)/h+1; >> x=0; >> y=1;>> szj=[x,y];%数值解 >> for i=1:n-1l1=subs(f, {'x','y'},{x,y});替换函数 l2=subs(f, {'x','y'},{x+h/2,y+l1*h/2}); l3=subs(f, {'x','y'},{x+h/2,y+l2*h/2}); l4=subs(f, {'x','y'},{x+h,y+l3*h}); y=y+h*(l1+2*l2+2*l3+l4)/6; x=x+h; szj=[szj;x,y]; end>>szj>> plot(szj(:,1),szj(:,2))练习与思考:(1)ode45求解问题并比较差异. (2)利用Matlab 求微分方程(4)(3)''20y y y -+=的解.(3)求解微分方程''2',2(1)0,030,(0)1,(0)0y y y y x y y --+=≤≤==的特解. (4)利用Matlab 求微分方程初值问题2''''00(1)2,|1,|3x x x y xy y y ==+===的解. 提醒:尽可能多的考虑解法 三.微分方程转换为一阶显式微分方程组Matlab 微分方程解算器只能求解标准形式的一阶显式微分方程(组)问题,因此在使用ODE 解算器之前,我们需要做的第一步,也是最重要的一步就是借助状态变量将微分方程(组)化成Matlab 可接受的标准形式.当然,如果ODEs 由一个或多个高阶微分方程给出,则我们应先将它变换成一阶显式常微分方程组.下面我们以两个高阶微分方程组构成的ODEs 为例介绍如何将它变换成一个一阶显式微分方程组.Step 1 将微分方程的最高阶变量移到等式左边,其它移到右边,并按阶次从低到高排列.形式为:()'''(1)'''(1)()'''(1)'''(1)(,,,,,,,,,,)(,,,,,,,,,,)m m n n m n x f t x x x x y y y y y g t x x x x y y y y ----⎧=⎨=⎩Step 2 为每一阶微分式选择状态变量,最高阶除外'''(1)123'''(1)123,,,,,,,,,m m n m m m m n x x x x x x x x x y x y x y x y--++++========注意:ODEs 中所有是因变量的最高阶次之和就是需要的状态变量的个数,最高阶的微分式不需要给它状态变量.Step 3 根据选用的状态变量,写出所有状态变量的一阶微分表达式''''122334123''12123,,,,(,,,,,),,(,,,,,)m m n m m m nm n x x x x x x x f t x x x x xx xg t x x x x +++++======练习与思考:(1)求解微分方程组**'''3312*'''3312()()22x x x y x r r y y y x y r r μμμμμμ⎧+-=+--⎪⎪⎨⎪=+--⎪⎩其中2r =1r =*1,μμ=-1/82.45,μ=(0) 1.2,x =(0)0,y ='(0)0,x ='(0) 1.049355751y =-(2)求解隐式微分方程组''''''''''''2235x y x y x y x y xy y ⎧+=⎨++-=⎩ 提示:使用符号计算函数solve 求'''',x y ,然后利用求解微分方程的方法 四.偏微分方程解法Matlab 提供了两种方法解决PDE 问题,一是使用pdepe 函数,它可以求解一般的PDEs,具有较大的通用性,但只支持命令形式调用;二是使用PDE 工具箱,可以求解特殊PDE 问题,PDEtoll 有较大的局限性,比如只能求解二阶PDE 问题,并且不能解决片微分方程组,但是它提供了GUI 界面,从复杂的编程中解脱出来,同时还可以通过File —>Save As 直接生成M 代码.1.一般偏微分方程(组)的求解(1)Matlab 提供的pdepe 函数,可以直接求解一般偏微分方程(组),它的调用格式为:sol=pdepe(m,@pdefun,@pdeic,@pdebc,x,t)@pdefun 是PDE 的问题描述函数,它必须换成标准形式:(,,)[(,,,)](,,,)m m u u u uc x t x x f x t u s x t u x t x x x-∂∂∂∂∂=+∂∂∂∂∂ 这样,PDE 就可以编写入口函数:[c,f,s]=pdefun(x,t,u,du),m,x,t 对应于式中相关参数,du 是u 的一阶导数,由给定的输入变量可表示出c,f,s 这三个函数.@pdebc 是PDE 的边界条件描述函数,它必须化为形式:(,,)(,,).*(,,,)0up x t u q x t u f x t u x∂==∂ 于是边值条件可以编写函数描述为:[pa,qa,pb,qb]=pdebc(x,t,u,du),其中a 表示下边界,b 表示上边界.@pdeic 是PDE 的初值条件,必须化为形式:00(,)u x t u =,故可以使用函数描述为:u0=pdeic(x)sol 是一个三维数组,sol(:,:,i)表示i u 的解,换句话说,k u 对应x(i)和t(j)时的解为sol(i,j,k),通过sol ,我们可以使用pdeval 函数直接计算某个点的函数值.(2)实例说明 求解偏微分2111222221220.024()0.17()u u F u u t xu u F u u tx ⎧∂∂=--⎪⎪∂∂⎨∂∂⎪=+-⎪∂∂⎩ 其中, 5.7311.46()x x F x e e -=-且满足初始条件12(,0)1,(,0)0u x u x ==及边界条件1(0,)0,u t x ∂=∂221(0,)0,(1,)1,(1,)0uu t u t t x∂===∂ 解:(1)对照给出的偏微分方程和pdepe 函数求解的标准形式,原方程改写为111221220.024()1.*()10.17u u F u u x u F u u u t x x ∂⎡⎤⎢⎥--⎡⎤⎡⎤⎡⎤∂∂∂=+⎢⎥⎢⎥⎢⎥⎢⎥-∂∂∂⎣⎦⎣⎦⎣⎦⎢⎥⎢⎥∂⎣⎦可见1121220.024()10,,,()10.17u F u u x m c f s F u u u x ∂⎡⎤⎢⎥--⎡⎤⎡⎤∂====⎢⎥⎢⎥⎢⎥-∂⎣⎦⎣⎦⎢⎥⎢⎥∂⎣⎦ %目标PDE 函数function [c,f,s]=pdefun(x,t,u,du) c=[1;1];f=[0.024*du(1);0.17*du(2)]; temp=u(1)-u(2);s=[-1;1].*(exp(5.73*temp)-exp(-11.46*temp)) end(2)边界条件改写为:下边界2010.*00f u ⎡⎤⎡⎤⎡⎤+=⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦上边界1110.*000u f -⎡⎤⎡⎤⎡⎤+=⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦%边界条件函数function [pa,qa,pb,qb]=pdebc(xa,ua,xb,ub,t) pa=[0;ua(2)]; qa=[1;0]; pb=[ub(1)-1;0]; qb=[0;1]; end(3)初值条件改写为:1210u u ⎡⎤⎡⎤=⎢⎥⎢⎥⎣⎦⎣⎦%初值条件函数 function u0=pdeic(x) u0=[1;0]; end(4)编写主调函数 clc x=0:0.05:1; t=0:0.05:2; m=0;sol=pdepe(m,@pdefun,@pdeic,@pdebc,x,t); subplot(2,1,1) surf(x,t,sol(:,:,1)) subplot(2,1,2) surf(x,t,sol(:,:,2))练习与思考: This example illustrates the straightforward formulation, computation, and plotting of the solution of a single PDE.2()u u t x xπ∂∂∂=∂∂∂ This equation holds on an interval 01x ≤≤ for times 0t ≥. The PDE satisfies the initial condition (,0)sin u x x π= and boundary conditions(0,)0;(1,)0t uu t e t xπ-∂=+=∂ 2.PDEtool 求解偏微分方程(1)PDEtool (GUI )求解偏微分方程的一般步骤在Matlab 命令窗口输入pdetool ,回车,PDE 工具箱的图形用户界面(GUI)系统就启动了.从定义一个偏微分方程问题到完成解偏微分方程的定解,整个过程大致可以分为六个阶段Step 1 “Draw 模式”绘制平面有界区域Ω,通过公式把Matlab 系统提供的实体模型:矩形、圆、椭圆和多边形,组合起来,生成需要的平面区域.Step 2 “Boundary 模式”定义边界,声明不同边界段的边界条件.Step 3 “PDE 模式”定义偏微分方程,确定方程类型和方程系数c,a,f,d ,根据具体情况,还可以在不同子区域声明不同系数.Step 4 “Mesh 模式”网格化区域Ω,可以控制自动生成网格的参数,对生成的网格进行多次细化,使网格分割更细更合理.Step 5 “Solve 模式”解偏微分方程,对于椭圆型方程可以激活并控制非线性自适应解题器来处理非线性方程;对于抛物线型方程和双曲型方程,设置初始边界条件后可以求出给定时刻t 的解;对于特征值问题,可以求出给定区间上的特征值.求解完成后,可以返回到Step 4,对网格进一步细化,进行再次求解.Step 6 “View 模式”计算结果的可视化,可以通过设置系统提供的对话框,显示所求的解的表面图、网格图、等高线图和箭头梯形图.对于抛物线型和双曲线型问题的解还可以进行动画演示.(2)实例说明用法求解一个正方形区域上的特征值问题:12|0u u u u λ∂Ω⎧-∆-=⎪⎨⎪=⎩ 正方形区域为:11,1 1.x x -≤≤-≤≤(1)使用PDE 工具箱打开GUI 求解方程(2)进入Draw 模式,绘制一个矩形,然后双击矩形,在弹出的对话框中设置Left=-1,Bottom=-1,Width=2,Height=2,确认并关闭对话框(3)进入Boundary 模式,边界条件采用Dirichlet 条件的默认值(4)进入PDE 模式,单击工具栏PDE 按钮,在弹出的对话框中方程类型选择Eigenmodes,参数设置c=1,a=-1/2,d=1,确认后关闭对话框(5)单击工具栏的 按钮,对正方形区域进行初始网格剖分,然后再对网格进一步细化剖分一次(6)点开solve菜单,单击Parameters选项,在弹出的对话框中设置特征值区域为[-20,20](7)单击Plot菜单的Parameters项,在弹出的对话框中选中Color、Height(3-D plot)和show mesh项,然后单击Done确认(8)单击工具栏的“=”按钮,开始求解。
matlab求解偏微分
在MATLAB中,求解偏微分方程可以使用偏微分方程工具箱(Partial Differential Equation Toolbox)提供的函数来实现。
偏微分方程工具箱提供了许多函数来求解各种类型的偏微分方程,包括椭圆型、双曲型和抛物型偏微分方程。
首先,你需要定义你的偏微分方程。
然后,你可以使用偏微分方程工具箱中的函数来求解这个方程。
例如,如果你的偏微分方程是一个二维的波动方程,你可以使用 "pdepe" 函数来求解。
如果你的偏微分方程是一个二维的热传导方程,你可以使用 "pdepe" 函数来求解。
在使用这些函数时,你需要提供偏微分方程的边界条件、初始条件和空间网格。
你还可以指定求解的时间范围,如果你的方程是一个时间相关的偏微分方程的话。
除了偏微分方程工具箱提供的函数,MATLAB还提供了其他一些函数来求解偏微分方程,比如 "pdepe" 和 "pdepe"。
这些函数可以用来求解更加复杂的偏微分方程,或者对于一些特殊的情况。
总之,在MATLAB中求解偏微分方程可以通过偏微分方程工具箱提供的函数来实现,你需要先定义你的偏微分方程,然后使用相应的函数来求解。
当然,具体的求解方法还会根据你的偏微分方程的类型和具体情况而有所不同。
matlab求解偏微分方程
Matlab求解偏微分方程的步骤:
1、首先,定义偏微分方程,并确定微分方程的种类;
2、然后,选择Matlab解决方案,所有内置微分方程求解器都支持基于初始值的手算方案;
3、接着,指定偏微分方程的解决参数,如函数、初始值、区间、边界
条件和终止条件;
4、之后,启动Matlab微分方程求解器,以计算偏微分方程的解决结果,如需要则可以绘制曲线图;
5、最后,检查偏微分方程的解决结果是否准确,可以利用MATLAB
自带的代数系统软件Maple来检查数值结果。
总体来说,使用Matlab求解偏微分方程非常容易,用户可以根据实际
情况,快速地完成偏微分方程的解决。
Matlab提供了一系列灵活的解
决方案,可以满足日常研究工作的所有需求。
另外,Matlab的可视化
绘图,可以帮助用户更好地理解偏微分方程的结果。
matlab 求解偏微分方程使用MATLAB求解偏微分方程摘要:偏微分方程(partial differential equation, PDE)是数学中重要的一类方程,广泛应用于物理、工程、经济、生物等领域。
MATLAB 是一种强大的数值计算软件,提供了丰富的工具箱和函数,可以用来求解各种类型的偏微分方程。
本文将介绍如何使用MATLAB来求解偏微分方程,并通过具体案例进行演示。
引言:偏微分方程是描述多变量函数的方程,其中包含了函数的偏导数。
一般来说,偏微分方程可以分为椭圆型方程、双曲型方程和抛物型方程三类。
求解偏微分方程的方法有很多,其中数值方法是最常用的一种。
MATLAB作为一种强大的数值计算软件,提供了丰富的工具箱和函数,可以用来求解各种类型的偏微分方程。
方法:MATLAB提供了多种求解偏微分方程的函数和工具箱,包括pdepe、pdetoolbox和pde模块等。
其中,pdepe函数是用来求解带有初始条件和边界条件的常微分方程组的函数,可以用来求解一维和二维的偏微分方程。
pdepe函数使用有限差分法或有限元法来离散化偏微分方程,然后通过求解离散化后的常微分方程组得到最终的解。
案例演示:考虑一维热传导方程的求解,偏微分方程为:∂u/∂t = α * ∂^2u/∂x^2其中,u(x,t)是温度分布函数,α是热扩散系数。
假设初始条件为u(x,0)=sin(pi*x),边界条件为u(0,t)=0和u(1,t)=0。
我们需要定义偏微分方程和边界条件。
在MATLAB中,可以使用匿名函数来定义偏微分方程和边界条件。
然后,我们使用pdepe函数求解偏微分方程。
```matlabfunction [c,f,s] = pde(x,t,u,DuDx)c = 1;f = DuDx;s = 0;endfunction u0 = uinitial(x)u0 = sin(pi*x);endfunction [pl,ql,pr,qr] = uboundary(xl,ul,xr,ur,t)pl = ul;ql = 0;pr = ur;qr = 0;endx = linspace(0,1,100);t = linspace(0,0.1,10);m = 0;sol = pdepe(m,@pde,@uinitial,@uboundary,x,t);u = sol(:,:,1);surf(x,t,u);xlabel('Distance x');ylabel('Time t');zlabel('Temperature u');```在上述代码中,我们首先定义了偏微分方程函数pde,其中c、f和s分别表示系数c、f和s。
matlab解偏微分方程组使用Matlab解偏微分方程组在科学与工程领域,偏微分方程组是描述自然现象和物理过程的重要数学工具。
解偏微分方程组是求解这些现象和过程的数值模拟方法之一。
Matlab作为一种高级的数值计算软件,提供了强大的功能来解决偏微分方程组。
本文将介绍如何使用Matlab来解偏微分方程组,并给出实例说明。
一、Matlab解偏微分方程组的基本原理Matlab是一种基于矩阵运算的高级数值计算软件,它提供了丰富的函数和工具箱来解决数学问题。
在解偏微分方程组时,Matlab主要采用有限差分法、有限元法和谱方法等数值方法。
这些方法将偏微分方程转化为离散的代数方程组,然后通过求解代数方程组得到数值解。
二、使用Matlab解偏微分方程组的步骤1. 定义偏微分方程组:首先需要将偏微分方程组转化为Matlab可以处理的形式。
通常将自变量和因变量离散化,并用矩阵和向量表示。
2. 离散化:将偏微分方程中的连续变量转化为离散变量,通常采用有限差分法或有限元法。
有限差分法将偏微分方程中的导数用差商表示,有限元法则将区域划分为有限个小单元。
3. 构建代数方程组:根据离散化后的方程,可以得到相应的代数方程组。
这一步需要根据边界条件和初始条件来确定代数方程的边界值和初始值。
4. 求解代数方程组:利用Matlab提供的求解函数,如\texttt{fsolve}或\texttt{ode45}等,求解代数方程组得到数值解。
5. 可视化结果:使用Matlab的绘图函数,如\texttt{plot}或\texttt{surf}等,将数值解可视化展示出来。
这可以帮助我们更好地理解解的特性和趋势。
三、一个简单的例子为了更好地理解如何使用Matlab解偏微分方程组,我们将以一个简单的热传导问题为例。
考虑一个一维热传导方程:$$\frac{{\partial u}}{{\partial t}} = \frac{{\partial^2 u}}{{\partial x^2}}$$其中$u(x,t)$是温度分布,$x$是空间变量,$t$是时间变量。
matlab解微分方程组
MATLAB是一种强大的计算工具,能够以高效的方式处理复杂的数学问题。
由于其灵活的编程接口和拥有大量可用的函数,MATLAB可以被用于解决各种不同类型的微分方程组。
本文将介绍如何使用MATLAB 解微分方程组。
MATLAB可以利用拟牛顿发展算法,利用函数ode45来解决常微分方程组(Ordinary Differential Equations,简称ODEs)。
生成积分函数,与函数ode45耦合在一起,可以用ode45函数解ODE。
第一步,将微分方程组写成一阶形式,即:dy/dx=f(x,y),其中y为未知变量,x为变量,f(x,y) 为表达式。
第二步,使用MATLAB编程生成函数解微分方程组。
函数ode45是MATLAB中用于解ODE的函数,它使用拟牛顿发展算法,可以得到非线性ODE的数值解。
首先写出解ODE的函数,接受自变量x和因变量y 做参数,并返回相应的函数值;然后,可以调用函数ode45来解这些ODE,函数将接受积分端点、积分步长和积分函数作为参数,并返回结果。
最后,将结果可视化展示出来。
使用数据可视化函数,如plot,可以将结果以曲线的形式展示出来,方便对结果进行后续处理。
总结起来,通过使用MATLAB的ode45函数,配合编写的解ODE 函数,可以快捷高效地解决一般微分方程组问题。
通过可视化函数,还可以将解决出的结果展示出来,为数据分析提供便利。
matlab求微分方程组的解析解摘要:I.引言- 介绍微分方程组及其在科学和工程中的应用- 说明求解微分方程组的解析解的重要性II.MATLAB求解微分方程组的基本步骤- 准备微分方程组- 初始化参数- 选择适当的求解方法- 检查和分析解III.MATLAB求解微分方程组的常用函数- ode45: 使用RK方法求解常微分方程组- ode23: 使用二阶龙格-库塔方法求解常微分方程组- pdsolve: 求解偏微分方程组IV.求解微分方程组的示例- 常微分方程组示例- 偏微分方程组示例V.结论- 总结MATLAB求解微分方程组的方法和函数- 强调解析解的重要性及其在实际问题中的应用正文:微分方程组广泛应用于科学和工程领域,如物理、化学、生物学、经济学等。
求解微分方程组的解析解有助于我们深入理解这些领域的规律和特性。
MATLAB作为一种强大的数学计算工具,可以方便地求解微分方程组。
本文将介绍MATLAB求解微分方程组的解析解的基本方法和常用函数。
首先,我们简要回顾一下MATLAB求解微分方程组的基本步骤。
1) 准备微分方程组:根据实际问题建立微分方程组,确定其数学模型。
2) 初始化参数:设定求解区间、初始值和边界条件等参数。
3) 选择适当的求解方法:根据微分方程组的类型和参数特点选择合适的求解函数。
4) 检查和分析解:对求得的解进行检查,确保其合理性和准确性。
MATLAB提供了丰富的求解微分方程组的函数。
1) ode45:使用RK方法求解常微分方程组。
该函数具有较高的求解精度和稳定性,适用于大多数常微分方程组问题。
2) ode23:使用二阶龙格-库塔方法求解常微分方程组。
该函数在某些情况下具有较好的性能,尤其适用于具有对称性的微分方程组。
3) pdsolve:求解偏微分方程组。
该函数可以处理多变量、多区域和多时间的偏微分方程组问题。
为了更好地理解MATLAB求解微分方程组的方法和函数,我们来看两个示例。
第四讲Matlab求解微分方程(组)理论介绍:Matlab求解微分方程(组)命令求解实例:Matlab求解微分方程(组)实例实际应用问题通过数学建模所归纳得到得方程,绝大多数都就是微分方程,真正能得到代数方程得机会很少、另一方面,能够求解得微分方程也就是十分有限得,特别就是高阶方程与偏微分方程(组)、这就要求我们必须研究微分方程(组)得解法:解析解法与数值解法、一.相关函数、命令及简介1、在Matlab中,用大写字母D表示导数,Dy表示y关于自变量得一阶导数,D2y 表示y关于自变量得二阶导数,依此类推、函数dsolve用来解决常微分方程(组)得求解问题,调用格式为:X=dsolve(‘eqn1’,’eqn2’,…)函数dsolve用来解符号常微分方程、方程组,如果没有初始条件,则求出通解,如果有初始条件,则求出特解、注意,系统缺省得自变量为t2、函数dsolve求解得就是常微分方程得精确解法,也称为常微分方程得符号解、但就是,有大量得常微分方程虽然从理论上讲,其解就是存在得,但我们却无法求出其解析解,此时,我们需要寻求方程得数值解,在求常微分方程数值解方面,MATLAB具有丰富得函数,我们将其统称为solver,其一般格式为:[T,Y]=solver(odefun,tspan,y0)说明:(1)solver为命令ode45、ode23、ode113、ode15s、ode23s、ode23t、ode23tb、ode15i之一、(2)odefun就是显示微分方程在积分区间tspan上从到用初始条件求解、(3)如果要获得微分方程问题在其她指定时间点上得解,则令tspan(要求就是单调得)、(4)因为没有一种算法可以有效得解决所有得ODE问题,为此,Matlab提供了多种求解器solver,对于不同得ODE问题,采用不同得solver、表1 Matlab中文本文件读写函数说明:ode23、ode45就是极其常用得用来求解非刚性得标准形式得一阶微分方程(组)得初值问题得解得Matlab常用程序,其中:ode23采用龙格库塔2阶算法,用3阶公式作误差估计来调节步长,具有低等得精度、ode45则采用龙格库塔4阶算法,用5阶公式作误差估计来调节步长,具有中等得精度、3.在matlab命令窗口、程序或函数中创建局部函数时,可用内联函数inline,inline函数形式相当于编写M函数文件,但不需编写M文件就可以描述出某种数学关系、调用inline函数,只能由一个matlab表达式组成,并且只能返回一个变量,不允许[u,v]这种向量形式、因而,任何要求逻辑运算或乘法运算以求得最终结果得场合,都不能应用inline函数,inline函数得一般形式为:FunctionName=inline(‘函数内容’, ‘所有自变量列表’)例如:(求解F(x)=x^2*cos(a*x)b ,a,b就是标量;x就是向量)在命令窗口输入: Fofx=inline(‘x 、^2*cos(a*x)b’ , ‘x’,’a’,’b’);g= Fofx([pi/3 pi/3、5],4,1)系统输出为:g=1、5483 1、7259注意:由于使用内联对象函数inline不需要另外建立m文件,所有使用比较方便,另外在使用ode45函数得时候,定义函数往往需要编辑一个m文件来单独定义,这样不便于管理文件,这里可以使用inline来定义函数、二.实例介绍1、几个可以直接用Matlab求微分方程精确解得实例例1 求解微分方程程序:syms x y; y=dsolve(‘Dy+2*x*y=x*exp(x^2)’,’x’)例2 求微分方程在初始条件下得特解并画出解函数得图形、程序:syms x y; y=dsolve(‘x*Dy+yexp(1)=0’,’y(1)=2*exp(1)’,’x’);ezplot(y)例3 求解微分方程组在初始条件下得特解并画出解函数得图形、程序:syms x y t[x,y]=dsolve('Dx+5*x+y=exp(t)','Dyx3*y=0','x(0)=1','y(0)=0','t')simple(x);simple(y)ezplot(x,y,[0,1、3]);axis auto2、用ode23、ode45等求解非刚性标准形式得一阶微分方程(组)得初值问题得数值解(近似解)例4 求解微分方程初值问题得数值解,求解范围为区间[0,0、5]、程序:fun=inline('2*y+2*x^2+2*x','x','y');[x,y]=ode23(fun,[0,0、5],1);plot(x,y,'o')例5 求解微分方程得解,并画出解得图形、分析:这就是一个二阶非线性方程,我们可以通过变换,将二阶方程化为一阶方程组求解、令,则编写M文件vdp、mfunction fy=vdp(t,x)fy=[x(2);7*(1x(1)^2)*x(2)x(1)];end在Matlab命令窗口编写程序y0=[1;0][t,x]=ode45(vdp,[0,40],y0);或[t,x]=ode45('vdp',[0,40],y0);y=x(:,1);dy=x(:,2);plot(t,y,t,dy)练习与思考:M文件vdp、m改写成inline函数程序?3、用Euler折线法求解Euler折线法求解得基本思想就是将微分方程初值问题化成一个代数(差分)方程,主要步骤就是用差商替代微商,于就是记从而于就是例6用Euler折线法求解微分方程初值问题得数值解(步长取0、4),求解范围为区间[0,2]、分析:本问题得差分方程为程序:>> clear>> f=sym('y+2*x/y^2');>> a=0;>> b=2;>> h=0、4;>> n=(ba)/h+1;>> x=0;>> y=1;>> szj=[x,y];%数值解>> for i=1:n1y=y+h*subs(f,{'x','y'},{x,y});%subs,替换函数x=x+h;szj=[szj;x,y]; end >>szj>> plot(szj(:,1),szj(:,2))说明:替换函数subs 例如:输入subs(a+b,a,4) 意思就就是把a 用4替换掉,返回 4+b,也可以替换多个变量,例如:subs(cos(a)+sin(b),{a,b},[sym('alpha'),2])分别用字符alpha 替换a 与2替换b,返回 cos(alpha)+sin(2)特别说明:本问题可进一步利用四阶RungeKutta 法求解,Euler 折线法实际上就就是一阶RungeKutta 法,RungeKutta 法得迭代公式为001112341213243(),,(22),6(,),0,1,2,,1(,),22(,),22(,).k k k k k k k k k k k k y y x x x h h y y L L L L L f x y k n h h L f x y L h h L f x y L L f x h y hL ++=⎧⎪=+⎪⎪=++++⎪⎪=⎪=-⎨⎪=++⎪⎪⎪=++⎪⎪=++⎩L 相应得Matlab 程序为:>> clear >> f=sym('y+2*x/y^2'); >> a=0; >> b=2; >> h=0、4; >> n=(ba)/h+1; >> x=0; >> y=1;>> szj=[x,y];%数值解 >> for i=1:n1l1=subs(f, {'x','y'},{x,y});替换函数 l2=subs(f, {'x','y'},{x+h/2,y+l1*h/2}); l3=subs(f, {'x','y'},{x+h/2,y+l2*h/2});l4=subs(f, {'x','y'},{x+h,y+l3*h});y=y+h*(l1+2*l2+2*l3+l4)/6;x=x+h;szj=[szj;x,y];end>>szj>> plot(szj(:,1),szj(:,2))练习与思考:(1)ode45求解问题并比较差异、(2)利用Matlab求微分方程得解、(3)求解微分方程得特解、(4)利用Matlab求微分方程初值问题得解、提醒:尽可能多得考虑解法三.微分方程转换为一阶显式微分方程组Matlab微分方程解算器只能求解标准形式得一阶显式微分方程(组)问题,因此在使用ODE解算器之前,我们需要做得第一步,也就是最重要得一步就就是借助状态变量将微分方程(组)化成Matlab可接受得标准形式、当然,如果ODEs由一个或多个高阶微分方程给出,则我们应先将它变换成一阶显式常微分方程组、下面我们以两个高阶微分方程组构成得ODEs为例介绍如何将它变换成一个一阶显式微分方程组、Step 1 将微分方程得最高阶变量移到等式左边,其它移到右边,并按阶次从低到高排列、形式为:Step 2 为每一阶微分式选择状态变量,最高阶除外注意:ODEs中所有就是因变量得最高阶次之与就就是需要得状态变量得个数,最高阶得微分式不需要给它状态变量、Step 3 根据选用得状态变量,写出所有状态变量得一阶微分表达式练习与思考:(1)求解微分方程组其中(2)求解隐式微分方程组提示:使用符号计算函数solve求,然后利用求解微分方程得方法四.偏微分方程解法Matlab提供了两种方法解决PDE问题,一就是使用pdepe函数,它可以求解一般得PDEs,具有较大得通用性,但只支持命令形式调用;二就是使用PDE工具箱,可以求解特殊PDE问题,PDEtoll有较大得局限性,比如只能求解二阶PDE问题,并且不能解决片微分方程组,但就是它提供了GUI界面,从复杂得编程中解脱出来,同时还可以通过File—>Save As直接生成M代码、1、一般偏微分方程(组)得求解(1)Matlab提供得pdepe函数,可以直接求解一般偏微分方程(组),它得调用格式为:sol=pdepe(m,pdefun,pdeic,pdebc,x,t)pdefun就是PDE得问题描述函数,它必须换成标准形式:这样,PDE就可以编写入口函数:[c,f,s]=pdefun(x,t,u,du),m,x,t对应于式中相关参数,du就是u得一阶导数,由给定得输入变量可表示出c,f,s这三个函数、pdebc就是PDE得边界条件描述函数,它必须化为形式:于就是边值条件可以编写函数描述为:[pa,qa,pb,qb]=pdebc(x,t,u,du),其中a表示下边界,b表示上边界、pdeic就是PDE得初值条件,必须化为形式:,故可以使用函数描述为:u0=pdeic(x)sol就是一个三维数组,sol(:,:,i)表示得解,换句话说,对应x(i)与t(j)时得解为sol(i,j,k),通过sol,我们可以使用pdeval函数直接计算某个点得函数值、(2)实例说明求解偏微分其中,且满足初始条件及边界条件解:(1)对照给出得偏微分方程与pdepe函数求解得标准形式,原方程改写为可见%目标PDE函数function [c,f,s]=pdefun(x,t,u,du)c=[1;1];f=[0、024*du(1);0、17*du(2)];temp=u(1)u(2);s=[1;1]、*(exp(5、73*temp)exp(11、46*temp))end(2)边界条件改写为:下边界上边界%边界条件函数function [pa,qa,pb,qb]=pdebc(xa,ua,xb,ub,t)pa=[0;ua(2)];qa=[1;0];pb=[ub(1)1;0];qb=[0;1];end(3)初值条件改写为:%初值条件函数function u0=pdeic(x)u0=[1;0];end(4)编写主调函数clcx=0:0、05:1;t=0:0、05:2;m=0;sol=pdepe(m,pdefun,pdeic,pdebc,x,t);subplot(2,1,1) surf(x,t,sol(:,:,1))subplot(2,1,2) surf(x,t,sol(:,:,2))练习与思考: This example illustrates the straightforward formulation, putation, and plotting of the solution of a single PDE、This equation holds on an interval for times 、The PDE satisfies the initial condition and boundary conditions2、PDEtool求解偏微分方程(1)PDEtool(GUI)求解偏微分方程得一般步骤在Matlab命令窗口输入pdetool,回车,PDE工具箱得图形用户界面(GUI)系统就启动了、从定义一个偏微分方程问题到完成解偏微分方程得定解,整个过程大致可以分为六个阶段Step 1 “Draw模式”绘制平面有界区域,通过公式把Matlab系统提供得实体模型:矩形、圆、椭圆与多边形,组合起来,生成需要得平面区域、Step 2 “Boundary模式”定义边界,声明不同边界段得边界条件、Step 3 “PDE模式”定义偏微分方程,确定方程类型与方程系数c,a,f,d,根据具体情况,还可以在不同子区域声明不同系数、Step 4 “Mesh模式”网格化区域,可以控制自动生成网格得参数,对生成得网格进行多次细化,使网格分割更细更合理、Step 5 “Solve模式”解偏微分方程,对于椭圆型方程可以激活并控制非线性自适应解题器来处理非线性方程;对于抛物线型方程与双曲型方程,设置初始边界条件后可以求出给定时刻t得解;对于特征值问题,可以求出给定区间上得特征值、求解完成后,可以返回到Step 4,对网格进一步细化,进行再次求解、Step 6 “View模式”计算结果得可视化,可以通过设置系统提供得对话框,显示所求得解得表面图、网格图、等高线图与箭头梯形图、对于抛物线型与双曲线型问题得解还可以进行动画演示、(2)实例说明用法求解一个正方形区域上得特征值问题:正方形区域为:(1)使用PDE工具箱打开GUI求解方程(2)进入Draw模式,绘制一个矩形,然后双击矩形,在弹出得对话框中设置Left=1,Bottom=1,Width=2,Height=2,确认并关闭对话框(3)进入Boundary模式,边界条件采用Dirichlet条件得默认值(4)进入PDE模式,单击工具栏PDE按钮,在弹出得对话框中方程类型选择Eigenmodes,参数设置c=1,a=1/2,d=1,确认后关闭对话框(5)单击工具栏得按钮,对正方形区域进行初始网格剖分,然后再对网格进一步细化剖分一次(6)点开solve菜单,单击Parameters选项,在弹出得对话框中设置特征值区域为[20,20](7)单击Plot菜单得Parameters项,在弹出得对话框中选中Color、Height(3D plot)与show mesh项,然后单击Done确认(8)单击工具栏得“=”按钮,开始求解。