solve
は記号解のみを与えるため、解の閉形式が見つからない場合は返されません。数値解のみを気にする場合はnsolve
、SymPy で を使用するか、より数値指向の 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')]
ます。
ディクショナリは、mpmath を使用して、ブランチを使用して関数をlambdify
評価するように指示します。は、ソリューションに含まれる可能性のある他の関数に mpmath を使用するように指示します。LambertW
-1
"mpmath"