这是我做的一个求e^(-n) N=16的程序 怎么算出的结果和答案不同啊
帮下 谢谢
频谱计算的完整C程序为
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<process.h>
#define PI 3.1415926
float x[1024],y[1024],am[1024];
void main()
{
int l,N,i;
float a;
void put_in(int N); %*输入函数*%
void re_bit(int N); %*倒序重排*%
void butterfly(int l); %*蝶形算法*%
printf("input l(l<=10)=");
scanf("%d",&l);
N=(int)(pow(2,l));
put_in(N);
re_bit(N);
butterfly(l);
for(i=0;i<N;i++)
printf("%6.4f+i%6.4f\n",x[i],y[i]); %*FFT结果*%
printf("\n\n");
getchar();
for(i=0;i<N;i++)
{
am[i]=sqrt(x[i]*x[i]+y[i]*y[i]); %*其幅度谱*%
printf("%6.4f\n",am[i]);
}
printf("\n\n");
getchar();
}
void butterfly(int l)
{
int i,j,r,m1,m2,m3,m4;
int k1,k2;
int N;
float u,v;
N=(int)(pow(2,l));
for(i=0;i<l;i++)
{
m1=(int)(pow(2,i));
m2=2*m1;
m3=N/m2;
for(j=0;j<m3;j++)
{
m4=j*m2;
for(r=0;r<m1;r++)
{
k1=m4+r;
k2=k1+m1;
u=x[k2]*cos(2*PI*r/m2)+y[k2]*sin(2*PI*r/m2);
v=y[k2]*cos(2*PI*r/m2)-x[k2]*sin(2*PI*r/m2);
x[k2]=x[k1]-u;
y[k2]=y[k1]-v;
x[k1]=x[k1]+u;
y[k1]=y[k1]+v;
}
}
}
}
void re_bit(int N)
{
int i,j,M,s;
float a;
M=N/2;
i=0;
for(j=1;j<N;j++)
{
s=M;
while(i>=s)
{
i=i-s;
s=s/2;
}
if(j<i)
{
a=x[j];x[j]=x[i];x[i]=a;
a=y[j];y[j]=y[i];y[i]=a;
}
}
}
void put_in(int N)
{
int i;
for(i=0;i<N;i++)
{
x[i]=exp(-i);
y[i]=0.0;
}
}
[此贴子已经被作者于2007-6-10 23:26:11编辑过]