NDS求波方程时的不稳定性

时间:2011-09-08 16:38:10

标签: 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}
]

enter image description here

有人可以帮助我吗?

修改

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

simulation

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

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

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

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

1 个答案:

答案 0 :(得分:4)

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

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

我不知道这个等式,所以我不相信解决方案:小规模振荡最初会增长,然后会被抑制。