scipy.integrate.odeint
ожидает, что init
соответствует измерению возвращаемого объекта. (см. Пример) .Рассмотрим код
import matplotlib.pyplot as plt
import numpy as np
from scipy.integrate import odeint
def function(init, time, k):
xt = init[0]
yt = init[1]
dotxt = init[2]
dotyt = init[3]
dxdt = xt + 2*init[3]
dydt = yt - 2*init[2]
return np.array([xt, dotxt, dxdt, yt, dotyt, dydt])
init = [0, 0.2, 0.1, 0.1, 0.0, 0.0] # you need 6 elements, so [0, 0.2, bla, bla, bla, bla]
time = np.linspace(0, 10, 500)
k = 0.2131
ans = odeint(function, init, time, args=(k, ))
plt.plot(time, ans[:, 0])
plt.plot(time, ans[:, 1])
plt.plot(time, ans[:, 2])
plt.plot(time, ans[:, 3])
plt.plot(time, ans[:, 4])
plt.plot(time, ans[:, 5])
, который будет отображать каждый из 6 столбцов относительно временного массива.Возможно, это не совсем правильно в отношении того, что вы пытаетесь сделать (возможно, необходимо изменить функцию ODE), но это устраняет проблему, о которой вы спрашивали.График для демонстрации,
