Я довольно новичок в C ++ и пытаюсь использовать библиотеки LAPACK для умножения матриц.
Я попытался запустить рутину dgemm, которая приведена ниже. Я ожидаю выхода A * B. но каждый раз получаю ответ B * A. Так работает рутина или что-то не так с моим кодом.
Мой код:
#include "stdafx.h"#include<iostream>
using namespace std;
extern "C" void dgemm_(const char *TRANSA, const char *TRANSB, const int *M, const int *N, const int *K, double *ALPHA, double *A, const int *LDA, double *B, const int *LDB, double *BETA, double *C, const int *LDC);
int main(void)
{
double A[4] = {1,2,3,4};
double B[4] = {5,6,7,8};
char TRANS = 'N';
int M = 2;
int N = 2;
int K = 2;
double ALPHA = 1.0;
int LDA = 2;
int LDB = 2;
double BETA = 0.0;
double C[4];
int LDC = 2;
dgemm_(&TRANS, &TRANS, &M, &N, &K, &ALPHA, A, &LDA, B, &LDB, &BETA, C, &LDC);
cout << C[0] << endl;
cout << C[1] << endl;
cout << C[2] << endl;
cout << C[3] << endl;
getchar();
return 0;
}
Любые материалы будут очень полезны.
Я не изучил детали вашего звонка в dgemm, и я не могу сказать, как вы интерпретируете матрицу результатов. Но вполне вероятно, что вы где-то путаете основные и основные ряды интерпретаций. Скорее всего, для расчета используется col major, но вы предполагаете, что строка Major.
Других решений пока нет …