波动方程 PDE

计算科学 pde 有限差分 Python 双曲-pde 波传播
2021-12-23 06:07:35

我正在尝试使用线法求解以下 PDE 波动方程:

波动方程:u_tt = u_xx

初始条件:u(0,x) = sin*pi,u_t(0,x)=0, 0 < x < 1

边界条件:u(t,0) = 0, u(t,1) = 0, t >= 1

已编辑:删除旧代码并将很快发布新代码。:)

2个回答

问题是odeint解决了形式的一阶ODE

u˙(t)=Au(t),
但波动方程是(在空间离散化后)形式为的二阶ODE
u¨(t)=Au(t).
(事实上​​,你的图对于抛物线方程的解看起来很合理。)要应用黑盒 ODE 求解器(顺便说一句,这真的不是一个好主意),你首先需要重写波动方程作为一阶方程组
{u˙(t)=v(t),v˙(t)=Au(t).

冒着听起来粗鲁的风险:在对此类代码进行细微修改之前,您应该首先阅读一些 PDE 以了解要解决的问题。一个好的起点可以是Randy LeVeque的附录 E,普通和偏微分方程的有限差分方法,SIAM 2007

由于波动方程涉及时间上的二阶导数,因此需要两个初始条件:初始位移U(x,0)和初速度Ut(x,0). 我没有看到您的问题中指定的初始速度条件。这使我怀疑您链接到的教程有问题...

正如我所怀疑的,本教程中的代码是用于热方程,而不是波动方程为了求解波动方程,您还需要完全使用不同的时间步进方案。教程中实现的那个不适用于波动方程。