我试图用sympy来帮助我在矩阵表达式中分离出一个向量。我写了这段代码:
import sympy
from sympy import symbols, MatrixSymbol, Matrix
from sympy import Identity
Xp = MatrixSymbol('Xp', 3,1)
t = MatrixSymbol('t', 3,1)
n = MatrixSymbol('n', 3,1)
H = n.T*Xp*Identity(3) - t*n.T
我的意图是孤立n。我不确定sympy是否能做到这一点,但我已经得到了一个' ShapeError:Matrices n' * Xp和我没有对齐',我认为这个错误不应该发生在n&# 39; * Xp是标量,因此它应该能够与矩阵相乘。
如何让表达式n.T*Xp*Identity(3)
有效?
并且,能否同意帮我隔离这个等式中的向量n?
答案 0 :(得分:1)
n.T*Xp*Identity(3)
具有维度签名
(1,3)*(3,1)*(3,3)
显然无效。
n*Xp.T*Identity(3)
可行。
如果你想解决
H=(n.T*X)*I-t*n.T
对于n
,第一个注意事项是,这并不总是可行的。假设存在解决方案,请注意
1/(t.T*t)*t.T*H=1/(t.T*t)*(n.T*X)*t.T-n.T
这样
n = a*t - b*H.T*t
其中a
未知且b=1/(t.T*t)
。插入原始等式给出
H = (a*t.T*X-b*t.T*H*X)*I - a*t*t.T + b*t*t.T*H
或
H - b*t*t.T*H +b*(t.T*H*X)*I = a*((t.T*X)*I - t*t.T)
在右侧矩阵的每个非平凡分量中将给出a
的值,但只有当所有这些值都相同时才存在解。