Как сопоставить дифференциальное уравнение американских горок с scipy? - PullRequest
0 голосов
/ 20 июня 2020

Я хочу воспроизвести эту фантазию c сообщение в блоге в Scipy, в котором показано, как моделировать физику американских горок с помощью этой системы ODE

p '= v; v '= (- г к (р) / sqrt (1 + к (р) ^ 2)

с

p = position on the track (measured by path length along the track)
v = velocity
k(p) = slope at point p (in code denoted as slope(p))
g = gravity
(-b/m) v = dampening term (not in code)

Меня не волнует демпфирование. Просто общая концепция.

Я попытался воспроизвести это в scipy с образцом трека, который просто идет с постоянным наклоном вниз (slope = -1)

import numpy as np
from scipy import integrate

def slope(p):
    return -1

def f(p, U):
    return [
            U[1],
            (-9.81 * slope(p))/ np.sqrt(1 + slope(p)**2)
            ]

sol = integrate.solve_ivp(f, (0, 5), [0, 0])
print(sol)

Насколько я понимаю, возвращенная функция f отображает время на позицию p и скорость: f (время) -> [позиция, скорость].

Результат:

t: [0.0000e+00, 1.0000e-04, 1.1000e-03, 1.1100e-02, 1.1110e-01, 1.1111e+00, 5.0000e+00]
y[0]: [0.00000000e+00, 3.46835876e-08, 4.19671410e-06, 4.27336483e-04, 4.28106806e-02, 4.28183876e+00, 8.67089690e+01]
y[1]: [0.00000000e+00, 6.93671752e-04, 7.63038928e-03, 7.69975645e-02, 7.70669317e-01, 7.70738684e+00, 3.46835876e+01]]

Однако это не то, что я ожидал.

Используя уравнения потенциала / kinecti c энергии и преобразовав его в v: v = sqrt(2*g*h)

, я ожидал бы, что через 5 м при наклоне -1 (что означает снижение на 5 метров), скорость должна быть:

v = sqrt(2 * 9.81 * 5) = 9.904 (m/s)

но в оде написано 34 (m/s)

Что я делаю не так?

PS Я в курсе что g может потребоваться изменить на -g, но числа в любом случае не складываются.

1 Ответ

3 голосов
/ 20 июня 2020

Поскольку k (p) = -1, ваше ускорение равно g / sqrt (2), а не g

Кроме того, вы вызываете функцию, передающую временной интервал в 5 секунд. 34 м / с достигаются через 5 секунд, а не 5 метров = 9,81 / sqrt (2) x 5, что правильно.

...