Модель траектории не дает правильных результатов - PullRequest
0 голосов
/ 05 июля 2018

У меня проблемы с решением системы нелинейных обыкновенных дифференциальных уравнений. Кажется, они не дают моего правильного результата.

Вот уравнения, которые мне нужно решить:

asdadsasd

И вот результат, который я пытаюсь получить:

asdadsasd

Вот мой вывод:

output

"" "

def model(t, z):
    #Variables
    r, zeta, phi, V, Gamma, psi = z

    print(t)

    #Simplify
    rho = planet.density(r)
    gr = planet.g(r)
    w = planet.angular_rotation_rate

    #Postition
    drdt = V*np.sin(Gamma)
    dzetadt = (V*np.cos(Gamma)*np.cos(psi))/(r*np.cos(phi))
    dphidt = (V*np.cos(Gamma)*np.sin(psi))/r

    #Forces
    dVdt = -1*(rho*V**2)/(2*beta) - gr*np.sin(Gamma) + r*w**2*np.cos(phi)*(np.sin(Gamma)*np.cos(phi) - np.cos(Gamma)*np.sin(phi)*np.sin(psi))
    dGammadt = (-1*gr*np.cos(Gamma) + V**2*np.cos(Gamma)/(r) + 2*w*V*np.cos(phi)*np.cos(psi) + r*w**2*np.cos(phi)*(np.cos(Gamma)*np.cos(phi) + np.sin(Gamma)*np.sin(phi)*np.sin(psi)))/(V)
    dpsidt = (-1*(V**2*np.cos(Gamma)*np.cos(psi)*np.tan(phi))/r + 2*w*V*(np.tan(Gamma)*np.cos(phi)*np.sin(psi) - np.sin(phi)) - (r*w**2*np.sin(phi)*np.cos(phi)*np.cos(psi))/(np.cos(Gamma)))/V

    #Pack into dzdt
    dzdt = [drdt, dzetadt, dphidt, dVdt, dGammadt, dpsidt]
    return dzdt

def hit_ground(t, y): 
    return y[0]
hit_ground.terminal = True
hit_ground.direction = -1

#Solv    print("Solving trajectory for beta = {}.".format(beta))
sol = solve_ivp(model, t_span = [start, end], y0 = z0, events = hit_ground, max_step = dt)

"" "

Из того, что я могу сказать, термин V**2*np.cos(Gamma)/r вызывает некоторые проблемы, так как, когда я умножаю это на 0, результат выглядит больше как правильный.

В моем коде есть и другие части (например, начальные условия и постобработка), но я недавно разместил здесь сообщение, и оказалось, что это не правильный способ задать вопрос. Пожалуйста, скажите мне, если вам нужно что-нибудь еще.

Спасибо.

...