您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 会议纪要 > MATLAB偏微分方程求解课件
题目:用MATLAB求解偏微分方程•主讲人:•班级:•时间:基础知识预习•微分方程的MATLAB求解包含•1:常微分方程的MATLAB求解(上节课已经讲过)这里不再赘述。•2:偏微分方程的MATLAB求解(本次教学内容)偏微分方程概念•偏微分方程(PartialDifferentialEquation,简称PDE)指含有未知函数及其偏导数的方程。描述自变量、未知函数及其偏导数之间的关系。•偏微分方程分为①线性偏微分方程式与②非线性偏微分方程式,常常有几个解而且涉及额外的边界条件。常微分方程:在微分方程中,若自变量的个数只有一个的微分方程。偏微分方程:自变量的个数有两个或两个以上的微分方程。求解偏微分方程的方法•求解偏微分方程的数值方法:•1.有限元法(FiniteElementMethod,FEM)---hp-FEM•2.有限体积法(FiniteVolumeMethod,FVM)•3.有限差分法(FiniteDifferenceMethod,FDM)。•其它:广义有限元法(GeneralizedFiniteElementMethod,FFEM)、扩展有限元法(eXtendedFiniteElementMethod,XFEM)、无网格有限元法(MeshfreeFiniteElementMethod)、离散迦辽金有限元法(DiscontinuousGalerkinFiniteElementMethod,DGFEM)等。MATLAB解偏微分方程•MATLAB提供了两种方法解决PDE问题:①pdepe()函数,它可以求解一般的PDEs,具有较大的通用性,但只支持命令行形式调用。•②PDE工具箱,可以求解特殊PDE问题,PDEtool有较大的局限性,比如只能求解二阶PDE问题,并且不能解决偏微分方程组,但是它提供了GUI界面,从繁杂的编程中解脱出来了,同时还可以通过File-SaveAs直接生成M代码•使用pdeval()直接计算某个点的函数值???一般偏微分方程组(PDEs)的MATLAB求解•直接求解一般偏微分方程(组),它的调用格式为sol=pdepe(m,@pdefun,@pdeic,@pdebc,x,t)(1))u,t,s(x,)],,,([)u,,(cxuxuutxfxxxtuxutxmm,问题描述函数初值条件边界条件输出参数自变量参数【输入参数】(1)•@pdefun:是PDE的问题描述函数,它必须换成下面的标准形式•PDE就可以编写下面的入口函数•[c,f,s]=pdefun(x,t,u,du)•m,x,t就是对应于(式1)中相关参数和自变量,du是u的一阶导数,由给定的输入变量即可表示出出c,f,s这三个函数(1))u,t,s(x,)],,,([)u,,(cxuxuutxfxxxtuxutxmm,【输入参数】(2)•@pdeic:是PDE的初值条件,必须化为下面的形式•我们使用下面的简单的函数来描述为u0=pdeic(x)00),(uutx【输入参数】(3)•@pdebc:是PDE的边界条件描述函数,必须先化为下面的形式•于是边值条件可以编写下面函数描述为[pa,qa,pb,qb]=pdebc(x,t,u,du)其中a表示下边界,b表示下边界0)xuu,t,(x,f*u).t,q(x,u)t,p(x,【输入参数】(4)•m:就是对应于(式1)中相关参数•x,t:就是对应于(式1)中自变量(1))u,t,s(x,)],,,([)u,,(cxuxuutxfxxxtuxutxmm,【输出参数】•sol:是一个三维数组,sol(:,:,i)表示ui的解,换句话说uk对应x(i)和t(j)时的解为sol(i,j,k)实例讲解(题目)•例:初值条件边界条件实例讲解(解法)•【解】第一步根据(1)对照给出的偏微分方程,则原方程可以改写为输入参数(1’)目标PDE函数•%%目标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));输入参数(2’)初值条件•初值条件改写为•%%初值条件函数•functionu0=pdeic(x)•u0=[1;0];输入参数(3’)边界条件•边界条件改写为•%%边界条件函数•function[pa,qa,pb,qb]=pdebc(xa,ua,xb,ub,t)•%a表示左边界,b表示右边界•pa=[0;ua(2)];qa=[1;0];•pb=[ub(1)-1;0];qb=[0;1];(4')主调函数•clc•x=0:0.05:1;•t=0:0.05:2;•m=0;•sol=pdepe(m,@pdefun,@pdeic,@pdebc,x,t);•figure('numbertitle','off','name','PDEDemo——byMatlabsky')%创建个窗口,窗口名字是name后边的名字'NumberTitle','off'是关掉默认显示名字。•subplot(211)•surf(x,t,sol(:,:,1))%sol(:,:,i)表示ui的解•title('TheSolutionofu_1')•xlabel('X')•ylabel('T')•zlabel('U')•subplot(212)•surf(x,t,sol(:,:,2))%sol(:,:,i)表示ui的解•title('TheSolutionofu_2')•xlabel('X')•ylabel('T')•zlabel('U')PDEtool求解特殊PDE问题•MATLAB的偏微分工具箱(PDEtoolbox)可以比较规范的求解各种常见的二阶偏微分方程(特殊二阶的PDE)典型偏微分方程的描述•••(3)双曲线型偏微分方程的一般形式••(4)特征值型偏微分方程的一般形式,注意它是(1)的变形,不能算独立的一类MATLAB采用有限元的方法求解各种PDE•MATLAB为我们提供一个pdetool(在commandwindow中键输pdetool打开)的交互界面,可以求解二元偏微分u(x1,x2)(注意只能求解二元)。方程的参数由a、c、d和f确定,求解域由图形确定,求解域确定好后,需要对求解域进行栅格化(这个是自动)。••偏微分方程边界条件的描述•Dirichlet(狄利克莱)条件•Neumann(纽曼)条件••求解实例••【解】由给定的PDE,可以得出d=1,c=1,a=2,f=10step1:点击工具栏的【PDE】按钮,如下输入PDE的参数,注意选择Hyperbolic•step2:绘制求解域对坐标轴的操作可以在【Options】主菜单中操作,包括设置网格、坐标系范围等•(1)【Options】-AxisLimits设置如下••(2)点击工具栏上的第三个按钮【绘制椭圆】,任意绘制一个椭圆,双击椭圆,设置如下重复上面的操作,参数如下•得到••(3)在setformula中如下输入,“+”表示求并集,“-”表示求差集,注意没有直接求交接的操作符step3:边界条件和初值条件•初值条件可以通过【Solve】-【Parameters…】设置•边值条件设置如下•(1)点击工具栏的第6个按钮【区域边界】,显示如下•(2)【Boundary】-【RemoveAllSubdomainBorders】移除所有子域的边界,将得到所有子域合并成一个求解域•(3)【Boundary】-【SecifyBoundaryConditons…】设置边界如下,注意我们这里只有Dirichlet条件step4:生成使用有限元方法求解方程所需的栅格•点击工具栏的第8/9个按钮,对求解域生成栅格,多次点击可以在原来基础上继续细化栅格,直到自己觉得满意•为止,当然可以通过【Mesh】主菜单进行精确控制•step5:求解方程点解工具栏的第10个按钮“=”【求解方程】step6:求解结果绘图点击第11个按钮【绘制图形】,里面的选项很丰富,可以绘制等高线等好多,甚至播放动画,具体大家可以自己慢慢摸索动画播放设置:•(1)【Solve】-【Parameters】设置合适的时间向量Time•(2)【Plot】-【Parameters】选中【Animation】,点击后面的【Options】,设置播放速度和次数,比如6fps表示•每秒6帧•(3)【Plot】-【ExportMovie…】输入动画保存的变量名,比如M•(4)在CommandWindows中直接输入movie(M)即可播放•(5)使用movie2ve(M,’demo.avi’)命令可以将动画保存为avi文件播放完毕•谢谢大家!
本文标题:MATLAB偏微分方程求解课件
链接地址:https://www.777doc.com/doc-1413627 .html