如何通过RealMatrix乘以RealVector?

时间:2015-10-22 07:40:21

标签: java apache-commons-math

如何将给定RealVector乘以RealMatrix?我在两个类上都找不到任何“乘法”方法,只有preMultiply,但它似乎不起作用:

// point to translate
final RealVector p = MatrixUtils.createRealVector(new double[] {
        3, 4, 5, 1
});

// translation matrix (6, 7, 8)
final RealMatrix m = MatrixUtils.createRealMatrix(new double[][] {
        {1, 0, 0, 6},
        {0, 1, 0, 7},
        {0, 0, 1, 8},
        {0, 0, 0, 1}
});

// p2 = m x p
final RealVector p2 = m.preMultiply(p);
// prints {3; 4; 5; 87}
// expected {9; 11; 13; 1}
System.out.println(p2);

请将实际结果与预期结果进行比较。

是否还有一种方法可以将Vector3D乘以4 x4 RealMatrix,其中w组件被丢弃? (我不是在寻找自定义实现,而是在库中已经存在的方法)。

1 个答案:

答案 0 :(得分:0)

preMultiply不会向您m x p提供p x m。这适用于您的问题,但不适用于您的评论// p2 = m x p

要获得您想要的结果,您有两个选择:

  1. 使用生成RealMatrix#operate(RealVector)的{​​{1}}:

    m x p
  2. 在预乘之前转置矩阵:

    RealVector mxp = m.operate(p);    
    System.out.println(mxp);    
    
  3. 结果:

      

    {9; 11; 13; 1}