У меня есть универ, где я должен создать модель для лунного спуска. Модель начинается с высоты и опускается с двух двигателей, которые расположены под углом.
Это часть кода, с которой у меня проблемы:
F1 = f*np.array([1, 1, 0.5, 0, 0, 1, 1]) #f-thrust in newtons
F2 = f*np.array([1, 1, 0.5, 0, 0, 1, 1]) #F1 and F2 regime of engines for each time step(percentage of thrust)
t = np.arange(0, np.size(F1), dt) #time domain
#a,b - angles of engines according to global coordinate system
#s0x, v0x, s0y, v0y, fi0, omg0 - initial values
#m - mass
def model_engine(u, t):
x, vx, y, vy, phi, w = u
d1 = vx
d2 = (1/(m))*(F1*np.cos((a)) - F2*np.cos((b)))
d3 = vy
d4 = (1/(m))*(F1*np.sin((a)) + F2*np.sin((b))) + g
d5 = w
d6 = (F1*np.cos(a)*(h/2) - F1*np.sin(a)*(w/2) + F2*np.sin(b)*(w/2) -
F2*np.cos(b)*(h/2))/((1/12)*(m)*h**2)
return np.array([d1, d2, d3, d4, d5, d6])
U = odeint(model_engine, [s0x, v0x, s0y, v0y, fi0, omg0], t)
Я не знаю, как реализовать разные F1 для каждого временного шага в определении? Я получаю ValueError: setting an array element with a sequence.
То же самое с переменной массой, это зависит от режима работы двигателей.
Решение дает угол космического корабля (d6). Уравнения, написанные таким образом, всегда дают a и b как 45 градусов, что, очевидно, не правильно, потому что космический корабль вращается. Как я могу взять решение (угол) из предыдущего шага и поместить его в текущий шаг? Смотрите фото для уточнения
![photo](https://i.stack.imgur.com/ikEmv.jpg)