从double填充复杂矩阵

时间:2014-02-23 22:13:07

标签: c casting

我有一个双矩阵,我希望它的元素将它们传递给复杂的矩阵。 我想用铸造。 例如,对于双矩阵的每个偶数元素,我填充复数矩阵的实部和每个奇数元素,虚数。

我正在尝试以下代码,但我没有复杂矩阵的结果(所有元素都为零)。

#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;     
}

此外,还有更快(更好)的方法吗? (带铸造)。

1 个答案:

答案 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;