Мне нужно решить систему обыкновенных дифференциальных уравнений.Проблема в том, что я не могу найти ни одного примера в Интернете, который выглядит так.Он состоит из одного 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)