我必须找到一个向量和一个矩阵,将一些输入向量转换为其他向量。输入向量为: (−3, 4), (0, 8) i (6, 6),每个向量的输出为 (1, -4), (6, -4) i (8, 2)。
这就是我尝试过的: `
var('a b c d e f')
p = matrix([[-3,4],[0,8],[6,6]]).T
p2 = matrix([[1,-4],[6,-4],[8,2]]).T
q = vector([a,b])
t = matrix([[c,d],[e,f]])
eqs = [p2[i,j] == q[i] + t[i,:]*p[:,j] for i in range(2) for j in range(2)]
show(eqs)
solve(eqs,[a,b,c,d,e,f])
但是当我说 show(eqs) 时,输出是 [False,False,False,False] 而不是实际的方程。为什么?
我已经尝试过上面的代码。我期望一些反馈可以让我理解代码中的错误。
问题是您要添加标量和矩阵:
p2[i,j]
是标量,q[i]
也是标量,但t[i,:]*p[:,j]
是1x1
矩阵:type(p2[1,1])
将返回<class 'sage.rings.integer.Integer'>
,而type(q[0])
将返回返回 <class 'sage.symbolic.expression.Expression'>
,但是 type(t[i,:]*p[:,j])
将返回 <class 'sage.matrix.matrix_symbolic_dense.Matrix_symbolic_dense'>
。尝试使用该矩阵中的唯一条目,通过显式拉出 [0,0]
条目或将 t
的行和 p2
的列转换为向量并使用点积:use
eqs = [p2[i,j] == q[i] + (t[i,:]*p[:,j])[0,0] for i in range(2) for j in range(2)]
或
eqs = [p2[i,j] == q[i] + t[i]*p.transpose()[j] for i in range(2) for j in range(2)]