主要内容

求解单个偏微分方程

这个例子展示了如何制定、计算和绘制单个PDE的解决方案。

考虑偏微分方程

π 2 u t 2 u x 2

方程是在区间上定义的 0 x 1 为次 t 0 .在 t 0 时,解满足初始条件

u x 0 π x

同样,在 x 0 而且 x 1 ,解满足边界条件

u 0 t 0

π e - t + u x 1 t 0

要在MATLAB®中求解这个方程,您需要对方程、初始条件和边界条件进行编码,然后在调用求解器之前选择一个合适的解网格pdepe.您可以将所需的函数作为本地函数包含在文件的末尾(如这里所做的),或者将它们作为单独的命名文件保存在MATLAB路径的目录中。

代码方程

在编写方程式之前,需要将它改写成一种形式pdepe解算器的预期。标准形式pdepe预计是

c x t u u x u t x - x x f x t u u x + 年代 x t u u x

在这种形式下,PDE变成

π 2 u t x 0 x x 0 u x + 0

有了正确形式的方程式,你可以读出相关的项:

0

c x t u u x π 2

f x t u u x u x

年代 x t u u x 0

现在您可以创建一个函数来编码这个方程。函数应该具有签名[c,f,s] = pdex1pde(x,t,u,dudx)

  • x为独立空间变量。

  • t是独立时间变量。

  • u因变量是否被求导x而且t

  • dudx是空间偏导数吗 u / x

  • 输出cf,年代所期望的标准偏微分方程形式中的系数pdepe.这些系数是根据输入变量编码的xtu,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);结束

代码边界条件

现在,写一个计算边界条件的函数。对于在间隔上提出的问题 一个 x b ,所有的边界条件都适用 t ,要么 x 一个 x b .求解器所期望的边界条件的标准形式为

p x t u + x t f x t u u x 0

用这个标准形式重写边界条件,并读出系数值。

x 0 ,方程为

u 0 t 0 u + 0 u x 0

系数为:

  • p 0 t u u

  • 0 t 0

x 1 ,方程为

π e - t + u x 1 t 0 π e - t + 1 u x 1 t 0

系数为:

  • p 1 t u π e - t

  • 1 t 1

因为边界条件函数表示为 f x t u u x ,并且这一项已经在主PDE函数中定义了,你不需要在边界条件函数中指定这一部分方程。您只需指定的值 p x t u 而且 x t 在每个边界上。

边界函数应该使用函数签名[pl,ql,pr,qr] = pdex1bc(xl,ul,xr,ur,t)

  • 输入xl而且ul对应于 u 而且 x 对于左边界。

  • 输入xr而且你的对应于 u 而且 x 为了正确的边界。

  • t是独立时间变量。

  • 输出pl而且ql对应于 p x t u 而且 x t 对于左边界( x 0 对于这个问题)。

  • 输出公关而且qr对应于 p x t u 而且 x t 对于正确的边界( x 1 对于这个问题)。

本例中的边界条件用函数表示:

函数[pl,ql,pr,qr] = pdex1bc(xl,ul,xr,ur,t) pl = ul;Ql = 0;Pr = PI * exp(-t);Qr = 1;结束

选择解决方案网格

在求解方程之前,你需要指定网格点 t x 你想要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分量 u k 评估在t(我)而且x (j).的大小索尔长度(t)——- - - - - -长度(x)——- - - - - -长度(情况),因为情况为每个解决方案组件指定初始条件。对于这个问题,u只有一个成分,所以呢索尔是一个5 × 20的矩阵,但通常你可以提取k解决方案组件的命令U = sol(:,:,k)

提取第一个解组件索尔

U = sol(:,:,1);

策划解决方案

绘制解的曲面图。

冲浪(x, t, u)标题(“用20个网格点计算的数值解”)包含(“距离x”) ylabel (“t”

图中包含一个axes对象。用20个网格点计算的数值解包含一个曲面类型的对象。

选取该问题的初始条件和边界条件,使其有解析解

u x t e - t π x

画出具有相同网格点的解析解。

冲浪(x, t, exp (- t)‘* sin(π* x))标题(“用20个网格点绘制的真实解”)包含(“距离x”) ylabel (“t”

图中包含一个axes对象。标题为True solution的axis对象由20个网格点绘制,包含一个类型为surface的对象。

现在,比较数值解和解析解万博 尤文图斯 t f 的最终值 t .在这个例子中 t f 2

情节(x, u(最终,:),“o”, x, exp (- t(结束))* sin(π* x))标题(' t = 2处的解')传说(“数值,20网格点”“分析”“位置”“南”)包含(“距离x”) ylabel (“u (x, 2)”

图中包含一个axes对象。标题为解在t = 2的axes对象包含两个类型为line的对象。这些对象表示数值,20网格点,分析。

本地函数

这里列出了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;结束%----------------------------------------------

另请参阅

相关的话题