如何求解这个一维非线性、可变系数双曲 PDE?

计算科学 pde 双曲-pde
2021-12-06 19:59:58

我需要在 x 和 phi 坐标中求解以下双曲方程

(s/f)φ+(1/f)x=0

φ>0f=(1+(1s)(1+0.4φex)10s)1

φ<0f=(1+1s10s)1

φ=0.1xs=0.1,f=0.526
x=0,φ>0s=1,f=1

在域中

0<x<1
0.1x<φ<1

我正在寻找可以像爪包一样求解这个方程的双曲线包,但我不知道如何在那里定义我的方程谢谢

2个回答

这只是对 David Ketcheson 关于数值求解的评论的一个小补充。

如果您想使用 MATLAB 获得数值解,Lawrence Shampine 为双曲 PDE 编写了一个 MATLAB 求解器,该求解器被设计为(相对)易于使用。如果你看这个页面的一半:

http://faculty.smu.edu/shampine/current.html

您将看到标题为“双曲 PDE”的部分,其中包含指向他的论文和用于此功能的 MATLAB 代码的链接。因为它完全是用 MATLAB 代码编写的,所以“安装”是微不足道的。

由于您在一个空间维度上存在标量问题,因此使用特征方法提出半解析解决方案应该不难。这里有一些东西可以帮助您入门。

如果您定义,问题可以以更好的形式编写g=1/f. 然后你可以解决s去寻找

s(g,x,ϕ)=α(x,ϕ)α(x,ϕ)+g1

在哪里

α(x,ϕ)={1+410ϕex10ϕ>0110ϕ0.

那么你的守恒定律就是

gx(s(g,x,ϕ)g)ϕ=0,

它看起来像一个传统的标量双曲 PDE。特征方法将允许您在特征交叉的“时间”之前找到解决方案。您可能需要一个牛顿求解器和一个 ODE 求解器来实现该方法。

如果您想通过数值离散化计算近似解,我建议您使用以下方法:

  • 如果您知道您的解决方案不包含 shocks,那么我只需编写上述方程的简单有限差分离散化(例如,使用 Python 或 MATLAB 和居中差分)。
  • 如果您需要计算具有冲击的解决方案,则需要更复杂的方法。您可能会考虑使用PyClaw(免责声明:我是 PyClaw 开发人员)。