Python 使用Randau方法求解SciPy中的_ivp

Python 使用Randau方法求解SciPy中的_ivp,python,scipy,Python,Scipy,我试图用Python解决一阶ODE(单个ODE,而不是系统),使用SciPy中的solve_ivp和Randau方法。ODE非常僵硬,也就是说,我使用更新的SciPY的solve_ivp方法。对于刚性问题,SciPY建议采用Randau积分法。代码片段已附加到: for gamma in gamma_array: for q_nondim in q_nondim_array: zs = [] us = [] r = solve_ivp(mo

我试图用Python解决一阶ODE(单个ODE,而不是系统),使用SciPy中的solve_ivp和Randau方法。ODE非常僵硬,也就是说,我使用更新的SciPY的solve_ivp方法。对于刚性问题,SciPY建议采用Randau积分法。代码片段已附加到:

for gamma in gamma_array:
    for q_nondim in q_nondim_array:
        zs = []
        us = []
        r = solve_ivp(model, (0,1),[0], method = 'Radau',jac = jacobian,t_eval= [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8,0.9, 1.0])
        if r.status <0 :
            print(r.message)
            print(r.success)
        us = np.array(r.y)
        zs = np.array(r.t)
        pressure = pressure_generator(us)
        pressure_array[i,j]= pressure[-1]
        j = j+1
    i = i+1
    j =0
雅可比矩阵是一个函数,它以形状数组(1,1)的形式返回常微分方程的雅可比矩阵

pressuregenerator是一个函数,它获取ODE的解并将其转换为所需变量(本例中为压力)

然而,这里的整合似乎失败了。r、 success为False,r.message为:

所需的步长小于数字之间的间距。

我再次尝试将t_eval数组更改为:

t_eval= [0.0,0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.0]
但即使在那时,整合也失败了,并传达了同样的信息。此外,我还收到另一条错误消息:

Value error: setting array element with a sequence.
关于:

pressure\u数组[i,j]=压力[-1]

代码行

请帮助我完成集成并解决ODE。由于solve_ivp是SciPy的一个新补充,与之相关的文献相当有限,官方文件也没有多大帮助

同时,ODE如下所示:

def pressure_generator(u):

A1 = (1+t_by_a)*(1+t_by_a)
A2 = A1 + u*u +2*u
A3 = A1/A2
F1 = A3  + np.log(A3)
A4 = 1/((1+u)*(1+u))
F2 = A4 + np.log(A4)
p = (1/gamma)*(F1 - F2)
return p
t_eval= [0.0,0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.0]
Value error: setting array element with a sequence.