我有一个函数,我想找到它的根。到目前为止,即使是Mathematica也无法通过解析的方法找到根,所以在数值上是可以的(但是,我很高兴在这个问题上感到惊讶)。
文档中的示例都引用了“real”函数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' object is not callable
。我错了什么,我如何从数值上找到根-,我如何从分析上找到它? 最佳答案
如果要使用mpmath.findroot
,则需要将SymPy表达式转换为mpmath表达式最简单的方法是使用lambdify(p, priceCDF, 'mpmath')
(我假设p
是您要求解的变量)。
另一个解决方案是使用sympy.nsolve
,它直接作用于symphy表达式。