我正在尝试模拟一个具有微小差异的振荡系统:我希望它在身体向上运动时使用特定的运动方程(O.D.E.),而在身体向下运动时使用另一个运动方程。为了解决这些方程,我使用了Scypi的ODEINT。
例如,让我们考虑经典的质量弹簧系统。我试图使系统在向上运动时以运动方程为外部激励,而在向下运动时以简单方程为激励。
def function (x,t):
F0 = 10.00
w = 1.00
m = 2.00
c = 1.00
k = 20.00
s = x[0]
dsdt = x[1]
if x[1] >= 0:
d2sdt2 = (F0*np.sin(w*t)-c*dsdt-k*s)/m
else:
d2sdt2 = (-c*dsdt-k*s)/m
result = [dsdt,d2sdt2]
return result
initial = [3.00,0.00]
t = np.linspace(0.00,10.00,101)
y = odeint(function, initial, t)
获得的结果表明,只有第二运动方程对人体起作用[Results Obtained]。我期望身体在外力作用下向上运动时会出现更混乱的运动方式。
是否有更好的方法来实现这一目标?
只需添加一些参数以增加内部步长的密度和输出的密度
t = np.linspace(0.00,10.00,301)
y = odeint(function, initial, t, hmax=0.1, atol = 1e-8, rtol=1e-10)