sympy nsolve typeError 与矩阵起始向量
sympy nsolve typeError with Matrix starting vector
当我给它一个 Matrix
作为起始向量时,我得到一个 TypeError
和 nsolve
。值得注意的是,nsolve
与方程是 Matrix
表达式这一事实完全没问题。这是一个基本示例:
import sympy as sy
v = sy.Matrix(sy.symarray("v", (2,)))
w = sy.Matrix([17, 23])
equation = v - w
下一行给出了一个TypeError: cannot create mpf from Matrix([[17],[23]])
:
sy.nsolve(equation, v, w)
下一行是一个笨拙的解决方法,它给出了正确的输出,Matrix([[17.0],[23.0]])
:
sy.nsolve(equation, v, w.T.tolist()[0])
是否有比此解决方法更好的解决方案?
鉴于以下情况,您的解决方法是必要的:
nsolve
在 this line 上将 x0
参数直接传递给 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
作为起始向量时,我得到一个 TypeError
和 nsolve
。值得注意的是,nsolve
与方程是 Matrix
表达式这一事实完全没问题。这是一个基本示例:
import sympy as sy
v = sy.Matrix(sy.symarray("v", (2,)))
w = sy.Matrix([17, 23])
equation = v - w
下一行给出了一个TypeError: cannot create mpf from Matrix([[17],[23]])
:
sy.nsolve(equation, v, w)
下一行是一个笨拙的解决方法,它给出了正确的输出,Matrix([[17.0],[23.0]])
:
sy.nsolve(equation, v, w.T.tolist()[0])
是否有比此解决方法更好的解决方案?
鉴于以下情况,您的解决方法是必要的:
nsolve
在 this line 上将 findroot
仅支持x0
中满足isinstance(x0, (list, tuple))
、this line 的迭代器。此外,它必须是平面元组或列表;它的元素在随后的x0 = [ctx.convert(x) for x in x0]
. 中被假定为标量
x0
参数直接传递给 mpmath.findroot
SymPy 矩阵不是 list
或 tuple
的实例。此外, w.tolist()
是不够的,因为结果列表是嵌套的。因此需要 w.T.tolist()[0]
.
现在 an open issue 在 SymPy 存储库中。