2

我正在尝试使用 cgemv_ 函数将复数矩阵与复数向量相乘,但结果不是我所期望的。我尝试使用简单的单位矩阵乘法运行该函数:

complex *A, *B, *C;
int dimM, dimK, i;
char TRANS;
complex ALPHA, BETA;
int LDA, INCX, INCY;

dimM = 3;
dimK = 3;

A = new complex[dimM*dimK];
B = new complex[dimK];
C = new complex[dimM];

A[0] = complex(1.0, 0.0);
A[1] = complex(0.0, 0.0);
A[2] = complex(0.0, 0.0);
A[3] = complex(0.0, 0.0);
A[4] = complex(1.0, 0.0);
A[5] = complex(0.0, 0.0);
A[6] = complex(0.0, 0.0);
A[7] = complex(0.0, 0.0);
A[8] = complex(1.0, 0.0);

B[0] = complex(1.0, 0.0);
B[1] = complex(3.0, 0.0);
B[2] = complex(2.0, 0.0);

TRANS = 'N';
ALPHA = complex(1.0, 0.0);
BETA  = complex(0.0, 0.0);
LDA   = dimM;
INCX  = 1;
INCY  = 1;

cgemv_(&TRANS,&dimM,&dimK,&ALPHA,A,&LDA,B,&INCX,&BETA,C,&INCY);

for(i=0 ; i < dimM ; i++) {
  printf("(%lf, %lf)\n", C[i].real(), C[i].imag());
}

但我得到的结果不是我所期望的 (1, 3, 2) ,而是:

(-19392.000000, 0.000000)
(-63616.000000, 0.000000)
(0.000000, 0.000000)

我尝试使用的参考:http: //www.netlib.org/lapack/explore-html/d6/dee/group__complex__blas__level2.html#ga0983da08821bec7701e90fb1e65c8cd7

4

0 回答 0