You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SciPy的solve_ivp运行报错Values in `t_eval` are not properly sorted如何解决

scipy.integrate.solve_ivp 报错t_eval未正确排序的解决方案

你遇到的报错是参数传递顺序错误导致的,scipy的solve_ivp位置参数顺序为fun, t_span, y0, method, t_eval, ...,你将自定义参数p放在了第五位,直接被识别为t_eval参数,程序对这个参数做排序校验时触发报错,和你t_span的排序没有任何关系。

需要修正的所有问题如下:

  • 修正参数传递方式:自定义参数必须通过args关键字参数传入,不能直接放位置参数里
  • 给微分方程函数pff补充return dy语句,返回导数计算结果
  • 修正初始值x_0的定义:你的方程是二维微分方程,初始值必须是长度为2的数组,你当前定义的是空数组,维度不匹配

修正后的完整可运行代码:

import numpy as np
from scipy import integrate

def pff(t, y, p):
    if (2 < t) and (t < 4):
        z = 1
    else:
        z = 0
    
    dy = np.zeros(2)
    dy[0]= (p[0] * (y[1] + z)**p[3]) / (1 + (y[1] + z)**p[3]) - (p[2] * y[0])
    dy[1]= (p[1] * (y[0] + z)**p[3]) / (1 + (y[0] + z)**p[3]) - (p[2] * y[1])
    return dy

alpha = 2
beta = 2
gamma = .5
n = 2
k = 1

p = [gamma, k, n, alpha, beta]
# 可根据需求修改初始值,此处以全0初始值为例
x_0 = np.zeros(2)
t_span = [0, 20]

# 自定义参数通过args关键字传入
sol = integrate.solve_ivp(pff, t_span, x_0, 'RK45', args=(p,))

如果需要输出指定时间点的计算结果,再显式传入排序后的t_eval参数即可,示例:sol = integrate.solve_ivp(pff, t_span, x_0, 'RK45', t_eval=np.linspace(0,20,100), args=(p,))

内容的提问来源于stack exchange,提问作者csekedat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 07:06:03