Мой последний вопрос был не очень понятен. Так что публикуем еще раз.
Я пытаюсь сделать матричное умножение с использованием рутины BLAS dgemm. Поскольку размер массива, который я хочу ввести в dgemm, не является фиксированным, я создаю массив переменного размера. Но это, похоже, не работает, так как я продолжаю получать ошибки исключений.
Мой код, как показано ниже:
#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)
{
int MatSize = 2;
double **A= new double *[MatSize];
double **B= new double *[MatSize];
double **C= new double *[MatSize];
for (int i=0; i<MatSize; i++)
{
A[i] = new double[MatSize];
B[i] = new double[MatSize];
C[i] = new double[MatSize];
}
A[0][0] = 1;
A[0][1]= 2;
A[1][0] = 1;
A[1][1]=2;
B[0][0] = -2;
B[0][1]= 3;
B[1][0]= 2;
B[1][1]= 2;
char TRANS = 'N';
char TRANS2 = 'N';
double ALPHA = 1;
double BETA = 0;
dgemm_(&TRANS, &TRANS, &MatSize, &MatSize, &MatSize, &ALPHA, A, &MatSize, B, &MatSize, &BETA, C, &MatSize);
cout << C[0][0] << C[0][1] << endl;
cout << C[1][0] << C[1][1] << endl;
getchar();
return 0;
}
Любые материалы будут очень полезны.
Вы пытаетесь передать массив массивов в dgemm, то есть массив указателей (на массивы). Конечно, это невозможно, вы должны передать массив значений типа double.
Увидеть Вот для заголовка dgemm требуется двойной *, а не двойной **.
Других решений пока нет …