我想将矩阵M乘以向量V.应该是一个向量。 我写了
M:matrix([a,b,c],[d,e,f],[g,h,r]);
V:[w,k,t];
res:M.V;
我得到了列矩阵。
我想获得列表[a*w+c*t+b*k,d*w+f*t+e*k,g*w+r*t+h*k]
。
好。我必须写res:[res[1][1],res[2][1],res[3][1]];
如何更有效地做到这一点?
答案 0 :(得分:2)
transpose(res)[1];
-> [a*w+c*t+b*k,d*w+f*t+e*k,g*w+r*t+h*k]
答案 1 :(得分:0)
此函数返回矩阵的第i列 类似于Matlabs M(:,i)
col(M,i) :=
block(
return(transpose(transpose(M)[i]))
)$
此函数返回类似于Matlabs M(i,:)的矩阵的第i行
row(M,i) :=
block(
return(transpose(transpose(M[i])))
)$
答案 2 :(得分:0)
为完整性起见,只需添加此内容,以防其他人有相同的问题。
首先,我相信在OP中定义的V
实际上是Maxima定义的list
而非vector
;但是,无论哪种情况,方法都是相同的:
M:matrix([a,b,c],[d,e,f],[g,h,r]);
V:[w,k,t]; /* V is a list */
v1:transpose([w,k,t]); /* v1 is a column vector */
v2:matrix([w],[k],[t]); /* v2 is a column vector */
在所有情况下,请使用args
:
output1:args(M.V); /* returns a list of lists */
output2:args(M.v1); /* returns a row vector */
output3:args(M.v2); /* returns a row vector */
将返回看起来 相同但行为不完全相同的对象。例如:
output1[1,1]; /* will return an error, because `output1` is a list, not a matrix */
output1[1][1]; /* will return the first (only) entry of the first list */
output2[1,1]; /* returns the 1-1 element of the vector `output2` */
output2[1][1]; /* isn't defined, because `output2` is a vector, not a list */
(对于output3同样如此)。