C - 不正确地复制2D阵列列

时间:2014-07-29 19:06:05

标签: c arrays multidimensional-array

我的程序存在问题。我的代码的一般想法是将FFTW3库与循环矩阵一起使用。它们由随机Toeplitz矩阵生成。由于FFT需要一个输入向量,我试图从我的循环矩阵中获得第一列,标记为aCirc。这将存储在名为aCol的向量中。但是,出于某种原因,我无法将aCirc的第一列正确复制到aCol中。复制到aCol的每个位置i的值看似随机。这是代码。用于复制第一列的方法是getCol。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include </cm/shared/apps/fftw/open64/64/3.2.2/include/fftw3.h>
#include <time.h>

void printMatrix(int n, double x[][n]);
void genToeplitz(int n, double x[][n]);

void genCirculant(int n, double x[][n], double y[][(2*n)]);
void genVector(int n, double * y0, double * y1);

void getCol(int n, double x[][(2*n)], double * y);


int main(){
        int n;
        printf("Enter a value of n (power of 2): \n");
        scanf("%i", &n);

        double aToep[n][n];
        double aCirc[(2*n)][(2*n)];
        double xVect[n];
        double yVect[(2*n)];
        double result[(2*n)];

        srand(time(NULL));
        genToeplitz(n, aToep);
        genVector(n, xVect, yVect);

        printMatrix(n, aToep);
        for(int i = 0; i < n; i++){
                printf("%i \n", xVect[i]);
        }

        printf("Converting to circulant matrix...\n");
        genCirculant(n, aToep, aCirc);

        printf("Retrieving first column of circulant.\n");

        double aCol[(2*n)];

        getCol((2*n), aCirc, aCol);

        printMatrix((2*n), aCirc);

        for(int j = 0; j < (2*n); j++){
                printf("%lf \n", aCol[j]);
        }

        printMatrix((2*n), aCirc);

        return(0);
}

//Extracts first column from circulant matrix
void getCol(int n, double x[][2*n], double * y){
        for(int i = 0; i < n; i++){
                y[i] = x[i][0];
        }
}

作为这导致问题的一个例子,这是一个示例输出。我提供了2作为n的值。

0.172651 0.283250 
0.678243 0.172651 

10 
-1431519232 
Converting to circulant matrix...
Retrieving first column of circulant.

0.172651 0.283250 0.000000 0.678243 
0.678243 0.172651 0.283250 0.000000 
0.000000 0.678243 0.172651 0.283250 
0.283250 0.000000 0.678243 0.172651 

0.172651 
0.000000 
0.000000 
0.000000 

0.172651 0.283250 0.000000 0.678243 
0.678243 0.172651 0.283250 0.000000 
0.000000 0.678243 0.172651 0.283250 
0.283250 0.000000 0.678243 0.172651 

我究竟做错了什么?我的程序工作正常,直到添加getCol。我已经通过在其中使用printMatrix来验证aCirc是否正确传递给getCol。

0 个答案:

没有答案