2017-03-15 10 views
1

で辞書を返すnsolve`にするにはどうすればsolveにフォールバックとしてnsolveを使用したいし、見つかったソリューションと対応する変数で辞書を返すsolve作るためにdict = Trueを使用したいです。ただし、nsolveにはこのオプションがないようです。SymPy: `見つけソリューション

これは私が回避策として使用しているものです:

from sympy import * 

def nsolve(equations, variables, guesses, **flags): 
    from sympy import nsolve as originalnsolve 
    result = originalnsolve(equations, variables, guesses, **flags) 
    if "dict" in flags and flags["dict"]: 
     return [dict(zip(variables, [float(value) for value in result]))] 
    else: 
     return result 

x, y = symbols("x y") 
equations = [Eq(2*x+y, 3), Eq(y-x, 1)] 
variables = [x, y] 
guesses = [1, 1] 

print("solve with dict = True produces:\n%s\n" % solve(equations, variables, dict = True) + "The result is a dictionary, as needed\n") 
print("nsolve without dict = True produces:\n%s\n" % nsolve(equations, variables, guesses) + "nsolve doesn't return a dictionary\n") 
print("nsolve with dict = True produces:\n%s\n" % nsolve(equations, variables, guesses, dict = True) + "My workaround wrapper function returns a dictionary\n") 

出力は次のようになります。

solve with dict = True produces: 
[{x: 2/3, y: 5/3}] 
The result is a dictionary, as needed 

nsolve without dict = True produces: 
[0.666666666666667] 
[ 1.66666666666667] 
nsolve doesn't return a dictionary 

nsolve with dict = True produces: 
[{x: 0.6666666666666666, y: 1.6666666666666667}] 
My workaround wrapper function returns a dictionary 

私の質問:

  • nsolve辞書を返すもっと簡単な方法がないのですか?

  • もしそうでない場合は、私のアプローチに何か問題がありますか?

答えて

1

nsolvedictオプションがありません。リクエストする場合は、issue trackerに機能要求を開くか、機能リクエストを実装するプルリクエストを開く必要があります。

+1

ご回答ありがとうございます。私はちょうどそれを試みるかもしれない。 ;-) [#12397](https://github.com/sympy/sympy/pull/12397) – Jayjayyy

関連する問題