Мне удалось умножить матрицу на вектор при работе с cgemv
функцией BLAS lvl 2 в Lapack, но когда я пытаюсь транспонировать, я получаю неправильный ответ. Можете ли вы указать мне на мою ошибку? (На самом деле я использую оболочку C, а не FORTRAN.)
я пытаюсь
| 4+i 3 | | 3+2i | | 4+i 3 |^T | 3+2i |
| 14+3i 2 | * | 2 | (AND) | 14+3i 2 | * | 2 |
Чтобы было ясно, первый преуспевает. Второй дает неверный вывод.
/* config variables */
char normal = 'N';
char transpose = 'T';
integer m = 2;
complex alpha = {r:1,i:0};
complex beta = {r:0,i:0};
integer one = 1;
/* data buffers */
complex a[4] = {(complex){r:4, i:1},(complex){r:14, i:3},(complex){r:3, i:0},(complex){r:6, i:0}};
complex x[2] = {(complex){r:3, i:2},(complex){r:2, i:0}};
complex y[2];
/* execution */
cgemv_(&normal, &m, &m, &alpha, &a[0], &m, &x[0], &one, &beta, &y[0], &one);
cgemv_(&transpose, &m, &m, &alpha, &a[0], &m, &x[0], &one, &beta, &y[0], &one);
После первого вызова cgemv_
y
содержит 16.0000+11.0000i 48.0000+37.0000i
, что MATLAB подтверждает правильность.
Но после второго вызова cgemv_
y
содержит 38.0000+17.0000i 21.0000+6.0000i
, тогда как MATLAB говорит, что должно быть 42.0000-1.0000i 21.0000+6.0000i
. Я понятия не имею, что может быть не так.