我的程序存在问题。我的代码的一般想法是将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。