NDS求波方程时的不稳定性

P. *_*eca 7 wolfram-mathematica

我正在尝试用来NDSolve解决波动方程来检查是否更容易和/或更快地使用它而不是我的旧特征eq.方法实现.

我得到了很多不稳定的东西,我没有得到特征方法,因为这些是简单的方程式,我想知道出了什么问题......(希望,不是问题的物理方面......)

ans = Flatten@NDSolve[{
u[t, x]*D[d[t, x], x] + d[t, x]*D[u[t, x], x] + D[d[t, x], t] == 0,
D[d[t, x], x] + u[t, x]/9.8*D[u[t, x], x] + 
 1/9.8*D[u[t, x], t] + 0.0001 u[t, x]*Abs[u[t, x]] == 0,
u[0, x] == 0,
d[0, x] == 3 + x/1000*1,
u[t, 0] == 0,
u[t, 1000] == 0
},
d, {t, 0, 1000}, {x, 0, 1000}, DependentVariables -> {u, d}
]

Animate[Plot[(d /. ans)[t, x], {x, 0, 1000}, 
        PlotRange -> {{0, 1000}, {0, 6}}], {t, 0, 1000}
]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

有人能帮我吗?

编辑:

我已经将NDSolve解决方案(遵循JxB的编辑)与我的特征解决方案一起放在同一个动画上.除了最初的快速振荡外,它们的匹配足够接近.随着时间的推移,他们开始做不同步,但我相信这可能是由于我们在推断特征时必须承认的一点点简化.

模拟

红色:NDsolve; 蓝色:"手动"特征方法;

按F5(刷新浏览器),从中重启动画t=0.

(xx scale是我用"手动"方法使用的点数,其中每个点代表20个单位的NDSolve/物理尺度)

使用NDSolve网格采样,呈现完全不同的振荡效果.有没有人知道或知道确保正确整合的技术?

JxB*_*JxB 4

通过将系数更改为无限精度(例如,1/9.8->10/98)并设置WorkingPrecision->5(值 6 太高),我不再收到错误消息:

ans = Flatten@
  NDSolve[{D[u[t, x] d[t, x], x] + D[d[t, x], t] == 0, 
    D[d[t, x], x] + u[t, x] 10/98*D[u[t, x], x] + 
      10/98*D[u[t, x], t] + 1/10000 u[t, x]*Abs[u[t, x]] == 0, 
    u[0, x] == 0, d[0, x] == 3 + x/1000, u[t, 0] == 0, 
    u[t, 1000] == 0}, d, {t, 0, 1000}, {x, 0, 1000}, 
   DependentVariables -> {u, d}, WorkingPrecision -> 5]

Animate[
 Plot[(d /. ans)[t, x], {x, 0, 1000}, 
  PlotRange -> {{0, 1000}, {0, 6}}], {t, 0, 1000}]
Run Code Online (Sandbox Code Playgroud)

我不知道这个方程,所以我不相信这个解决方案:小规模振荡最初会增长,然后会减弱。