我有一个双矩阵,我希望它的元素将它们传递给复杂的矩阵。 我想用铸造。 例如,对于双矩阵的每个偶数元素,我填充复数矩阵的实部和每个奇数元素,虚数。
我正在尝试以下代码,但我没有复杂矩阵的结果(所有元素都为零)。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct{
double re,im;
}
myComplex;
int main(int argc, const char* argv[]) {
int N=2;
double * theDouble=(double*)malloc(2*N*N*sizeof(double));
for (int i=0;i<N;i++){
for (int j=0;j<N;j++){
theDouble[i*N+j]=i+j;
}
}
for (int i=0;i<N;i++){
for (int j=0;j<N;j++){
printf("\nmydouble=%f\t",theDouble[i*N+j]);
}
printf("\n");
}
myComplex * theComplex;
theComplex= (myComplex *)malloc(N*N*sizeof(myComplex));
//theDouble= (double *)theComplex;
for (int i=0;i<N;i++){
for (int j=0;j<N;j++){
theComplex[i*N+j].re=theDouble[(i*N+j)*2];
}
}
//fill imaginary part
for (int i=0;i<N;i++){
for (int j=0;j<N;j++){
theComplex[i*N+j].im=theDouble[(i*N+j)*2+1];
}
}
for (int i=0;i<N;i++){
for (int j=0;j<N;j++){
printf("\nComplex_real=%f\t",theComplexPtr[i*N+j].re);
printf("\nComplex_imag=%f\t",theComplexPtr[i*N+j].im);
}
printf("\n");
}
return 0;
}
此外,还有更快(更好)的方法吗? (带铸造)。
答案 0 :(得分:0)
如果要为大小为N x N的myComplex
矩阵创建数据,则双精度数必须为2 x N x N.
如果我理解正确,复矩阵的第i行和第j列的数据位于(i * N + j)* 2和(i * N + j)* 2 + 1的位置在双数组中。
此外,正如其他人已经指出的那样,删除行theDouble= (double *)theComplex;
。