【问题标题】:How to get vector from matrix in Maxima如何从Maxima中的矩阵获取向量
【发布时间】:2017-05-09 13:19:30
【问题描述】:

我想将矩阵 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]]; 怎么做才更有效率?

【问题讨论】:

    标签: matrix vector linear-algebra maxima


    【解决方案1】:
    transpose(res)[1];
    
    -> [a*w+c*t+b*k,d*w+f*t+e*k,g*w+r*t+h*k]
    

    【讨论】:

      【解决方案2】:

      此函数返回矩阵的第 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])))
          )$
      

      【讨论】:

        【解决方案3】:

        为了完整起见,只需添加这个,以防其他人有同样的问题。

        首先,我相信 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 也是如此)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-12-29
          • 1970-01-01
          • 2017-11-18
          • 1970-01-01
          • 2021-03-20
          • 1970-01-01
          相关资源
          最近更新 更多