Код: Выделить всё
import numpy as np
from scipy.integrate import solve_ivp
from scipy.optimize import root
def system(t, y, alpha):
phi, psi, N = y
dphi_dt = psi
dpsi_dt = -3 * H(phi, psi, alpha) * psi - dV_dphi(phi, alpha)
dN_dt = H(phi, psi, alpha)
return [dphi_dt, dpsi_dt, dN_dt]
# initial conditions
psi0 = -dV_dphi(phi0, alpha)/(3*H(phi0,0, alpha)) # Initial value of psi
N0 = 0.0 # Initial value of N
# time span
t0 = 0
dt = 0.01 # Time step
t = t0
# Initialize lists to store the results
t_values = [t0]
phi_values = [phi0]
psi_values = [psi0]
N_values = [N0]
# Initial conditions
y = [phi0, psi0, N0]
# Solve the system of differential equations for one step
sol = solve_ivp(system, [t, t+dt], y, args=(alpha,))
y = sol.y[:, -1]
t = sol.t[-1]
# Extract solutions
phi, psi, N = y
# calculate extra info
# save data into a dictionary (containing lists) e.g.
data = {'H':[1,2,3,4,5]}
return data
Позже мне нужно исправить параметр альфа и найти, какие данные phi0 дает мне Например, ['H'][0] == h. Я использую
Код: Выделить всё
def H(phi0):
data = inflate(phi0, alpha)
p = data['H'][0] - h
return p
sol = root(H, 10.0)
Код: Выделить всё
def check_arguments(fun, y0, support_complex):
5 """Helper function for checking arguments common to all solvers."""
----> 6 y0 = np.asarray(y0)
ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 1 dimensions. The detected shape was (3,) + inhomogeneous part.
Я понятия не имею, почему это происходит и как это решить. Любая помощь приветствуется
Я пробовал изменить root на fsolve иsolve_ivp на odeint. Была возвращена та же ошибка при установке элемента массива с последовательностью. но источник ошибки был другой. Я также попытался убедиться, что функция H работает правильно и возвращает число, и это действительно так. Прочитав документацию, я уверен, что ошибка возникает, когдаsolve_ivp вызывается внутри инфляции. Функция inflate никогда не достигает точки возврата, поэтому внутри root выполняется только одна итерация. Я уверен, чтоsolve_ivp работает правильно внутри инфляции, поскольку дает желаемые результаты. Проблема возникает только тогда, когда она вызывается внутри root.
Я попробовал изменить методsolve_ivp, но некоторые методы выдали ту же ошибку, в то время как другие заняли так чертовски много времени, что я сдался .
Подробнее здесь: https://stackoverflow.com/questions/788 ... ay-element