Je réussis la multiplication matricielle-vectorielle en travaillant avec cgemv
une fonction BLAS lvl 2 dans Lapack, mais quand j'essaye la transposition, j'obtiens une mauvaise réponse. Pouvez-vous m'instruire dans mon erreur? (J'utilise en fait l'emballage C, non FORTRAN.)Multiplication matrice-vecteur BLAS vs multiplication de matrice-vecteur. On travaille; l'autre échoue
Je tentais
| 4+i 3 | | 3+2i | | 4+i 3 |^T | 3+2i |
| 14+3i 2 | * | 2 | (AND) | 14+3i 2 | * | 2 |
Pour être clair, le premier réussit. Le second donne une sortie incorrecte.
/* 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);
Après le premier appel cgemv_
, y
détient 16.0000+11.0000i 48.0000+37.0000i
, qui confirme Matlab être correcte.
Mais après le deuxième appel cgemv_
, y
détient 38.0000+17.0000i 21.0000+6.0000i
, alors que MATLAB dit qu'il devrait être 42.0000-1.0000i 21.0000+6.0000i
. Je n'ai aucune idée de ce qui pourrait être faux.
Le dernier élément de 'a' est défini sur "(complexe) {r: 6, i: 0}" mais différent de la première équation de la question ..? – roygvib