4

特定の方程式を満たすすべての実数を見つけたいです。Mathematicaでこれらの値を見つけるのに問題はありません

Solve[n*9^5 == 10^n-1, n]

0と5.51257 の両方が得られます。しかし、SymPy (0.7.3; Python 2.7.5) を使用するとsolve

n = sympy.symbols('n')
sympy.solve(n*9**5 - 10**n-1, n)

私は 0 のように見えるものだけを取得しているようで、2 番目の値は取得していません。これは、私が本当に求めているものです。

探している重要なソリューションを SymPy で生成するにはどうすればよいですか? 代わりに使用すべき別の関数またはパッケージはありますか?

4

1 に答える 1

4

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"

于 2013-11-05T00:44:16.333 に答える