У меня есть тело, которое я хочу ускорить по прямой через итеративный процесс, однако, когда я смотрю на свои переменные, оно никогда не добавляет обновленную скорость в массив скоростей.
import numpy as np
import matplotlib.pyplot as plt
g = 9.81 # Gravity
pa = 1.2 # Air density
m = 250 # mass of bike
h = 0.69 # centre of mass height
ha = 0.69 # height of centre pressure
w = 1.5 # wheelbase
b = 0.73 # longitudinal distance of centre of mass
CdA = 0.2 # drag coefficient
PMax = 180000 # max power
ux = 1.2 # Longitudinal friction coefficient
uy = 1.44 # Lateral friction coefficient
St1Length = 400
ds = 40
vel = np.zeros(St1Length//ds)
s = np.linspace(0, St1Length, len(vel))
while s[-1] < St1Length:
Fd = 0.5 * pa * CdA * vel[-1]**2
Ap = ((PMax / ((m * vel[-1]) + 1e-9)) - (Fd / m)) / g
yw = 0
Aw = (((b * np.sqrt((yw)**2 + g**2)) / h) - ((Fd * ha) / (m * h))) / g
Wheelie_Min = np.minimum(Ap, Aw)
vel_new = np.sqrt(vel[-1]**2 + 2*Wheelie_Min*ds)
vel = np.append(vel, vel_new)
s_new = s[-1] + ds
s = np.append(s, s_new)
plt.plot(s, vel)
plt.xlabel('Distance (m)')
plt.ylabel('Velocity (m/s)')
plt.show()
Далее следует график, который выглядит следующим образом:
И вот как выглядит мой список переменных:
Это, вероятно, легко исправить, но я не вижу, что не так.
Я ожидаю, что массив обновится, а скорость на графике увеличится из-за ускорения.
Просто запустил ваш код и обнаружил, что s[-1]==400.0
и St1Length==400
. Ваш цикл while никогда не запускается.
Я рекомендую вам установить точку останова и немного пройтись по коду. Посмотрите, что делает каждая строка.
Ничего не обновляется, потому что s[-1] = 400
(то есть s[-1]
никогда не меньше 400). Этот код должен исправить проблемы.
import numpy as np
import matplotlib.pyplot as plt
g = 9.81 # Gravity
pa = 1.2 # Air density
m = 250 # mass of bike
h = 0.69 # centre of mass height
ha = 0.69 # height of centre pressure
w = 1.5 # wheelbase
b = 0.73 # longitudinal distance of centre of mass
CdA = 0.2 # drag coefficient
PMax = 180000 # max power
ux = 1.2 # Longitudinal friction coefficient
uy = 1.44 # Lateral friction coefficient
St1Length = 400
ds = 40
vel = [0.]
s = [0.]
while s[-1] < St1Length:
Fd = 0.5 * pa * CdA * vel[-1]**2
Ap = ((PMax / ((m * vel[-1]) + 1e-9)) - (Fd / m)) / g
yw = 0
Aw = (((b * np.sqrt((yw)**2 + g**2)) / h) - ((Fd * ha) / (m * h))) / g
Wheelie_Min = np.minimum(Ap, Aw)
vel_new = np.sqrt(vel[-1]**2 + 2*Wheelie_Min*ds)
vel.append(vel_new)
s_new = s[-1] + ds
s.append(s_new)
plt.plot(s, vel)
plt.xlabel('Distance (m)')
plt.ylabel('Velocity (m/s)')
plt.show()
Что не показано: какова ценность
vel_new
?