scipy.integrate.odeint输出错误

时间:2019-08-14 17:37:03

标签: python-3.x

我有功课来使两个耦合的摆(两个弦上的质量)对称。但是,结果图是倾销振荡的解决方案,而不是无阻尼的解决方案。如果我用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()

Wrong solution with odeint

使用Euler步骤校正溶液 enter image description here

0 个答案:

没有答案