Matrix 与矩阵symbol的同解

Matrix 与矩阵symbol的同解,matrix,sympy,equation,solver,Matrix,Sympy,Equation,Solver,我想数值求解一个包含矩阵符号的方程。以下是一个基本示例: import sympy as sy v = sy.MatrixSymbol('v', 2, 1) equation = (v - sy.Matrix([17, 23])).as_explicit() 我想要一些像: sy.nsolve(equation, v, sy.Matrix([0,0])) 但是因为nsolve不接受矩阵符号,我做了一个笨拙的变通方法,给出了矩阵([[17.0],[23.0]])的正确输出。: 本质上,我已经将

我想数值求解一个包含矩阵符号的方程。以下是一个基本示例:

import sympy as sy
v = sy.MatrixSymbol('v', 2, 1)
equation = (v - sy.Matrix([17, 23])).as_explicit()
我想要一些像:

sy.nsolve(equation, v, sy.Matrix([0,0]))
但是因为
nsolve
不接受矩阵符号,我做了一个笨拙的变通方法,给出了
矩阵([[17.0],[23.0]])的正确输出。

本质上,我已经将矩阵SYMBOL转换为符号矩阵,以使
nsolve
快乐

我有没有更好的办法

编辑:变通方法可以简化为:

vseq = sy.symbols('a b') #names must be distinct
sy.nsolve(equation.subs(v, sy.Matrix(vseq)), vseq, [0,0])

但是应该有一种更干净的方法将矩阵SYMBOL转换为符号序列,或者一开始就避免这样做。

更干净的方法是从
symarray
创建矩阵:

v = sy.Matrix(sy.symarray("v", (2,)))
equation = v - sy.Matrix([17, 23])
sy.nsolve(equation, v, [0, 0])

这里,
symarray
创建一个(NumPy)符号数组
[v_0,v_1]
,然后将其转换为矩阵。我们也可以使用sy.symarray(“v”,(2,1))所以它是一个双数组,但是由于symphy的
矩阵
构造函数对于1D输入很酷,所以这是不必要的

太好了,谢谢!我不确定我是否能完全按照你的建议去做,因为我正在处理的实际方程是通过一系列矩阵替换来构造的。据我所知,如果
v
w
是矩阵符号,则类似于
v.subs(v,w)
的东西可以工作,但如果它们是符号数组,则不行。但是行
varr=sy.Matrix(sy.symarray(“v”),(2,))
比我之前的行
vseq=sy.symbols(“ab”)
好得多。然后,在进行数值计算之前,您似乎必须用矩阵(symarray)替换矩阵symbols。根本原因是Symphy将方程式“打印”到Python lambda中,以传递给数值解算器,并且
lamdba v[0,0]:v[0,0]-17
不是有效的Python。可以说这是一个令人同情的错误;在这种情况下,它应该处理不同的代码打印,比如
lamdba v_0_0:v_0_0-17
是的,我现在基本上在做
sy.nsolve(等式subs(v,varr),varr[0,0])
v = sy.Matrix(sy.symarray("v", (2,)))
equation = v - sy.Matrix([17, 23])
sy.nsolve(equation, v, [0, 0])