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

求解隐式方程:如何正确编写scipy.optimize.fsolve调用代码?

正确调用scipy.fsolve的写法

原代码的问题

原调用语句chii = sp.optimize.fsolve(chiht(chi,3,1,1,1,1), 1)存在两个核心错误:

  1. 直接执行了chiht(chi,...),但chi并未定义,会触发NameError;同时fsolve要求第一个参数是函数对象,而非函数执行后的返回值。
  2. chiht函数除了待求解的chi,还有多个固定参数,需要通过正确方式传递给fsolve,不能直接在函数调用里硬塞。

两种正确写法

方法1:用lambda表达式包装函数

通过lambda绑定固定参数,只将chi作为fsolve的求解变量暴露出来:

chii = sp.optimize.fsolve(lambda chi: chiht(chi, 3, 1, 1, 1, 1), 1)

方法2:利用fsolve的args参数传递额外参数

fsolve支持通过args参数传入函数的固定参数,参数顺序要和chiht定义中除chi外的参数顺序一致:

chii = sp.optimize.fsolve(chiht, 1, args=(3, 1, 1, 1, 1))

修正后的完整代码示例

import scipy as sp
import numpy as np

TC=315
H=1000

def chiht(chi, T, a, b, gamma, beta):
    global H, TC
    return a*(T-TC)*chi**(1/gamma)+b*chi**(1/gamma)*chi**(1/beta)*H**(1/beta)-1

# 两种写法二选一即可
# chii = sp.optimize.fsolve(lambda chi: chiht(chi, 3, 1, 1, 1, 1), 1)
chii = sp.optimize.fsolve(chiht, 1, args=(3, 1, 1, 1, 1))

print(chii)
print(chiht(chii,3,1,1,1,1))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 19:53:17