ошибка возникает при использовании scipy.solve_inv с избранными параметрами mpmath - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь решить ODE с помощью solve_ivp, внутри ODE, некоторые функции являются результатом mp.quad (функция интеграции mpmath)

Я использую python3 под Mac, и появляется ошибкаthis:

Traceback (most recent call last):
  File "LG_evolution.py", line 248, in <module>
    NumEvol = solve_ivp(lambda t,y: BE_Group_1(t,y),t_span=(1e-9, z[-1]),y0=init_state,t_eval=z,vectorized=False,rtol=1e-12, atol=1e-15)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/scipy/integrate/_ivp/ivp.py", line 544, in solve_ivp
    ts = np.hstack(ts)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/numpy/core/shape_base.py", line 288, in hstack
    return _nx.concatenate(arrs, 1)
ValueError: need at least one array to concatenate
from mpmath import *
from scipy.integrate import solve_ivp


def gamma_Nt_O2(z):
    return quad(lambda x:  np.sqrt(x)*sigma_Nt_O2(x)*mp.besselk(1,np.sqrt(x)*z*mF/M1),[smin_Nt_O2/mF**2,np.inf],error=False, method='tanh-sinh')*(mF**3)*T(z)/(64*np.pi**2)

#**Here Washout(z) contains gamma_Nt_O2(z),which is note explicitly shown**
def Washout(z):      
    return    float(W_ID(z)+W_ID_O2(z) +W_dL1_O2(z)+W_dL2(z)+W_dL2_O2(z))


def BE_Group(z,func):
    d_Num_N1 = -(Decay(z)+Scattering(z)) * ( func[0] - Num_N1_eq(z) )
    d_Num_BmL = -eps * Decay(z) * ( func[0] - Num_N1_eq(z) ) - ( Washout(z)+(func[0]/Num_N1_eq(z)*gamma_Hs(z) + 2*gamma_St(z))/H(z)/z)*func[1]


    return d_Num_N1, d_Num_BmL


NumEvol = solve_ivp(lambda t,y: BE_Group(t,y),t_span=(1e-9, z[-1]),y0=init_state,t_eval=z,vectorized=True,rtol=1e-12, atol=1e-15)

Когда вызывается NumEvol, будет показана ошибка, описанная выше

...