我有功课来使两个耦合的摆(两个弦上的质量)对称。但是,结果图是倾销振荡的解决方案,而不是无阻尼的解决方案。如果我用Euler方法使用自制循环,代码可以正常工作,但是在同样的情况下,我得到了某种阻尼。我不知道如何将odeint用于二阶2对偶微分方程组吗?
#This works ok
#k1, k2 are constants of spring:
for i in range (1, n):
a1=(-x1\[i-1\]*k1+k2*(x2\[i-1\]-x1\[i-1\]))/m1 #acceleration of first mass
a2=k2*(-x2\[i-1\]+x1\[i-1\])/m2 #aceleration of second mass
v1\[i\]=v1\[i-1\]+a1*step #velocity 1
x1\[i\]=x1\[i-1\]+v1\[i-1\]*step #position 1
v2\[i\]=v2\[i-1\]+a2*step #velocity 2
x2\[i\]=x2\[i-1\]+v2\[i-1\]*step#position 2
t\[i\]=i*step #time
#This gives damped oscilation as a resoult:
def equations(Initial, t):
v1, x1, v2, x2 = Initial
dydt=\[ v1, v2, (-x1*k1+k2*(x2-x1))/m1, k2*(x2-x1)/m2\]
#print(dydt)
return dydt
InitialCond=\[0.0, 0.0, x1initial, x2initial\] #vector of initial conditions
t_span = np.linspace(0, 50, 10000)
solution = odeint(equations, InitialCond, t_span)
plot()
使用Euler步骤校正溶液 enter image description here