Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wolfram mathematica 求解波动方程时的不稳定性_Wolfram Mathematica - Fatal编程技术网

Wolfram mathematica 求解波动方程时的不稳定性

Wolfram mathematica 求解波动方程时的不稳定性,wolfram-mathematica,Wolfram Mathematica,我正在尝试使用NDSolve求解波动方程,以检查使用它是否比使用旧的特征方程方法更容易和/或更快 我得到了很多用特征线方法得不到的不稳定性,因为这些都是简单的方程,我想知道哪里不对。。。(希望不是问题的物理方面…) 有人能帮我吗 编辑: 我将NDSolve解决方案(在JxB编辑之后)与我的特征解决方案一起放在同一个动画中。除了最初的快速振荡外,它们的匹配足够接近。随着时间的推移,它们往往会开始去同步,但我相信这可能是由于我们在推导特征时不得不承认的一个小简化 红色:NDsolve;蓝色:“手

我正在尝试使用
NDSolve
求解波动方程,以检查使用它是否比使用旧的特征方程方法更容易和/或更快

我得到了很多用特征线方法得不到的不稳定性,因为这些都是简单的方程,我想知道哪里不对。。。(希望不是问题的物理方面…)

有人能帮我吗

编辑:

我将
NDSolve
解决方案(在JxB编辑之后)与我的特征解决方案一起放在同一个动画中。除了最初的快速振荡外,它们的匹配足够接近。随着时间的推移,它们往往会开始去同步,但我相信这可能是由于我们在推导特征时不得不承认的一个小简化

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

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

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


使用
NDSolve
栅格采样,可呈现完全不同的振荡效果。是否有人拥有或知道确保正确积分的技术?

通过将系数更改为无限精度(例如,1/9.8->10/98),并设置
工作精度->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}]

我不知道这个方程,所以我不相信解决方案:小规模振荡最初增长,然后衰减。

我想你会在数学网站上得到更多答案:@dario谢谢你的建议(我会尝试一下)。但由于这些方程应该是稳定的,我认为这更像是Mathematica的问题,尽管我不是这方面的专家……如果你怀疑,因为我从未使用Mathematica,我所能建议的就是将其更新到最新版本。如果问题是由Mathematica中的错误引起的,那么这可能会解决您的问题。您是否收到任何消息,或者只是注意到
插值函数
通过特征相对于您的解决方案有问题?@dario-将“Mathematica问题”理解为“Mathematica相关问题”,而不是“Mathematica相关问题”->,即,不一定是一个错误…它做得更好,在某种程度上,我相信这证明了高振荡效应是NDSolve的某种数值异常。这应该是水波。设定边界条件以模拟水从非水平状态下落后,在封闭的“水池”内的水在墙之间反弹。所以,我也不相信小尺度的振荡。。。另外,因为我的“手动”特征方法没有显示这种行为(它们只显示长的慢波)。如果你添加填充->底部,它会变得更清楚模拟什么…@JxB如果你能解释为什么工作精度应该低(以及为什么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}]