решение системы ОДУ из одного ОДУ 2-го порядка и двух ОДУ 1-го порядка - PullRequest
0 голосов
/ 06 апреля 2019

Мне нужно решить систему обыкновенных дифференциальных уравнений.Проблема в том, что я не могу найти ни одного примера в Интернете, который выглядит так.Он состоит из одного ODE 2-го порядка и двух ODE 1-го порядка.Это система:

Один ODE 2-го порядка:

d ^ 2 z / dt ^ 2 + ((e ^ y) / x) (dx / dt) (dz / dt)+ (dy / dt) xe ^ y = 0

и два ODE 1-го порядка:

dx / dt = (1 - 2 м / x) e ^ (- y)

dy / dt = (1 / x) e ^ (- y)

Я уже пробовал писать код с использованием scipy.integrate.odeint.Моя проблема в том, что я основываю свою работу на следующих примерах: https://scipy -cookbook.readthedocs.io / items / Zombie_Apocalypse_ODEINT.html и https://scipy -cookbook.readthedocs.io /items / CoupledSpringMassSystem.html , и системы, изображенные в этих примерах, не похожи на мои, я не уверен, что все сделал правильно.

В частности, я не уверен, чтов определении функции векторного поля ниже.Например, посмотрите на f1 и f2.y1 - это dx / dt в системе, которую я показал выше.Поэтому я сделал f1 = y1, а затем назначил для f2 явное выражение для dx / dt.Это правильно?

import numpy as np
from scipy.integrate import odeint

def vectorfield(w,t):
    x1,y1,x2,y2,x3,y3 = w
    m = 0.5
    f1 = y1
    f2= (1-(2*m)/x1)*np.exp(-x2)
    f3 = y2
    f4 = (1/x1)*np.exp(-x2)
    f5 = y3
    f6 = (-1/x1)*y1*y3*np.exp(-x2)-y2*x1*np.exp(x2)
    return [f1,f2,f3,f4,f5,f6]

#initial conditions:
x1 = 10
y1 = 0
x2 = 2
y2 = 1
x3 = 3
y3 = 1.5

w0 = [x1,y1, x2, y2, x3,y3]

# ODE solver parameters

stoptime = 5.0
numpoints = 250


t = [stoptime * float(i) / (numpoints - 1) for i in range(numpoints)]

wsol = odeint(vectorfield, w0, t)

...