solve
只给出符号解,所以如果它找不到解的封闭形式,它就不会返回它。如果您只关心数字解决方案,您希望在 SymPy 中使用 is nsolve
,或者您可以使用更面向数字的 Python 库。例如
sympy.nsolve(n*9**5 - 10**n-1, n, 5)
将为您提供您正在寻找的解决方案。
使用的问题solve
是有无穷多个解,每个解对应于 LambertW 函数的一个分支。完整的解决方案集参见WolframAlpha。不幸的是,只有 LambertW 的主要分支在 SymPy 中实现。
在解决此问题之前,解决此问题的另一种方法是手动评估solve
另一个分支上返回的 LambertW,使用mpmath.lambertw
. 最简单的方法是使用lambdify
:
s = sympy.solve(n*9**5 - 10**n-1, n)
import sympy.mpmath
# Replace -1 with any integer. -1 gives the other real solution, the one you want
lambdify([], s, [{'LambertW': lambda x: sympy.mpmath.lambertw(x, -1)}, "mpmath"])()
这给了[mpf('5.5125649309411875')]
.
字典告诉使用分支lambdify
评估LambertW
函数-1
,使用 mpmath。"mpmath"
告诉它对解决方案中可能存在的任何其他功能使用 mpmath 。