Я использую solve_ivp для решения системы дифференциальных уравнений (6 x 6).Система считывает 4 массива (с формой (8000,)) в качестве входных данных и сохраняет результаты в массивах с одинаковой формой (8000,).Я хочу повторить часть той же системы (только последние 2 уравнения).Проблема в том, что когда я делал то же самое с odeint
, длина моих окончательных результатов (theta_i и theta_deg_i) составляла 8000. Теперь, поскольку аргументы записаны в противоположном порядке в solve_ivp, длина моих результатов равна 6Как я могу это исправить?
t = np.linspace(0,100,8000) # s
xdot = np.array(.....) # shape (8000, )
ydot = np.array(.....)
xdotdot = np.array(.....)
ydotdot = np.array(.....)
interp = interp1d(t,(xdot,ydot,xdotdot,ydotdot))
def inverse(t,k):
vcx_i = k[0]
vcy_i = k[1]
psi_i = k[2]
wz_i = k[3]
theta_i = k[4]
theta_deg_i = k[5]
# equations of the system...
return [vcxdot_i, vcydot_i, psidot_i, wzdot_i, theta_i, theta_deg_i]
k0 = [0.1257, 0, 0, 0, 0, 0]
steps = 1
method = 'RK23'
atol = 1e-3
k = solve_ivp(inverse, (0, 100), k0, method=method, t_eval=t, atol=atol, vectorized=True)
vcx_i = k.y[0,:]
vcy_i = k.y[1,:]
psi_i = k.y[2,:]
wz_i = k.y[3,:]
theta_i = k.y[4,:]
theta_deg_i = k.y[5,:]
theta_i = [inverse(t_i, k_i)[4] for t_i, k_i in zip(t, k.y)]
theta_deg_i = [inverse(t_i, k_i)[5] for t_i, k_i in zip(t, k.y)]
последние две строки в версии odeint:
theta_i = [inverse(k_i, t_i)[4] for t_i, k_i in zip(t, k)]
theta_deg_i = [inverse(k_i, t_i)[5] for t_i, k_i in zip(t, k)]
Форма ky в решении solve_ivp равна (6, 8000), в то время какформа k в одном растворе (8000, 6).Я новичок в Python и использую Python 2.7.12 на Ubuntu 16.04 LTS.Заранее спасибо.