ошибка: нет соответствия для оператора * (типы операндов: «QGenericMatrix & lt; 4, 4, float & gt;’ и «QGenericMatrix & lt; 4, 3, float & gt;»)

Я пытаюсь умножить две матрицы следующим образом:

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;

Однако я получаю сообщение об ошибке:

ошибка: нет совпадения для оператора * (типы операндов: QGenericMatrix<4, 4, float> ’и‘ QGenericMatrix<4, 3, float> ’)


Есть этот оператор для умножения двух экземпляров QGenericMatrix, но я запутался и не уверен, как использовать его со своим NNxM2 а также M1xNN,


ОБНОВИТЬ

По предложению @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

Решение

В математике порядок умножения должен быть MxP раз PxN производить MxN товар. Другими словами, внутренние размеры матриц должны совпадать.

Тем не менее, документация для QGenericMatrix<M1, M2, TT> operator* состояния:

Возвращает произведение матрицы N1xM2 m1 и матрицы M1xNN m2 для получения результата матрицы M1xM2.

Это означает, что для того, чтобы получить результат умножения A а также Bнадо сначала написать 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
)
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]