当我为起始向量提供一个 Matrix
时,我在使用 nsolve
时遇到了 TypeError
。值得注意的是,nsolve
非常适合方程是一个 Matrix
表达式的事实。这是一个基本示例:
import sympy as sy
v = sy.Matrix(sy.symarray("v", (2,)))
w = sy.Matrix([17, 23])
equation = v - w
以下行给出TypeError:无法从 Matrix([[17],[23]]) 创建 mpf
:
sy.nsolve(equation, v, w)
以下行是一个笨拙的解决方法,它提供了正确的输出,Matrix([[17.0],[23.0]])
:
sy.nsolve(equation, v, w.T.tolist()[0])
还有比这个解决方法更好的解决方案吗?
最佳答案
考虑到以下情况,您的解决方法是必要的:
nsolve
将x0
参数直接传递给 this line 上的mpmath.findroot
findroot
仅支持x0
中满足isinstance(x0, (list, tuple))
的迭代,this line 。此外,它必须是一个平面元组或列表;其元素在后续x0 = [ctx.convert(x) for x in x0]
中被假定为标量。
SymPy 矩阵不是 list
或 tuple
的实例。此外,w.tolist()
还不够,因为结果列表是嵌套的。因此需要 w.T.tolist()[0]
。
现在是an open issue在 SymPy 存储库中。
关于matrix - sympy nsolve 矩阵起始向量的类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51431487/