Маятниковая интеграция odeint

62
8

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

Я использовал код здесь, чтобы попытаться перейти к кодировке, но все, что я придумал, это плоская линия для 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()

спросил(а) 2021-01-19T18:24:17+03:00 2 месяца, 3 недели назад
1
Решение
62

Я подозреваю, что здесь есть ошибка: - (g/R) * np.sin(phi). Возможно, вы забыли определить псевдоним для импорта 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

ответил(а) 2021-01-19T18:24:17+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема