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"