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



我想将矩阵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 也是如此(。

相关内容

  • 没有找到相关文章

最新更新