我正在尝试使用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}
]
有人能帮我吗?
EDIT:
我已经放置了NDSolve
解决方案(遵循 JxB 的编辑)与我的特色解决方案,一起在同一动画上。除了最初的快速振荡之外,它们匹配得足够接近。随着时间的推移,它们往往会开始不同步,但我相信这可能是由于我们在推导特性时必须承认的一个小简化。
Red: NDsolve
;蓝色:“手动”特性方法;
按 F5(刷新浏览器),从以下位置重新启动动画t=0
.
(xx 比例是我在“手动”方法中使用的点数,其中每个点代表 20 个单位NDSolve
/物理尺度)
和谁玩NDSolve
网格采样,呈现完全不同的振荡效果。有人拥有或知道确保正确集成的技术吗?