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

调用solve_ivp报错TypeError: 'numpy.ndarray' object is not callable如何解决

问题定位
  • 数组索引语法错误:numpy数组取元素需使用方括号[],你代码中x(0)、x(1)使用了函数调用的圆括号语法,而solve_ivp传入的状态变量x是numpy.ndarray类型,不是可调用对象,这是触发TypeError: 'numpy.ndarray' object is not callable的直接原因。
  • 初始状态维度不匹配:你定义的初始值x_0 = np.zeros([0,])是长度为0的空数组,但你的微分方程包含2个状态变量,初始值必须为长度为2的数组。
  • 返回值维度冗余:eqs函数返回的数组多嵌套了一层方括号,solve_ivp要求微分方程返回一维数组,当前返回的二维列向量会触发后续维度不匹配错误。
  • 模块命名冲突:代码中int.solve_ivp的int是Python内置的整数类型,你需要修正scipy.integrate模块的导入命名,同时需要显式导入numpy。
修复后的完整代码
import numpy as np
from scipy.integrate import solve_ivp

# 阈值判断函数
f = lambda x, thresh: x >= thresh
# 时间窗函数,t在[2,4]区间返回1,否则返回0
z = lambda t: np.multiply((t >= 2), (t <= 4))

# 阈值参数
z_thresh = 0.5
y_thresh = 0.5
x_thresh = 0.5

def eqs(t, x):
    # 修正数组索引为方括号,返回一维数组
    return np.array([
        (1 - np.multiply((1 - f(z(t), z_thresh)), (1 - f(x[1], y_thresh)))) - x[0],
        (1 - np.multiply((1 - f(z(t), z_thresh)), (1 - f(x[0], x_thresh)))) - x[1]
    ])

# 初始值改为长度为2的数组
x_0 = np.array([0.0, 0.0])
# 调用solve_ivp,时间范围为[0,6]
sol = solve_ivp(eqs, [0, 6], x_0)

内容的提问来源于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 06:45:03