在MATLAB中可以用pdepe函数求解在一维空间变量x和时间t条件下抛物型和椭圆型PDE系统的初始-边界值问题。要求系统中至少有一个抛物型方程。
该求解器基于一系列指定节点进行二阶精度的空间离散,从而将PDE问题转换为常微分方程(ODE)问题。时间积分用ode15s函数完成。
pdepe求解器的基本语法格式为:
sol=pdepe(m,pdefun,icfun,bcfun,xmesh,tspan)
其中,m指定问题的对称属性,与方程(1-1)中的m相对应;pdefun为定义PDE问题的函数,它计算方程(1-1)中的项目c、f和s,并具有下面的形式:
[c,f,s]=pdefun(x,t,u,dudx)
其中,x和t为标量;u和dudx为向量,分别为解u及其相对于x的偏导数。C、f和s为列向量。c保存矩阵c的对角元素。
icfun为计算初始条件的函数,具有下面的形式:
u=icfun(x)
在被调用时,icfun函数计算x处解的初始值并返回到列向量u中。
bcfun为计算边界条件中p项和q项的函数,形式为
[pl,ql,pr,qr]=bcfun(xl,ul,xr,ur,t)
这里,ul为左边界x1=a处的近似解,ur为右边界xr=b处的近似解。pl和ql为对应于xl处p和q的对角线的列向量。类似地,pr和qr对应于xr。当m>0和a=0时,x=0附近解的有界性需要通量项f在a=0时变为0来保证。pdepe函数会自动利用这个边界条件,并忽略返回到pl和ql中的值。
xmesh为向量,用[x0,x1,…,xn]指定对tspan参数中的每个值求取数值解的点。x0和xn分别对应于a和b。xmesh参数的值必须满足x0<x1<…<xn,xmesh的长度必须大于或等于3。
tspan为向量,用[t0,t1, …,tf]指定时间点。t0和tf分别对应于t0和tf。求解器pdepe用一个ODE求解器进行时间积分。tspan参数的元素必须满足t0<t1<…<tf,tspan的长度必须大于或等于3。
输出变量sol是一个三维数组,即
sol(:,:,k):为解u的第k个组分的近似;
sol(i,:,k):为时间tspan(i)和网格点xmesh(:)处解的第k个组分的近似;
sol(i,j,k):为时间tspan(i)和网格点xmesh(j)处解的第k个组分的近似。
还可以在求解器的输入中添加options参数,实现更高级的应用。options参数是一个可以改变默认积分属性的可选参数,是pdepe函数的第7个参数,即
sol=pdepe(m,pdefun,icfun,bcfun,xmesh,tspan,options)
需要在pdefun、icfun和bcfun函数中传入p1、p2等参数,即
sol=pdepe(m,pdefun,icfun,bcfun,xmesh,tspan,…
options,p1,p2…)
求解器会在每次调用pdefun、icfun和bcfun函数时,将options参数后面的所有参数传递给它们。如果没有设置选项,则用options=[]进行空格。在pdefun函数的变量列表中,参数位于x、t、u和dudx参数的后面,即
f=pdefun(x,t,u,dudx,p1,p2,…)
在icfun函数的变量列表中,参数位于x的后面,即
res=icfun(x,p1,p2,…)
在bcfun函数的变量列表中,参数位于xl、ul、xr、ur和t的后面,即
res=bcfun(xl,ul,xr,ur,t,p1,p2,…)