我想将矩阵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]];
如何更有效地做到这一点?
transpose(res)[1];
-> [a*w+c*t+b*k,d*w+f*t+e*k,g*w+r*t+h*k]
此函数返回矩阵的第 i 列类似于 Matlabs M(:,i(
col(M,i) :=
block(
return(transpose(transpose(M)[i]))
)$
此函数返回矩阵的第 i 行,类似于 Matlabs M(i,:)
row(M,i) :=
block(
return(transpose(transpose(M[i])))
)$
为了完整起见,只需添加此内容,以防其他人有相同的问题。
首先,我相信OP中定义的V
实际上是一个list
而不是vector
,根据Maxima的定义;然而,在任何一种情况下,方法都是相同的:
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 */
(输出 3 也是如此(。