Matlab求解微分方程及偏微分方程

合集下载

偏微分方程Matlab数值解法(补充4)

偏微分方程Matlab数值解法(补充4)

偏微分方程Matlab 数值解法(补充4)Matlab 可以求解一般的偏微分方程,也可以利用偏微分方程工具箱中给出的函数求解一些偏微分方程。

1 偏微分方程组求解Matlab 语言提供了pdepe()函数,可以直接求解偏微分方程(,,,)[(,,,)](,,,)m mu u u u C x t u x x f x t u s x t u x t x x x-∂∂∂∂∂=+∂∂∂∂∂ (4.1)这样,偏微分方程可以编写为以下函数的描述,其入口为[,,](,,,)x c f s pdefun x t u u =其中:pdefun 为函数名。

由给定输入变量可计算出,,c f s 这三个函数。

边界条件可以用下面的函数描述(,,)(,,).*(,,,)0up x t u q x t u f x t u x∂+=∂ (4.2) 这样的边值函数可以写为Matlab 函数[,,,](,,,)a a b b x p q p q pdebc x t u u =初始条件数学描述为00(,)u x t u =,编写一个简单的函数即可0()u pdeic x =还可以选择x 和t 的向量,再加上描述这些函数,就可以用pdepe ()函数求解次偏微分方程,需要用如下格式求解(,@,@,@,,)sol pdepe m pdefun pdeic pdebc x t =【例1】 试求下列偏微分方程2111222221220.024()0.17()u u F u u t x u u F u u tx ⎧∂∂=--⎪⎪∂∂⎨∂∂⎪=+-⎪∂∂⎩ 其中: 5.7311.46()xx F x e e -=-,且满足初始条件1(,0)1u x =,2(,1)0u x =及边界条件1221(0,)0,(0,)0,(1,)1,(1,)0u u t u t u t t x x∂∂====∂∂解:对照给出的偏微分方程和(4.1),可将原方程改写为111222120.024/()1.*10.17/()u u x F u u u u x F u u t x ∂∂--⎡⎤⎡⎤⎡⎤⎡⎤∂∂=+⎢⎥⎢⎥⎢⎥⎢⎥∂∂-∂∂⎣⎦⎣⎦⎣⎦⎣⎦可知0m =,且1122120.024/()1,,10.17/()u x F u u c f s u x F u u ∂∂--⎡⎤⎡⎤⎡⎤===⎢⎥⎢⎥⎢⎥∂∂-⎣⎦⎣⎦⎣⎦编写下面的Matlab 函数function [c,f,s]=c7mpde(x,t,u,du)c=[1;1];y=u(1)-u(2);F=exp(5.73*y)-exp(-11.46*y);s=F*[-1;1]; f=[0.024*du(1);0.17*du(2)];套用(4.2)中的边界条件,可以写出如下的边值方程左边界2010.*00f u ⎡⎤⎡⎤⎡⎤+=⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦,右边界1100.*100u f -⎡⎤⎡⎤⎡⎤+=⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦ 编写下面的Matlab 函数function [pa,qa,pb,qb]=c7mpbc(xa,ua,xb,ub,t) pa=[0;ua(2)];qa=[1;0];pb=[ub(1)-1;0];qb=[0,1]; 另外,描述初值的函数function u0=c7mpic(x) u0=[1;0];有了这三个函数,选定x 和t 向量,则可以由下面的程序直接求此微分方程,得出解1u 和2u 。

matlab 微分方程表达式

matlab 微分方程表达式

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求解微分方程及微分方程组

