Python Sympy:用数字求符号函数的根

Python Sympy:用数字求符号函数的根,python,sympy,Python,Sympy,我想找到一个函数的根。到目前为止,即使是Mathematica也无法从解析的角度找到根,所以从数值上来说是可以的(但请注意,我很高兴在这个问题上感到惊讶) 文档中的示例都提到了“实”函数、lambda函数,并且没有充分解决这个问题(或者我理解得太慢)。下面是一个简单的用例: from sympy import * p, r, c, y, lam, f = symbols('p r c y lambda f') priceCDF = (c*lam*p + c*r - lam*p*r - p*r +

我想找到一个函数的根。到目前为止,即使是Mathematica也无法从解析的角度找到根,所以从数值上来说是可以的(但请注意,我很高兴在这个问题上感到惊讶)

文档中的示例都提到了“实”函数、lambda函数,并且没有充分解决这个问题(或者我理解得太慢)。下面是一个简单的用例:

from sympy import *
p, r, c, y, lam, f = symbols('p r c y lambda f')
priceCDF = (c*lam*p + c*r - lam*p*r - p*r + r*(c - p)*LambertW(-exp((-c*lam*p - c*r + lam*p*r + lam*r*(c - p) + p*r)/(r*(c - p))), -1))/(lam*r*(c - p))
priceCDFplot = priceCDF.subs(r, 2).subs(c, 0.5).subs(lam, 1)
mpmath.findroot(priceCDFplot, 0.8)

这给了我
TypeError:“Mul”对象不可调用
。我错了什么,我如何从数字上找到根?我如何从分析上找到它?

如果你想使用
mpmath.findroot
,你需要将SymPy表达式转换成mpmath表达式。最简单的方法是使用
lambdify(p,priceCDF,'mpmath')
(我假设
p
是您要求解的变量)

另一种解决方案是使用直接作用于Symphy表达式的
symphy.nsolve