LAPACK Умножение матриц с помощью C++

Я новичок в С++ и пытаюсь использовать библиотеки LAPACK для умножения матриц. Я попытался запустить подпрограмму dgemm, которая приведена ниже. Я ожидаю результат A * B. но каждый раз получаю ответ Б*А. Это то, как работает рутина или что-то не так с моим кодом.

Мой код:

#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;
}

Любые материалы будут очень полезны.


person Tushar    schedule 05.04.2013    source источник
comment
Звучит как путаница col major и row major   -  person David Heffernan    schedule 05.04.2013
comment
@ Дэвид Хеффернан Я тоже подозреваю то же самое. Большое спасибо за ваш вклад. Можете ли вы добавить это как ответ?   -  person Tushar    schedule 08.04.2013
comment
DGEMM — это функция BLAS, а не LAPACK.   -  person Fred Foo    schedule 05.06.2014


Ответы (1)


Я не изучал детали вашего обращения к dgemm и не могу сказать, как вы интерпретируете матрицу результатов. Но вполне вероятно, что вы где-то смешиваете col major и row major интерпретации. Скорее всего, в расчете используется основной столбец, но вы предполагаете основной ряд.

person David Heffernan    schedule 08.04.2013
comment
Я изучил несколько деталей за последние пару дней, основываясь на ваших предложениях. dgemm — это процедура BLAS, основанная на Fortran. Таким образом, проблема основного столбца по сравнению с основным номером строки является определенной причиной. - person Tushar; 09.04.2013