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