Ошибка на питоне - PullRequest
       14

Ошибка на питоне

0 голосов
/ 04 мая 2018

Привет. Я хочу построить траекторию полета ракеты с помощью петли, используя метод Эйлера. Мой код (вы можете пропустить это, ошибка под ним):

mo = 1000
m = 900
q = 2.8
u = 3700
vo = 0
xo = 0.0001
g = 9.81
t = np.arange(0,int(1001))
x0 = 0.0001
v0 = 0
N = 1000
at = 1/1000

Теперь скорость и высота выведения:

def v(t):
    return  u*np.log(mo/(mo-q*t))-g*t

def az(t):
    return xo + vo*t - 0.5*g*t**2 + u*t*np.log(mo) + (u/q)*((mo - q*t)*np.log(mo 
    - q*t) + q*t - mo*np.log(mo))

z = xo + vo*t - 0.5*g*t**2 + u*t*np.log(mo) + (u/q)*((mo - q*t)*np.log(mo 
- q*t) + q*t - mo*np.log(mo))

А вот ускорение, из-за которого я превратился в список:

aj = -g + (q/(mo-q*t))*u
ajj = np.array(aj).tolist()

Итак, вот цикл, в котором я пытаюсь решить его аналитическим способом с помощью метода Эйлера:

t = np.zeros(N + 1)
t[0] = 0
z = np.zeros(N + 1)
z[0] = x0

v = np.zeros(N + 1)

v[0] = 0


for k in range(0,N):
    v[k + 1] = v[k] +ajj*z[k]*at
    z[k + 1] = z[k] + v[k + 1]*at

И это дает мне эту ошибку:

ValueError                                Traceback (most recent call last)
<ipython-input-193-d1513ed52aa0> in <module>()
 11 
 12 for k in range(0,N):
 ---> 13     v[k + 1] = v[k] + ajj*z[k]*at
 14     z[k + 1] = z[k] + v[k + 1]*at
 15 

 ValueError: setting an array element with a sequence.

Я знаю, что это едва значит. Ошибка из-за списка ajj, но я не знаю, как это исправить, чтобы построить график z по времени. Спасибо за помощь. Извините за длинный вопрос, я только начинаю программировать.

1 Ответ

0 голосов
/ 22 мая 2018

Ваша система ODE m'(t)=-q, az'(t)=v(t), v'(t)=u*q/m(t)-g, здесь с добавлением m(t)=m0-q*t. Всегда помогает отделить динамику системы от решателя с помощью функции ODE,

def ODEfunc(t,y): az, v = y; return np.array([ v, -g+q*u/(m0-q*t) ]);

, чтобы вы могли повторять шаги Эйлера согласно формуле поваренной книги

t, y = t+h, y + h*ODEfunc(t,y)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...