用SciPy求解微分方程组

时间:2015-06-01 06:30:47

标签: python numpy scipy differential-equations numerical-integration

我试图使用scipy来解决以下微分方程系统:

Y[0] = q1
Y[1] = q1'
Y[2] = q1''
Y[3] = q2
Y[4] = q2'
Y[5] = q2''

我尝试使用scipy.integrate.odeint来获取数值解法。替换:

def deriv(Y, t):
    return np.array([
         Y[1],
         (-ML1 * Y[5] - R1L1 * Y[1] - Y[0] / C1L1),
         ??
         Y[4],
         (-ML2 * Y[2] - R2L2 * Y[4] - Y[3] / C2L2),
         ??
    ])

def main():
    t = np.arange(0.0, 500.0, 0.01)
    initial_cond = [ 1.0, 0.0, 0.0, 0.0, 0.0, 0.0 ]
    sol = integrate.odeint(deriv, initial_cond, t)
    print(sol)

我使用以下代码来获得解决方案。

MyHttpClass().getData()

我的问题是我对q1'(t)和q2'(t)的衍生物应该怎样。我可以使用不同的替代品吗?

1 个答案:

答案 0 :(得分:1)

你有两个耦合的二阶方程。当该系统转换为一阶方程组时,将有四个方程,而不是六个方程式。

手工做一点代数,用q1(t),q1'(t),q2(t)和q2'来求解向量[q1''(t),q2''(t)]。 (吨)。 (例如,您可以使用矩阵[[1,M / L1],[M / L1,1]]的倒数为[[1,-M / L1],[ - M / L1,1]] ] /(1-(M / L1)** 2),如果M / L1不是1.)将状态向量Y定义为[q1(t),q1'(t),q2(t),q2' (吨)]。然后,您需要从deriv返回的向量是

Y[0]'(t) = q1'(t)  = Y[1]
Y[1]'(t) = q1''(t) = (expression you found using algebra, with q1(t), q1'(t), q2(t) and q2'(t) replaced with Y[0], Y[1], Y[2], Y[3], resp.)
Y[2]'(t) = q2'(t)  = Y[3]
Y[3]'(t) = q2''(t) = (expression you found using algebra, with q1(t), q1'(t), q2(t) and q2'(t) replaced with Y[0], Y[1], Y[2], Y[3], resp.)