SymPy:如何使`nsolve`返回带有找到的解决方案的字典

时间:2017-03-15 17:32:00

标签: python sympy solver

我想使用nsolve作为solve的后备,并希望使用dict = True使solve返回包含找到的解决方案和相应变量的字典。但是,nsolve似乎没有此选项。

这就是我使用的解决方法:

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 个答案:

答案 0 :(得分:1)

nsolve没有dict选项。如果您想申请一个,您应该在issue tracker中打开一个功能请求,或者执行它的拉取请求。