NDS解波动方程时的不稳定性

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

我得到了很多不稳定因素,但是我没有用特征方法得到,因为这些都是简单的等式,所以我不知道什么是错误的......(希望不是问题的物理方面......)

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}
]

有人能帮我吗?

编辑:

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

模拟

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

按F5(刷新浏览器),从t=0重新开始动画。

(xx比例是我用“手动”方法使用的点数,其中每个点表示20个单位的NDSolve /物理比例)

使用NDSolve网格采样,可以产生完全不同的振荡效果。 有没有人有或知道确保正确整合的技术?


通过将系数改为无限精度(例如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}]

我不知道这个等式,所以我不相信这个解决方案:小规模的振荡起初增长,然后被消除。

链接地址: http://www.djcxy.com/p/54751.html

上一篇: Instability while NDSolving a wave equation

下一篇: How to configure a Facebook Application for sub domains