求解单个偏微分方程
这个例子展示了如何制定、计算和绘制单个PDE的解决方案。
考虑偏微分方程
方程是在区间上定义的 为次 .在 时,解满足初始条件
同样,在 而且 ,解满足边界条件
要在MATLAB®中求解这个方程,您需要对方程、初始条件和边界条件进行编码,然后在调用求解器之前选择一个合适的解网格pdepe
.您可以将所需的函数作为本地函数包含在文件的末尾(如这里所做的),或者将它们作为单独的命名文件保存在MATLAB路径的目录中。
代码方程
在编写方程式之前,需要将它改写成一种形式pdepe
解算器的预期。标准形式pdepe
预计是
.
在这种形式下,PDE变成
.
有了正确形式的方程式,你可以读出相关的项:
现在您可以创建一个函数来编码这个方程。函数应该具有签名[c,f,s] = pdex1pde(x,t,u,dudx)
:
x
为独立空间变量。t
是独立时间变量。u
因变量是否被求导x
而且t
.dudx
是空间偏导数吗 .输出
c
,f
,年代
所期望的标准偏微分方程形式中的系数pdepe
.这些系数是根据输入变量编码的x
,t
,u
,dudx
.
因此,本例中的方程可以用函数表示:
函数[c,f,s] = pdex1pde(x,t,u,dudx) c = pi^2;F = dudx;S = 0;结束
(注意:在示例的最后,所有函数都作为局部函数包含在内。)
代码初始条件
接下来,编写一个返回初始条件的函数。初始条件应用于第一个时间值tspan (1)
.函数应该具有签名U0 = pdex1ic(x)
.
对应的函数为
函数U0 = pdex1ic(x) U0 = sin(pi*x);结束
代码边界条件
现在,写一个计算边界条件的函数。对于在间隔上提出的问题 ,所有的边界条件都适用 ,要么 或 .求解器所期望的边界条件的标准形式为
用这个标准形式重写边界条件,并读出系数值。
为 ,方程为
系数为:
为 ,方程为
系数为:
因为边界条件函数表示为 ,并且这一项已经在主PDE函数中定义了,你不需要在边界条件函数中指定这一部分方程。您只需指定的值 而且 在每个边界上。
边界函数应该使用函数签名[pl,ql,pr,qr] = pdex1bc(xl,ul,xr,ur,t)
:
输入
xl
而且ul
对应于 而且 对于左边界。输入
xr
而且你的
对应于 而且 为了正确的边界。t
是独立时间变量。输出
pl
而且ql
对应于 而且 对于左边界( 对于这个问题)。输出
公关
而且qr
对应于 而且 对于正确的边界( 对于这个问题)。
本例中的边界条件用函数表示:
函数[pl,ql,pr,qr] = pdex1bc(xl,ul,xr,ur,t) pl = ul;Ql = 0;Pr = PI * exp(-t);Qr = 1;结束
选择解决方案网格
在求解方程之前,你需要指定网格点
你想要pdepe
评估解决方案。将点指定为向量t
而且x
.向量t
而且x
在求解器中扮演不同的角色。特别是,求解的成本和精度很大程度上取决于向量的长度x
.然而,计算对矢量中的值不太敏感t
.
对于这个问题,在空间间隔[0,1]中使用20个等间距点的网格和的5个值t
从时间区间[0,2]。
X = linspace(0,1,20);T = linspace(0,2,5);
解决方程
最后,利用对称性解方程米
的PDE方程,初始条件,边界条件,网格x
而且t
.
M = 0;Sol = pdepe(m,@pdex1pde,@pdex1ic,@pdex1bc,x,t);
pdepe
返回3-D数组中的解索尔
,在那里索尔(i, j, k)
接近k
解的第Th分量
评估在t(我)
而且x (j)
.的大小索尔
是长度(t)
——- - - - - -长度(x)
——- - - - - -长度(情况)
,因为情况
为每个解决方案组件指定初始条件。对于这个问题,u
只有一个成分,所以呢索尔
是一个5 × 20的矩阵,但通常你可以提取k
解决方案组件的命令U = sol(:,:,k)
.
提取第一个解组件索尔
.
U = sol(:,:,1);
策划解决方案
绘制解的曲面图。
冲浪(x, t, u)标题(“用20个网格点计算的数值解”)包含(“距离x”) ylabel (“t”)
选取该问题的初始条件和边界条件,使其有解析解
画出具有相同网格点的解析解。
冲浪(x, t, exp (- t)‘* sin(π* x))标题(“用20个网格点绘制的真实解”)包含(“距离x”) ylabel (“t”)
现在,比较数值解和解析解万博 尤文图斯 的最终值 .在这个例子中 .
情节(x, u(最终,:),“o”, x, exp (- t(结束))* sin(π* x))标题(' t = 2处的解')传说(“数值,20网格点”,“分析”,“位置”,“南”)包含(“距离x”) ylabel (“u (x, 2)”)
本地函数
这里列出了PDE求解器pdepe调用的本地帮助函数来计算解决方案。或者,您可以将这些函数作为它们自己的文件保存在MATLAB路径下的一个目录中。
函数[c,f,s] = pdex1pde(x,t,u,dudx)%待解方程C = ^2;F = dudx;S = 0;结束%----------------------------------------------函数U0 = pdex1ic(x)%初始条件U0 = sin(*x);结束%----------------------------------------------函数[pl,ql,pr,qr] = pdex1bc(xl,ul,xr,ur,t)边界条件Pl = ul;Ql = 0;Pr = PI * exp(-t);Qr = 1;结束%----------------------------------------------