solve
只給出了符號解決方案,所以如果它找不到解決方案的封閉形式,它不會返回它。如果你只關心數字解決方案,你想在SymPy中使用nsolve
,或者你可以使用更多的面向數字的Python庫。例如
sympy.nsolve(n*9**5 - 10**n-1, n, 5)
會給你你正在尋找的解決方案。
使用solve
的問題是,存在無窮多個溶液,每個對應於LambertW功能的一個分支。有關完整的解決方案集,請參閱WolframAlpha。不幸的是,only the principal branch of LambertW is implemented in SymPy。
在修復此問題之前,另一種解決問題的方法是使用mpmath.lambertw
手動評估在另一分支上由solve
返回的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
使用mpmath使用-1
分支來評估LambertW
函數。 "mpmath"
告訴它將mpmath用於解決方案中的任何其他功能。
不知道爲什麼它不會呈現該URL。 – asmeurer
顯然,您不必像我最初認爲的那樣使用私有API。如果您碰巧讀到我最初寫的內容,請參閱編輯的解決方案。 – asmeurer