用MATLAB求解微分方程及微分方程组
解 输入命令: y=dsolve('D2y+4*Dy+29*y=0','y(0)=0,Dy(0)=15','x') 运行结果为 : y =3e-2xsin(5x)
例 3 求微分方程组的通解. dx dt 2 x 3 y 3 z dy 4 x 5 y 3z dt dz 4 x 4 y 2 z dt
任取k1、k2的一组初始值:k0=[2,1];
输入命令: k=lsqcurvefit('curvefun1',k0,t,c) 运行结果为: k =[ 1.3240 作图表示求解结果: t1=0:0.1:18; f=curvefun1(k,t1); plot(t,c,'ko',t1,f,'r-')
90 80 70 60 50 40 30 20 10 0
0.2573]
0
2
46Leabharlann 81012
14
16
18
模型2:慢速饮酒时,体液中酒精含量的变化率
dx k2 x a dt x(0) 0
其中
M a T
M为饮酒的总量,T为饮酒的时间
则有;
a x (1 e k 2 t ) k2
5 5 ) 处时被导弹击中. 当 x 1时 y ,即当乙舰航行到点 (1, 24 24 y 5 被击中时间为: t . 若 v0=1, 则在 t=0.21 处被击中. v0 24v0
轨迹图如下
例: 饮酒模型
模型1:快速饮酒后,胃中酒精含量的变化率
dy k1 y dt y (0) M
5 5 ) 处时被导弹击中. 当 x 1时 y ,即当乙舰航行到点 (1, 24 24 y 5 被击中时间为 : t . 若 v0=1, 则在 t=0.21 处被击中. v0 24v0

matlab偏微分方程

matlab偏微分方程

matlab偏微分方程Matlab可以用于求解偏微分方程(PDE)。

以下是一些示例:1. 热传导方程热传导方程描述了温度随时间和空间的变化,由以下方程给出:$\frac{\partial T}{\partial t} = \alpha \frac{\partial^2 T}{\partialx^2}$在Matlab中,可以使用“pdepe”函数来求解这个问题。

具体来说,需要指定初始条件和边界条件,并设置物理参数。

2. 波动方程波动方程描述了波的传播,由以下方程给出:$\frac{\partial^2 u}{\partial t^2} = c^2 \frac{\partial^2 u}{\partialx^2}$在Matlab中,可以使用“pdepe”函数来求解这个问题。

需要指定初始条件和边界条件,并设置物理参数。

3. Navier-Stokes方程Navier-Stokes方程描述了流体的运动,由以下方程给出:$\frac{\partial u}{\partial t} + u \cdot \nabla u = -\frac{1}{\rho}\nabla p + \nu \nabla^2 u$在Matlab中,可以使用PDE工具箱进行求解。

需要指定初始条件、边界条件和物理参数。

4. Schrödinger方程Schrödinger方程描述了量子力学中的波函数演化,由以下方程给出:$i \hbar \frac{\partial \psi}{\partial t} = -\frac{\hbar^2}{2m}\nabla^2 \psi + V(x) \psi$在Matlab中,可以使用PDE工具箱或ODE工具箱进行求解。

需要指定初始条件、边界条件和物理参数。

以上仅是部分示例,Matlab还可以用于求解其他类型的偏微分方程。

《偏微分方程概述及运用matlab求解偏微分方程常见问题》

《偏微分方程概述及运用matlab求解偏微分方程常见问题》

北京航空航天大学偏微分方程概述及运用matlab求解微分方程求解常见问题姓名徐敏学号********班级380911班2011年6月偏微分方程概述及运用matlab求解偏微分方程常见问题徐敏摘要偏微分方程简介,matlab偏微分方程工具箱应用简介,用这个工具箱解方程的过程是:确定待解的偏微分方程;确定边界条件;确定方程所在域的几何形状;划分有限元;解方程关键词MATLAB 偏微分方程程序如果一个微分方程中出现的未知函数只含有一个自变量,这个方程叫做常微分方程,也简称微分方程:如果一个微分方程中出现多元函数的偏导数,或者说如果未知函数和几个变量有关,而且方程中出现未知函数对几个变量的导数,那么这种微分方程就是偏微分方程。

一,偏微分方程概述偏微分方程是反映有关的未知变量关于时间的导数和关于空间变量的导数之间制约关系的等式。

许多领域中的数学模型都可以用偏微分方程来描述,很多重要的物理、力学等学科的基本方程本身就是偏微分方程。

早在微积分理论刚形成后不久,人们就开始用偏微分方程来描述、解释或预见各种自然现象,并将所得到的研究方法和研究成果运用于各门科学和工程技术中,不断地取得了显著的成效,显示了偏微分方程对于人类认识自然界基本规律的重要性。

逐渐地,以物理、力学等各门科学中的实际问题为背景的偏微分方程的研究成为传统应用数学中的一个最主要的内容,它直接联系着众多自然现象和实际问题,不断地提出和产生出需要解决的新课题和新方法,不断地促进着许多相关数学分支(如泛函分析、微分几何、计算数学等)的发展,并从它们之中引进许多有力的解决问题的工具。

偏微分方程已经成为当代数学中的一个重要的组成部分,是纯粹数学的许多分支和自然科学及工程技术等领域之间的一座重要的桥梁。

在国外,对偏微分方程的应用发展是相当重视的。

很多大学和研究单位都有应用偏微分方程的研究集体,并得到国家工业、科学部门及军方、航空航天等方面的大力资助。

比如在国际上有重大影响的美国的Courant研究所、法国的信息与自动化国立研究所等都集中了相当多的偏微分方程的研究人员,并把数学模型、数学方法、应用软件及实际应用融为一体,在解决实际课题、推动学科发展及加速培养人才等方面都起了很大的作用。

matlab在微分方程求解中的应用

matlab在微分方程求解中的应用

matlab在微分方程求解中的应用Matlab在微分方程求解中的应用概述:微分方程是数学中重要的研究对象之一,广泛应用于物理、工程、经济等领域。

而Matlab作为一种强大的数学计算工具,可以有效地解决微分方程的求解问题。

本文将介绍Matlab在微分方程求解中的应用,并探讨其优势和局限性。

1. Matlab的微分方程求解函数:Matlab提供了丰富的函数来求解各种类型的微分方程,包括常微分方程、偏微分方程以及随机微分方程等。

其中最常用的函数是ode45、ode23和ode15s,它们分别采用不同的数值方法来求解微分方程。

这些函数可以根据初值问题或边界值问题进行求解,同时还可以指定求解的精度和求解区间。

2. 求解常微分方程:对于常微分方程,Matlab提供了一系列的函数来求解,如ode45、ode23等。

以ode45函数为例,它是采用4阶龙格-库塔法(Runge-Kutta方法)来求解常微分方程。

用户只需提供微分方程的描述函数和初值,即可得到方程的数值解。

这种方法在求解非刚性问题时效果较好,但对于刚性问题可能出现数值不稳定的情况。

3. 求解偏微分方程:Matlab还提供了一些函数来求解偏微分方程,如pdepe、pde45等。

以pdepe函数为例,它可以求解一维和二维的偏微分方程。

用户需要提供方程的描述函数、边界条件和初始条件,以及求解区域的网格划分。

通过调用该函数,可以得到方程在整个求解区域上的数值解。

4. 优势和局限性:Matlab在微分方程求解中具有以下优势:(1)简单易用:Matlab提供了丰富的函数和工具箱,使得求解微分方程变得简单易用。

(2)高效快速:Matlab采用了各种高效的数值方法来求解微分方程,可以在较短的时间内得到结果。

(3)灵活多样:Matlab提供了多种求解方法和参数设置,可以根据具体问题进行选择和调整。

然而,Matlab在微分方程求解中也存在一些局限性:(1)数值误差:由于采用数值方法求解微分方程,Matlab的求解结果可能会受到数值误差的影响。

偏微分方程的matlab解法

偏微分方程的matlab解法

图 22.2 定解问题的边界
第四步:设置方程类型
选择PDE菜单中PDE Mode命令,进入PDE模式, 再单击PDE菜单中PDE Secification选项,打开 PDE Secification对话框,设置方程类型. 本例取抛物型方程 d
u (cu ) au f , t
故参数c,a,f,d,分别是l,0,10,1. 第五步:选择Mesh菜单中Initialize Mesh命令, 进行网格剖分, 选择Mesh菜单中Refine Mesh命令,使网格密集化,
例如,对于细杆导热,虽然是一维问题, 可以将宽度y虚拟出来,对应于y的边界 条件和初始条件按照题意制定
Boundary Mode

PDE Mode
PDE Specification,确定偏 微分方程类型共有四种:
椭圆形Elliptic

抛物型Parabolic

双曲型Hyperbolic

如图22.3.
图 22.3 网格密集化
第六步: 解偏微分方程并显示图形解 选择Solve菜单中Solve PDE命令,解 偏微分方程并显示图形解,如图 2.4 所示
第七步:单击Plot菜单中Parameter选项,打开Plot Selection对话框,选中Color,Height(3D plot)和 Show mesh三项.再单击Polt按钮,显示三维图形解, 如图22.5所示.
例: 解热传导方程 ut u f 边界条件是齐次类型,定解区域自定。
【解】 第一步:启动MATLAB,键入命令pdetool并回车, 就进入GUI.在Options菜单下选择Gid命令,打开栅 格,栅格使用户容易确定所绘图形的大小. 第二步:选定定解区域本题为自定区域:自拟定解区 域如图22 1所示:E1-E2+R1-E3.具体用快捷工具分 别画椭圆E1、圆E2、矩形R1、圆E3.然后在Set formula栏中进行编辑并用算术运算符将图形对象名 称连接起来(或删去默认的表达式,直接键入E1E2+R1-E3)

MATLAB中的偏微分方程数值解法

MATLAB中的偏微分方程数值解法

MATLAB中的偏微分方程数值解法偏微分方程(Partial Differential Equations,PDEs)是数学中的重要概念,广泛应用于物理学、工程学、经济学等领域。

解决偏微分方程的精确解往往非常困难,因此数值方法成为求解这类问题的有效途径。

而在MATLAB中,有丰富的数值解法可供选择。

本文将介绍MATLAB中几种常见的偏微分方程数值解法,并通过具体案例加深对其应用的理解。

一、有限差分法(Finite Difference Method)有限差分法是最为经典和常用的偏微分方程数值解法之一。

它将偏微分方程的导数转化为差分方程,通过离散化空间和时间上的变量,将连续问题转化为离散问题。

在MATLAB中,使用有限差分法可以比较容易地实现对偏微分方程的数值求解。

例如,考虑一维热传导方程(Heat Equation):∂u/∂t = k * ∂²u/∂x²其中,u为温度分布随时间和空间的变化,k为热传导系数。

假设初始条件为一段长度为L的棒子上的温度分布,边界条件可以是固定温度、热交换等。

有限差分法可以将空间离散化为N个节点,时间离散化为M个时刻。

我们可以使用中心差分近似来计算二阶空间导数,从而得到以下差分方程:u(i,j+1) = u(i,j) + Δt * (k * (u(i+1,j) - 2 * u(i,j) + u(i-1,j))/Δx²)其中,i表示空间节点,j表示时间步。

Δt和Δx分别为时间和空间步长。

通过逐步迭代更新节点的温度值,我们可以得到整个时间范围内的温度分布。

而MATLAB提供的矩阵计算功能,可以大大简化有限差分法的实现过程。

二、有限元法(Finite Element Method)有限元法是另一种常用的偏微分方程数值解法,特点是适用于复杂的几何形状和边界条件。

它将求解区域离散化为多个小单元,通过构建并求解代数方程组来逼近连续问题。

在MATLAB中,我们可以使用Partial Differential Equation Toolbox提供的函数进行有限元法求解。

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

第四讲Matlab求解微分方程(组)理论介绍:Matlab求解微分方程(组)命令求解实例:Matlab求解微分方程(组)实例实际应用问题通过数学建模所归纳得到的方程,绝大多数都是微分方程,真正能得到代数方程的机会很少.另一方面,能够求解的微分方程也是十分有限的, 特别是高阶方程和偏微分方程(组).这就要求我们必须研究微分方程(组)的解法:解析解法和数值解法.一.相关函数、命令及简介1.在Matlab中,用大写字母D表示导数,Dy表示y关于自变量的一阶导数, D2y表示y关于自变量的二阶导数,依此类推.函数dsolve用来解决常微分方程(组)的求解问题,调用格式为:X=dsolve(<eqnl,,,eqn2函数dsolve用来解符号常微分方程、方程组,如果没有初始条件,则求出通解,如果有初始条件,则求出特解.注意,系统缺省的自变量为t2.函数dsolve求解的是常微分方程的精确解法,也称为常微分方程的符号解. 但是,有大量的常微分方程虽然从理论上讲,其解是存在的,但我们却无法求出其解析解,此时,我们需要寻求方程的数值解,在求常微分方程数值解方面,MATLAB具有丰富的函数,我们将其统称为solver,其一般格式为:[T,Y]=solver(odefun,tspan,yO)说明:(1 )solver 为命令ode45、ode23、odel 13、odel5s、ode23s、ode23t、ode23tb、odel5i 之一.(2)odefun是显示微分方程),=f (t,y)在积分区间tspan =[心心]上从心到“用初始条件儿求解.(3)如果要获得微分方程问题在其他指定时间点bG©…心上的解,则令(span = 『“,•••『/■](要单调的).(4)因为没有一种算法可以有效的解决所有的ODE问题,为此,Matlab提供T多种求解器solver,对于不同的ODE问题,采用不同的solver.程(组)的初值问题的解的Matlab常用程序,其中:ode23采用龙格-库塔2阶算法,用3阶公式作误差估计来调节步长,具有低等的精度.。

血45则采用龙格-库塔4阶算法,用5阶公式作误差估计来调节步长,具有中等的精度.3.在matlab命令窗口、程序或函数中创建局部函数时,可用联函数inline, inline函数形式相当于编写M函数文件,但不需编写文件就可以描述出某种数学关系.调用inline函数,只能由一个matlab表达式组成,并且只能返回一个变量,不允许[u,v]这种向量形式.因而,任何要求逻辑运算或乘法运算以求得最终结果的场合,都不能应用inline函数,inline函数的一般形式为:FunctionName=inline(*函数容','所有自变量列表')例如:(求解F(x)=x A2*cos(a*x)-b ,a,b是标量;x是向量)在命令窗口输入:Fofk=inline(6x ・A2*cos(a*x)-b>,仪‘七丁!/);g= Fofx([pi/3 pi/3・5],4J)系统输出为:g=-1.5483-1.7259注意:山于使用联对象函数inline不需要另外建立m文件,所有使用比较方便,另外在使用ode45函数的时候,定义函数往往需要编辑一个m文件来单独定义,这样不便于管理文件,这里可以使用inline来定义函数.实例介绍1.儿个可以直接用Matlab求微分方程精确解的实例例1求解微分方程y + 2卩,=程序:syms x y; y=dsolve(t Dy+2*x*y=x*exp(-x A2)\,x,)例2求微分方程厂0在初始条件y(\) = 2e下的特解并画出解函数的图形.程序:syms x y; y=dsolve('x*Dy+y・exp(l)=0','y(l)=2*exp(l)','x');ezpk>t(y)dx ,—+ 5x + y = e例3求解微分方程组山 ~ 在初始条件H『l,ylj=O下的特解^-x-3y = 0[dt并画出解函数的图形.程序:syms x y t[x,y]=dsolve(,Dx+5*x+y=exp(t),/Dy-x-3*y=0\'x(0)=lVy(0)=0Vt)simple(x);simple(y)ezplot(x,y,[0,1.3]);axis auto2.用ode23. ode45等求解非刚性标准形式的一阶微分方程(组)的初值问题的数值解(近似解)(小,丿=v -I- ? V2 4- ? V例4求解微分方程初值问题页一 > 的数值解,求解围为区间y(0) = 1[0,0.5].程序:fun=inline('-2*y+2*x A2+2*x','x',,y,);[x,y]=ode23(fun,[0,0.5], 1); plot(x,y/o J)例5求解微分方程[律一"(I")牛+y=0 y(0) = ] ,y(0)=0的解,并画出dr dt解的图形.分析:这是一个二阶非线性方程,我们可以通过变换,将二阶方程化为一阶方程组求解•令x1=y,x2 =—,// = 7,则dt字=禺,X, (0) = 1dt ・dx—= 7(1-X; )x7一X], AS(0) = 0 dt编写M■文件vdp.mfunction fy=vdp(t,x)fy=[x(2);7*( 1 -x(l)A2)*x ⑵-x( 1)];end在Matlab命令窗「I编写程序yo=[ 1 ;oj[t,x]=ode45(vdp,[0,40],y0);或[t,x]=ode45('vdp;[0,40],y0);y=x(:,l);dy=x(:,2);plot(t,y,t,dy)练习与思考:M-文件vdp.m改写成inline函数程序?3.用Euler折线法求解Euler折线法求解的基本思想是将微分方程初值问题dy —、< ax.y(^o)= >o化成一个代数(差分)方程,主要步骤是用差商+ ")—)'(')替代微商空,于是h dx= yM记札I = X k+ h, y k = y(x k),从而y k+} = y(x k + /?),于是儿=〉'(观),< x k+l = x k + h, k = 0,1,2,...,〃一1.儿+严儿+妙幺,儿)・例6用Euler折线法求解微分方程初值问题dy 2x— = y+—< dx yy(0) = 1的数值解(步长力取0.4),求解围为区间[0,2].分析:本问题的差分方程为X Q = 0, y°= 1、h = 0.4< x k^\ = x k + 九* = 0,1,2,・・・,“一1.儿+严儿+妙’(兀,儿)•程序:» clear» f=sym(,y+2*x/y A2,);» a=0;» b=2;» h=0.4;» n=(b-a)/h+l;» x=0;» y=i;» szj=[x,y];%数值解» for i=l:n-ly二y+h*subs(f,{'x','y'},{x,y});%subs,替换函数x=x+h;szj二[szj;x,y];end»szj» plot(szj(:J),szj(:,2))说明:替换函数subs例如:输入siibs(“+b,a,4)意思就是把d用4替换掉,厶厶=f(x k+2” +?厶),k = 0 丄2,…,”一1返回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法的迭代公式为儿=)仇),和=耳+九儿+i =以+匸(厶+ 2厶j + 2厶+厶4 ),O厶=/(x t+— 07 4■—厶)'L4=f(x k+h,y k+hL i).相应的Matlab程序为:» clear» f=sym(,y+2*x/y A2,);» a=0;» b=2;» h=0.4;» n=(b-a)/h+l;» x=0;» y=l;» szj=[x,y];% 数值解» for 上l:n-lll=subs(f,「x;y},{x,y});替换函数12=subs(f, {'x'/y'),{x+h/2,y+l 1 *h/2});13=subs(f, {'x'/y'),{x+h/2,y+12*h/2});14=subs(f, {'xTy'} 9{x+h、y+13*h});y=y+h*(ll +2*12+2*13+14)/6;x=x+h;szj二[szj;x,y];end»szj» plot(szj(:,l),szj(:,2))练习与思考:(1)。

血45求解问题并比较差异.(2)利用Matlab求微分方程y⑷-2/3) + /=0的解.(3)求解微分方程一2(1 - y2)y +y = 0,0<x<30, y(0) = 1 J(0) = 0 的特解.(4)利用Matlab求微分方程初值问题(1 + x2)/ = 2xy\y l“= 1, y I“= 3的解.提醒:尽可能多的考虑解法三.微分方程转换为一阶显式微分方程组Matlab微分方程解算器只能求解标准形式的一阶显式微分方程(组)问题,因此在使用ODE 解算器之前,我们需要做的笫一步,也是最重要的一步就是借助状态变量将微分方程(组)化成Matlab可接受的标准形式.当然,如果ODEs 山一个或多个高阶微分方程给出,则我们应先将它变换成一阶显式常微分方程组. 下面我们以两个高阶微分方程组构成的ODEs为例介绍如何将它变换成一个一阶显式微分方程组.Stepl将微分方程的最高阶变量移到等式左边,其它移到右边,并按阶次从低到高排列•形式为:< x iw>=/(r,x,x,Step 2为每一阶微分式选择状态变量,最高阶除外注意:ODEs中所有是因变量的最高阶次之和就是需要的状态变量的个数, 最高阶的微分式不需要给它状态变量.Step 3根据选用的状态变量,写出所有状态变量的一阶微分表达式片=X,X2=召,兀3 兀“ =/(人召2• ■兀1+1 —•'加十2,• • •,兀T — g (人X],兀2 9 尤3,• • • 9 )练习与思考:(1)求解微分方程组■ ■x = 2y +x- “心+ “)^7- 一“(兀-”)~^其中r2= Ja_”)2 + y2,斤=J(x + 〃)2 + y2, K = 1 一“, // = 1/82.45, x(0) = 1.2, y(0) = 0, x(0) = 0, y(0) =-1.049355751(2)求解隐式微分方程组x +2yx = 2y<■■9 •・x y +3x y + xy _ y = 5提示:使用符号计算函数solve求V,y\然后利用求解微分方程的方法四.偏微分方程解法Matlab提供了两种方法解决PDE问题,一是使用pdepe函数,它可以求解一般的PDEs,具有较大的通用性,但只支持命令形式调用;二是使用PDE工具箱,可以求解特殊PDE问题,PDEtoll 有较大的局限性,比如只能求解二阶PDE 问题,并且不能解决片微分方程组,但是它提供了GUI 界面,从复杂的编程中解脱出来,同时还可以通过File一>Save As直接生成M代码.1.一般偏微分方程(组)的求解(l)Matlab提供的pdepe函数,可以直接求解一般偏微分方程(组),它的调用格式为:sol=pdepe(m,pdefun,pdeic,pdebc,x,t)pdefun是PDE的问题描述函数,它必须换成标准形式:/ , du x du d . , dir. . , dirc(xj,—) — = x— |.v f(x,t,w, —)] + s(x,t,u,—)ox ot ox ox ox这样,PDE就可以编写入口函数:[c,f,s]=pdefun(x,t,u,du), m,x,t对应于式中相关参数,du是u的一阶导数,山给定的输入变量可表示出c,f,s这三个函数.pdebc是PDE的边界条件描述函数,它必须化为形式:6以p(xj.u) = q(x,t y u)*f(x,t,u,—)=0ox于是边值条件可以编写函数描述为:[pa,qa,pb,qb]二pdebc(x,t,u,du),其中a表示下边界,b表示上边界.pdeic是PDE的初值条件,必须化为形式:H(X J0)=//0,故可以使用函数描述为:uO 二pdeic(x) sol 是一个三维数解为solgk),通过sol,我们可以使用pdeval 函数直接计算某个点的函数值. (2)实例说明 du x—-=0.024 ——7-其中, FM =云皿一孑w 且 a■^■(°丿)=a "/o’/)=Oj/j (i,z )= h —^-(1,/)=o ox ox解:(1)对照给出的偏ox 0.024 药dx 0.17 些dx .F(“] _如可见加=0,c = 0.024 色dx 0.17 些dx ._尸(论_«2)F(“] 一下边界 + " .*/ =u 1 0上边界 旳一1% □标PDE 函数function [c,f,s]=pdefun(x,t,u Ju) C=[l;l];f=[0.024*du(l);0.17*du(2)]; temp=u(l)-u(2);s=[-l;l].*(exp(5.73*temp)-exp(-l 1.46*temp)) end(2) 边界条件改写为:%边界条件函数1function [pa,qa,pb5qb]=pdebc(xa,ua,xb,ub,t)pa=[0;ua ⑵];qa=[l;0];pb=[ub(l)-l;O];qb=[O;l];end(3)初值条件改写为:%初值条件函数function uO=pdeic(x)u0=[l;0];end(4)编写主调函数clc x=0:0.05:l;t =0:0.05:2;m=0;sol=pdepe(m,pdefun,pdeic,pdebc,x,t);subplot(2J J) surf(x,t,sol(:,:J))subplot(2,l ,2) surf(x,t,sol(:,:,2))练习与思考:This example illustrates the straightforward formulation, computation, and plotting of the solution of a single PDE・,du d dii矿—=一(一)dt dx dxThis equation holds on an interval 0<x< 1 for times f 20. The PDE satisfies the initial condition u(x.0) = sin TTX and boundary conditions"(0./) = 0;/rk+——(lj) = 0dx2.PDEtool求解偏微分方程(1)PDEtool (GUI)求解偏微分方程的一般步骤在Matlab命令窗口输入pdetool,回车,PDE工具箱的图形用户界面(GUI) 系统就启动了•从定义一个偏微分方程问题到完成解偏微分方程的定解,整个过程大致可以分为六个阶段Step 1 “Draw模式”绘制平面有界区域C ,通过公式把Matlab系统提供的实体模型:矩形、圆、椭圆和多边形,组合起来,生成需要的平面区域.Step 2 "Boundary模式”定义边界,声明不同边界段的边界条件.Step 3 “PDE模式”定义偏微分方程,确定方程类型和方程系数c,a,f,d,根据具体情况,还可以在不同子区域声明不同系数.Step 4 "Mesh模式”网格化区域G,可以控制自动生成网格的参数,对生成的网格进行多次细化,使网格分割更细更合理.Step 5 “Solve模式”解偏微分方程,对于椭圆型方程可以激活并控制非线性自适应解题器来处理非线性方程;对于抛物线型方程和双曲型方程,设置初始边界条件后可以求出给定时刻t的解;对于特征值问题,可以求出给定区间上的特征值.求解完成后,可以返回到Step 4,对网格进一步细化,进行再次求解.Step 6 “View模式”计算结果的可视化,可以通过设置系统提供的对话框, 显示所求的解的表面图、网格图、等高线图和箭头梯形图.对于抛物线型和双曲线型问题的解还可以进行动画演示.(2)实例说明用法求解一个正方形区域上的特征值问题:一△“ u =加< 2正方形区域为:—1K1,—1K1.(1)使用PDE工具箱打开GUI求解方程(2)进入Draw模式,绘制一个矩形,然后双击矩形,在弹出的对话框中设置Left=-1 ,Bottom=-l, Width=2,Height=2,确认并关闭对话框(3)进入Boundary模式,边界条件采用Dirichlet条件的默认值(4)进入PDE模式,单击工具栏PDE按钮,在弹出的对话框中方程类型选择Eigenmodes,参数设置c= 1 ,a=-l/2,d= 1,确认后关闭对话框(5)单击工具栏的△按钮,对正方形区域进行初始网格剖分,然后再对网格进一步细化剖分一次(6)点开solve菜单,单击Parameters选项,在弹出的对话框中设置特征值区域为卜20,20](7)单击Plot菜单的Parameters项,在弹出的对话框中选中Color、Height(3-D plot)和show mesh项,然后单击Done确认(8)单击工具栏的“二”按钮,开始求解。

相关文档
最新文档