MATLAB 求解 PDE 问题(1)——概述、例子
已有 2363 次阅读 2010-10-12 14:57 |个人分类:生活点滴|系统分类:科研笔记
|关键词:MATLAB PDE Toolbox 椭圆型方程 有限元方法
MATLAB PDE Toolbox 提供利用有限元方法求解偏微分方程的 GUI 以及相应
的命令行函数。利用该工具箱可以求解椭圆型方程、抛物型方程、双曲型方程、
特征值方程以及非线性方程。PDE Toolbox 的功能非常强大,网上有许多利用
PDE Toolbox 解决各种物理问题的论文,还有专门介绍工具箱的参考书。
网上的例子虽然很多,但是大部分是介绍PDE工具箱自带的一些例子,这些
例子中解的区域,边界条件是PDE工具箱已经编写好的,直接调用就可以。对于
该如何自己设定求解区域及边界条件,却很少有人涉及。网上搜索发现只有刘平
在博客中详细介绍过求解区域的设定。下面以一个椭圆型方程的例子来详细说明
求解的各个步骤,希望对大家能有所帮助。
设要求如下形式的椭圆方程的解:
按照 PDE 的要求,将方程化为标准形式
求解后的图像如下,第一幅图是解的图像,第二幅是计算误差。从第二幅图
可以看到,计算的最大误差是 10-3方量级。
通过这个例子我们可以基本掌握 PDE 求解偏微分方程的步骤和方法,后面
我将详细介绍如何设置区域及边界条件。掌握了区域和边界条件的设定,就可以
轻松求解遇到的偏微分方程了。图后是附带的 matlab 命令以及注释,并提供 m
文件附件下载,下载后解压即可。希望能对大家有所帮助。
下面是编写的求解上述方程的 matlab 语句及说明:
g='mygeom';
b='mybound';
定义区域,边界条件。mygeom 是定义区域的子函数名,函数名可根据自己的需
要取定,区域的确定规则由 pdegeom 函数说明,注意 pdegeom 函数只是说明如
何定义区域,它并不直接确定区域;mybound 是定义边界条件的子函数名,与区
域类似,边界的确定规则由函数 pdebound 确定。后面我会详细介绍区域和边界
的取法。
[p,e,t] = initmesh(g);
网格初始化,此处也可以写成[p,e,t] = initmesh('mygeom');这样可以省略上面的语
句
[p,e,t] = refinemesh(g,p,e,t);
[p,e,t] = refinemesh(g,p,e,t);
加密网格两次,需要加密几次重复几次即可,根据具体问题确定加密次数
U= assempde(b,p,e,t,1,0,'2*(x+y)-4');
调用 assempde 函数计算方程的数值解,assempde 函数的详细用法可以参考 MATH
网站或者 PDE 的使用指南。常用的用法是[u,res]=assempde(b,p,e,t,c,a,f),其中 b
为边界条件,此处也可以写为'mybound',p,e,t,为网格参数,c,a,f,为方程的参
数,后面也可以加猜测值以及各种属性。
pdesurf(p,t,U)
grid on;
xlabel('x');ylabel('y');zlabel('u')
colorbar
view([60 30])
画出解的图形。注意,为了让结果更直观一些,使用 view 函数调整了视点位置。
大家可以自行调整视角,满意即可。
exact=p(1,:).^2+p(2,:).^2-p(1,:).*p(2,:).*(p(1,:)+p(2,:));
exact=exact';
figure
pdesurf(p,t,U-exact)
grid on
xlabel('x');ylabel('y');zlabel(
MATLAB求解PDE问题 来自淘豆网m.daumloan.com转载请标明出处.