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

如何在Python中向fsolve正确传递元组作为输入变量避免NameError

问题分析与解决

你的代码报错NameError: name 'myvar' is not defined,核心原因是函数f_nb的作用域内没有定义myvar变量,同时存在几个冗余/错误的写法:

  1. vss = ('myvar')定义的是字符串而非元组(元组需要加逗号:('myvar',)),且这个变量在代码中完全没用,可以直接删除。
  2. f_nb函数声明了可变参数*vss,但既没有使用该参数,也没有在函数内部定义myvar,导致引用未定义的变量。
  3. tryit函数里的myvar是局部变量,无法被f_nb访问,必须通过参数传递的方式把值传给f_nb。

修正后的代码

简化版(直接使用目标函数)

from scipy.optimize import fsolve

def f_nb(myvar):
    return 0.8 - myvar

# fsolve直接传入目标函数和初始猜测值
solz = fsolve(f_nb, 0.2)
print(solz)  # 输出: [0.8]

保留原函数结构的修正版

如果你想保留tryit的结构,只需确保f_nb正确接收参数:

from scipy.optimize import fsolve

def f_nb(myvar):
    nb = 0.8 - myvar
    return nb

def tryit(xx):
    zz = f_nb(xx)
    return zz

solz = fsolve(tryit, 0.2)
print(solz)

关键说明

  • 函数间的变量传递必须通过参数实现,不能直接引用其他函数的局部变量。
  • fsolve要求目标函数接收一个参数(待求解的变量),并返回该变量对应的函数值,当函数值为0时,对应的变量就是解。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 21:42:47