如何在 Matlab 中解决我的 PDE 问题?

计算科学 matlab pde
2021-12-25 06:03:19

我需要为函数求解一组 5 个 PDEu(x,t).

我查了Matlab 函数 pdepe它看起来很适合我的情况,直到我读到这行:

f(x,t,u,u/x)是一个通量项,并且s(x,t,u,u/x)是源项。通量项必须取决于u/x.

在我的 4/5 方程的问题中f(x,t,u,u/x)不依赖于u/x,并且在我的方程的 1/5 中f(x,t,u,u/x)=0. 在我的方程式中,没有二阶导数u关于x.

  • 这是否意味着我不能使用 pdepe 来解决我的问题?

奇怪的是,在函数的链接pdepe,我之前提到的那一行:

...通量项必须取决于u/x.

没有出现在那里。另外,我希望自从有了f(x,t,u,u/x)不依赖于u/x只是一个特例,它不会以任何方式阻止我获得解决方案。

  • 所以总而言之,我想知道我是否可以使用pdepe即使f(x,t,u,u/x)不依赖于u/x?
  • 如果没有,如果我尝试解决它会发生什么?以及我可以使用什么其他方法来解决我的 PDE 集?

我的方程式如下所示:

让我们使用matlab的形式:

c(x,t,u,∂u/∂x)∂u/∂t=(x^−m)*∂/∂x((x^m)*f(x,t,u,∂u/∂x))+s(x,t,u,∂u/∂x).

u是一个有 5 个分量的向量,因为我有 5 个方程)

我有m=0我所有的方程式。

eq. 1: c=1, f=0, s=A(u)

eq. 2: c=1, f=-u(2).*B(u(4)), s=C(u) 

eq. 3: c=1, f=-u(3).*B(u(5)), s=C(u) 

eq. 4: c=1./B(u(4)), f=-u(4), s=D(u) 

eq. 5: c=1./B(u(5)), f=-u(5), s=E(u)

其中A, B, , 是C, D,E的一些函数u=[u(1);u(2);u(3);u(4);u(5)]但不是x, t,du/dx

重要的是要注意,对于一阶 ODE,始终可以选择 f=0,以便所有项都可以进入 s(在这种情况下,显然 f 不依赖于 du/dx)。在这里,我只是选择了一种方便的方式来表示我的方程。

1个回答

简短的回答是该pdepe函数并不严格要求通量项是u/x或者 pde 甚至包含一个通量项。

但是, pdepe它的设计最适合这种情况。函数名中的“pe”代表抛物线椭圆;这是它设计用于的 PDE 类。根据您的描述,您的 PDE 系统可能是双曲线的。在您的情况下效果如何 pdepe取决于具体的方程和边界条件。

双曲 PDE 的数值解可能非常具有挑战性。关于这个主题已经写了许多书籍和论文。然而,求解双曲 PDE 的许多基本数值技术依赖于在方程中添加一些“人工扩散”。在 1D 中,这相当于添加了一个小的通量项,它确实取决于 u/x. 您可以通过在 中手动执行此操作来达到相同的效果 pdepe这种方法的缺点是需要进行一些实验来确定合适的人工扩散量。太多,溶液可能会被过度涂抹,太少,溶液会出现一些不希望的振荡。

如果您想了解更多,可以看看 Strikwerda 的这篇经典文章:http: //www.amazon.com/Difference-Schemes-Partial-Differential-Equations/dp/0898715679

Core MATLAB 没有专门为双曲 PDE 设计的函数。但是 的作者之一 Shampinepdepe为 MATLAB 编写了这样一个函数,可以在这里下载:

http://faculty.smu.edu/shampine/current.html (参见标题为双曲偏微分方程的部分)