一维偏微分方程求解器

在MATLAB中可以用pdepe函数求解在一维空间变量x和时间t条件下抛物型和椭圆型PDE系统的初始-边界值问题。要求系统中至少有一个抛物型方程。

该求解器基于一系列指定节点进行二阶精度的空间离散,从而将PDE问题转换为常微分方程(ODE)问题。时间积分用ode15s函数完成。

pdepe求解器的基本语法格式为:

code.matlab
sol=pdepe(m,pdefun,icfun,bcfun,xmesh,tspan)

其中,m指定问题的对称属性,与方程(1-1)中的m相对应;pdefun为定义PDE问题的函数,它计算方程(1-1)中的项目c、f和s,并具有下面的形式:

code.matlab
[c,f,s]=pdefun(x,t,u,dudx)

其中,x和t为标量;u和dudx为向量,分别为解u及其相对于x的偏导数。C、f和s为列向量。c保存矩阵c的对角元素。

icfun为计算初始条件的函数,具有下面的形式:

code.matlab
u=icfun(x)

在被调用时,icfun函数计算x处解的初始值并返回到列向量u中。

bcfun为计算边界条件中p项和q项的函数,形式为

code.matlab
[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个参数,即

code.matlab
sol=pdepe(m,pdefun,icfun,bcfun,xmesh,tspan,options)

需要在pdefun、icfun和bcfun函数中传入p1、p2等参数,即

code.matlab
sol=pdepe(m,pdefun,icfun,bcfun,xmesh,tspan,…
options,p1,p2…)

求解器会在每次调用pdefun、icfun和bcfun函数时,将options参数后面的所有参数传递给它们。如果没有设置选项,则用options=[]进行空格。在pdefun函数的变量列表中,参数位于x、t、u和dudx参数的后面,即

code.matlab
f=pdefun(x,t,u,dudx,p1,p2,…)

在icfun函数的变量列表中,参数位于x的后面,即

code.matlab
res=icfun(x,p1,p2,…)

在bcfun函数的变量列表中,参数位于xl、ul、xr、ur和t的后面,即

code.matlab
res=bcfun(xl,ul,xr,ur,t,p1,p2,…)