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

solve_ivp报错:float()参数必须是字符串或数字而非'function'

问题分析与修复方案

错误原因

  • fun函数返回的是lambda函数,但solve_ivp要求传入的微分方程右侧函数必须直接返回当前状态的导数数组,而非另一个函数,这会导致求解器无法正确计算导数,引发错误。
  • fun内部的lambda重复定义t, s参数,覆盖了外部传入的参数,逻辑冗余且易出错。
  • fun2中的t参数未被实际使用,属于冗余参数。

修正后的代码

import numpy as np
from scipy.integrate import solve_ivp

def fun(t, s, rho_0, rho_1):
    # 直接计算并返回导数,不再返回lambda
    mat = np.array([[0.775416, 0], [0, 0.308968]])
    return np.dot(mat, s) + np.array([rho_0, rho_1])

def fun2(rho_0, rho_1):
    t_eval = np.arange(0, 5)
    res = solve_ivp(fun, [0, 5], y0=[0, 0], t_eval=t_eval, args=(rho_0, rho_1), vectorized=True)
    return res.y[1]

# 调用时无需传入冗余的t参数
print(fun2(rho_0=0.0099532, rho_1=0.001699))

关键改动说明

  • 重构fun函数:删除返回lambda的逻辑,直接计算导数数组,完全符合solve_ivp对右侧函数的要求。
  • 优化矩阵定义:将一维数组改为直观的二维矩阵形式,省略冗余的reshape操作。
  • 移除冗余参数:删除fun2中未使用的t参数,调用时也无需传入。
  • 对齐参数顺序:fun的参数顺序t, s, *args严格匹配solve_ivp的调用逻辑,确保额外参数rho_0、rho_1能正确传入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 22:35:20