错误:与“ operator *”不匹配(操作数类型为“ QGenericMatrix <4,4,float>”和“ QGenericMatrix <4,3,float>”)

时间:2018-08-27 05:07:44

标签: c++ qt qgenericmatrix

我试图将两个矩阵相乘:

float values4x3[] = {
    3, 3, 3,
    1, 1, 1,
    2, 2, 2,
    1, 1, 1
};
QGenericMatrix< 4, 3, float > myMat4x3 (values4x3);

float values4x4[] = {
    3, 3, 3, 3,
    1, 1, 1, 1,
    2, 2, 2, 2,
    1, 1, 1, 1
};
QGenericMatrix< 4, 4, float > myMat4x4 (values4x4);

QGenericMatrix< 4, 3, float > product4x3 = myMat4x4 * myMat4x3;

qDebug() << __func__ << "product4x3 = " << product4x3;

但是,我收到错误消息:

  

错误:与“ operator *”不匹配(操作数类型为“ QGenericMatrix <4,4,float>”和“ QGenericMatrix <4,3,float>”)


this operator用于将QGenericMatrix的两个实例相乘,但是我很困惑,不确定如何将其与NNxM2M1xNN一起使用。


更新

按照@scopchanov的建议,我交换了两个矩阵,如下所示:

QGenericMatrix< 4, 3, float > product4x3 = myMat4x3 * myMat4x4;

现在,错误已解决,结果记录如下:

qDebug() << __func__ << "product4x3 = " << product4x3;

日志:

product4x3 =  QGenericMatrix<4, 3, float>(
    19        19        19        19         
    10        10        10        10         
    10        10        10        10         
)

上面的结果矩阵实际上是3x4!好吧,这有点令人困惑。

1 个答案:

答案 0 :(得分:1)

原因

在数学中,乘积阶数应为MxP乘以PxN乘以得出MxN乘积。换句话说,矩阵的内部尺寸必须一致。

但是,QGenericMatrix<M1, M2, TT> operator*的文档指出:

  

返回NNxM2矩阵m1和M1xNN矩阵m2的乘积以产生M1xM2矩阵结果。

这意味着,为了获得AB的相乘结果,应该先写B,然后写A

说实话,考虑到我们的习惯,我觉得这很奇怪。

解决方案

像这样交换矩阵的位置:

QGenericMatrix< 4, 3, float > product4x3 = myMat4x3 * myMat4x4;

结果

对于您给出的示例,结果是:

MainWindow product4x3 =  QGenericMatrix<4, 3, float>(
        19        19        19        19         
        10        10        10        10         
        10        10        10        10         
)