如何在千里马中从矩阵中获取向量

时间:2017-05-09 13:19:30

标签: matrix vector linear-algebra maxima

我想将矩阵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]]; 如何更有效地做到这一点?

3 个答案:

答案 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同样如此)。