lambdify转换sympy表达式供scipy.optimize调用时报Symbol无sin属性错误
错误原因
scipy.optimize.fsolve的第二个入参要求传入数值类型的初始迭代猜测值,你代码中传入的是Sympy定义的符号对象a。你通过lambdify生成的test函数绑定了Numpy后端,接收符号类型输入时,Numpy的数值运算方法无法处理Sympy的Symbol类型,直接触发对应报错。- 代码导入逻辑存在命名空间覆盖隐患:先后执行
import scipy as sc、import scipy.optimize as sc,会将sc变量原本指向的scipy根模块覆盖为scipy.optimize模块,后续如果需要调用scipy根模块下的其他方法会出现异常。
修正后代码
import numpy as np import sympy as sy import scipy.optimize as opt a = sy.symbols('a') G = sy.sin(a) test = sy.lambdify(a, G, "numpy") # 传入数值类型的初始猜测值,比如1.0 solve_res = opt.fsolve(test, 1.0) print(solve_res)
运行后会输出结果[3.14159265],符合sin(π)=0的方程解预期。
内容的提问来源于stack exchange,提问作者Katoon
相关产品推荐
相关产品推荐

