为什么这种模拟弹簧和质量系统的方法不稳定?

计算科学 数值建模 隐式方法
2021-12-07 04:07:52

我有一个由弹簧连接的物体的计算机模拟系统,因此它们的运动受以下因素控制:

xn+1=xnΔtk(xnr)

在哪里r是每两个物体之间的理想距离,并且Δt是时间步长。

使用向后欧拉方法,我最终得到了等式:

xn+1=xnΔtk(xn+1r)

这简化为:

xn+1=xn+Δtkr1+Δtk

然后我发现Δtk(xn+1r)=xnxn+1所以我知道我的运动幅度,我可以很容易地计算出一个方向向量来应用它。

我计算由弹簧连接的每两组物体之间的相互作用(我有大约 28 个物体),然后将每个物体的运动矢量相加并应用运动。

这是我遇到问题的地方。我得到的数字在迭代中不断增长,直到达到无穷大并且我的模拟爆炸,除非我设置一个小的时间步长Δt. 我认为Backward Euler应该能够避免这个问题并且是无条件稳定的。

是我的实现有问题吗,或者反向欧拉的稳定性是否也受到时间步长的限制Δt

1个回答

隐式欧拉法是无条件稳定的,但你所做的不是隐式欧拉法。相反,您所做的是仅使用 2 个粒子相互作用计算粒子在时间步结束时的位置,计算位置更新,然后将这些更新汇总为所有粒子相互作用。但是隐式 Euler 方法将计算您使用的所有这些更新xn+1使用所有交互的最终位置,而不仅仅是您当前正在考虑的一个交互。

您描述的方法称为“算子分裂”,即使每个构建块(每个交互单独)以无条件稳定的方式离散化,它也不是无条件稳定的。