任意精度的可伸缩绳索模拟

计算科学 模拟
2021-12-05 02:30:56

我正在尝试模拟绳索对象。我理解的公式是由弹簧连接的粒子阵列。这些弹簧具有非常大的 k 值,因此线会变形,但拉伸很小。我得出的结论是,在封闭形式中不可能解决这个作为时间函数的问题,因为绳索是钟摆的概括(不是封闭形式)。

那么,寻求近似解决方案。我需要一个可扩展的算法。我见过的示例使用显式或隐式欧拉积分来移动粒子。这不成比例。

要看到这一点,请考虑具有 n 个节点的绳索。对一端施加很大的力。因为绳子不应该拉伸太多,所以另一端的加速度必须是立即的。

然而,通过欧拉积分,将任何力传递到另一端需要 n 个步骤。我注意到一个指数衰减:如果第一个节点加速一定量,则相邻节点加速较少(如果它们以相同的速率加速,则算法不稳定)。因此,与该节点相邻的节点加速得更慢!

因此,对于 n 个节点,加速度几乎可以忽略不计。这导致绳索显着伸展。如果您只想将模拟的分辨率提高一倍,您突然需要采取数十或数百倍的时间步长才能获得类似的行为。

我正在寻找一种简单的方法来解决这个问题——即,更高分辨率的模拟只需多项式时间额外计算即可收敛到解决方案。提供完整的矩阵和线性代数技术库。我的经典力学知识非常好,还懂得一些数值分析。

4个回答

你有一个使用当前公式的僵硬系统。弦中的动态拉伸和振动(可能)是无趣的,但它们控制了明确的时间步长。这表明使用隐式时间积分方法。您可以使用阻尼来防止振荡,这往往会扰乱隐式方法的自适应误差控制。

如果细尺度振荡对建模很重要,尽管想要跨越它们(例如,用于疲劳建模),那么您可能需要检查新的多尺度方法,例如异构多尺度方法(Engquist、Tsai 等)或半时间光谱法。使用此类方法是一个研究级主题,您必须充分了解您的问题和该方法的功能,以决定它是否合适。如果你想保存能量,例如某些振动模式不应该消散,那么你应该看看像 Verlet 这样的辛积分器。

如果你愿意,你也可以解决零拉伸限制。使用惯性项,可以根据角度重新制定模型,从而形成非刚性 ODE 系统。正如 faleichik 所指出的,这是ROPEHairer、Nørsett 和 Wanner 的书中考虑的测试问题。如果您放弃绳索本身的惯性,但允许松弛(具有离散负载的轻质、低拉伸绳索;不是常见模型),问题就会变成微分变分不等式 (DVI),并且您通常无法获得比一阶精度更好的时间。

首先,正如Jed Brown所提到的,您应该使用隐式时间步长方案,因为您的问题看起来相当僵硬,或者至少是更稳定但同样简单的方案,例如Leapfrog 积分Verlet 积分

至于身体问题,你对拉伸的兴趣如何?您可以使用完整的约束来代替用刚性弹簧连接粒子,例如确保粒子对之间的距离保持不变。需要在每个时间步解决约束,并且存在适合您的设置的有效算法,即约束的长链接链。例如,参见这篇论文

只是出于好奇,您是否还使用沿绳索长度的角势来模拟其柔韧性?

如果您对快速、近似的解决方案感兴趣,那么您可能会对离散微分几何等数字效果中使用的方法感兴趣。我知道Discrete Elastic Rods中的准静态公式,这是哥伦比亚大学 Grinspun 小组 2008 年发表的一篇论文,但该领域可能有更新的文献。

吊绳的运动是海尔和瓦纳钟爱的测试题,出现在“求解常微分方程”的第二(硬)卷和第一卷(1993 年)的第二版中。我推荐最后一个选项,第 247 页。方程很难推导,数值求解算法也不是很简单。尽管最后应用了 DOPRI、RK45 或 ODEX 等传统的显式时间步进器并且表现得非常好,所以问题并不是很棘手。