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网格采样,呈现完全不同的振荡效果.有没有人知道或知道确保正确整合的技术?
通过将系数更改为无限精度(例如,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)
我不知道这个方程,所以我不相信这个解决方案:小规模振荡最初会增长,然后会减弱。