Я пытаюсь решить систему двух связанных дифференциальных уравнений с использованием python odeint().Использование векторных входов для odeint в python scipy для решения системы двух дифференциальных уравнений
В этой системе функция f зависит от двух переменных f (y, t), а другая функция g зависит от одной переменной g (t). Например, что-то подобное (только иллюстративными):
- DF (у, т)/дт = (1 - у) + F (у, т) + д (т)
- дг (т)/дт = г (т)
Я попытался, используя следующий код:
import numpy as np
from scipy import integrate
dy = 0.05
y = np.arange(0, 1 + dy, dy)
dt = 1
tmax = 100
t = np.arange(0,tmax,dt)
f = np.ones([tmax,len(y)])
g = np.ones(tmax)
def deriv(y,t):
fi = y[0]
gi = y[1]
fprime = (1 - y) + fi + gi
gprime = gi
return [fprime, gprime]
# Initial conditions
f_ini = np.ones(len(y))*15
g_ini = np.array([0.3])
sol_ini = np.concatenate((f_ini, g_ini), axis=0)
# solve the DEs
soln = integrate.odeint(deriv, sol_ini, t)
Я получаю следующее сообщение об ошибке в последней строке моего кода:
ValueError: setting an array element with a sequence.
Я угадываю, что не правильно устанавливаю свои начальные условия. Любой совет?
Большое спасибо, Дитрих. Однако мои уравнения действительно связаны. В моем примере выше df/dt зависит от g (t). И фактические уравнения, которые я должен решить, связаны в обоих направлениях. И хотя функция f (y, t) является функцией двух переменных, используется только производная по t. Моя программа отлично работала с odeint, когда у меня было только одно уравнение для решения формы: df (y, t)/dt = (1 - y) + f (y, t) – mg547
Трудно сделать общие заявления о том, как решить ODE. Стратегия решения и его качество сильно зависят от структуры системы. Например, ознакомьтесь с http://docs.sympy.org/dev/modules/solvers/ode.html#system-of-odes для (неполного) списка типов систем ODE. – Dietrich