2015-10-21 6 views
1

Я пытаюсь решить маятниковое дифференциальное уравнение, которое выглядит как d2(phi)/dt = -(g/R) *sin(phi) (это проблема скейтборда в классической механике Тейлора). Я новичок в scipy и odeint и т. П., Поэтому я делаю это для подготовки к более сложным численным решениям в будущем.Маятниковая интеграция odeint

Я использовал код от here, чтобы попытаться перейти к кодировке, но все, что я придумал, - это плоская линия для phi(t). Я думаю, что это связано с тем, что я пытаюсь разбить дифференциальное уравнение второго порядка на два первых порядка, где один не зависит от другого (потому что d (phi)/dt появляется); но я не уверен, как это сделать.

Кто-нибудь знает, что с этим не так?

# integrate skateboard problem, plot result 
    from numpy import * 
    from scipy.integrate import odeint 
    import matplotlib.pyplot as plt 

    def skate(y, t, params): 
     phi, omega = y 
     g, R = params 
     derivs = [omega, -(g/R)*np.sin(phi)] 
     return derivs 

    # Parameters 
    g = 9.81 
    R = 5 
    params = [g, R] 

    #Initial values 
    phi0 = 20 
    omega0 = 0 
    y0 = [phi0, omega0] 

    t = linspace(0, 20, 5000) 

    solution = odeint(skate, y0, t, args=(params,)) 

    plt.plot(t, solution[:,0]) 
    plt.xlabel('time [s]') 
    plt.ylabel('angle [rad]') 
    plt.show() 

ответ

1

Я подозреваю, что ошибка здесь: - (г/R) * нп .sin (фи). Возможно, вы забыли определить псевдоним для импорта numpy lib (например: import numpy as np). Вместо этого вы просто сделали (из numpy import *). Попробуйте следующее:

def skate(y, t, params): 
    phi, omega = y 
    g, R = params 
    derivs = [omega, -(g/R)*sin(phi)] 
    return derivs 

 Смежные вопросы

  • Нет связанных вопросов^_^