弹簧阻尼器模型不能很好地工作

计算科学 模拟
2021-12-17 20:43:27

我正在尝试根据我在此站点上找到的教程对弹簧阻尼器系统进行建模。

如果我使用与教程中完全相同的参数,则系统不稳定。我已经下载了代码并验证了参数与我的相同。

a = (k * u) - (d * v);
v = v + a;
s = s + v;

jsfiddle在这里可用

我可以通过添加因子 0.3 来使其稳定,就像这样

s = 0.3 * s + v

但是,我想知道如何在不破解它的情况下使其稳定。我知道积分器不好,但它仍然适用于这种情况,因为它在演示中这样做。

1个回答

你的弹簧模型很好。需要注意的是数值积分。你上面有的是欧拉的数值积分方法众所周知,这种方法不稳定。您通过人工(数字)阻尼使其稳定。对于简单的弹簧阻尼系统,尝试使用中点法或更好的四步龙格-库塔Δt=1

更多信息在这里这里

你的代码想要这样的东西

// time step h=1 or less

a1 = (k*u) - (d*v)
u2 = u + (h/2)*v
v2 = v + (h/2)*a1
a2 = (k*u2) - (d*v2)

u = u + h*v2
v = v + h*a2