傅立叶级数显示 - dirtysalt的专栏 - CSDNBlog

来源:百度文库 编辑:神马文学网 时间:2024/04/25 12:58:58
/**//**//**//*利用门函数作为输入函数,开始时只需输入所需计算的傅立叶级数的次数*/
#define TIME_DENSITY 1200/*时间密度,作为积分的度量*/
#define PI 3.1415926
#define HEIGHT 10/*定义们函数的高度*/
#include 
#include 
#include 
/**//**//**//***********************************************/
double f_value[TIME_DENSITY];/**//**//**//*函数值*/
double fori_value[TIME_DENSITY];/**//**//**//*傅立叶级数所求得的值*/
double time[TIME_DENSITY]/**//**//**//*时间*/;
double max,min;/**//**//**//*在傅立叶级数中的最大和最小值*/
double time_upbound,time_downbound;/**//**//**//*时间的上限和下限*/
double time_start,time_end;/**//**//**//*时间的起始和中止*/
double time_width;/**//**//**//*时间的周期*/;
double time_span;/**//**//**//*时间的有效长度*/
double omega,time_step;
/**//**//**//****************************************/
void init()
/**//**//**//*设定好时间步长和函数值*/
/**//**//**//*设置傅立叶级数中的最大和最小值*/
/**//**//**//*设定时间的上下界,有效范围*/
...{
int i,start,end;
max=HEIGHT,min=0;
time_upbound=10,time_downbound=-10;
time_start=-5,time_end=5;
time_width=time_upbound-time_downbound;
time_span=time_end-time_start;
omega=2*PI/time_width;
time_step=time_width/TIME_DENSITY;
for(i=0;i...{
time[i]=time_downbound+i*time_step;
f_value[i]=fori_value[i]=0;
}
start=(time_start-time_downbound)/time_step;
end=(time_end-time_downbound)/time_step;
for(i=start;if_value[i]=fori_value[i]=HEIGHT;
}
void fori(int n)
/**//**//**//*n:所求的傅立叶级数*/
/**//**//**//*对于傅立叶系数积分采用叠加方式,具体公式见书*/
...{
double a,b,tmp;
int i;
a=0.0,b=0.0;
for(i=0;i...{
tmp=(double)(n*omega*time[i]);
a+=f_value[i]*cos(tmp)*time_step;
b+=f_value[i]*sin(tmp)*time_step;
}
a=2*a/time_width;b=2*b/time_width;
max=-100000000;/**//**//**//*better to set as -INT_MAX*/
min=100000000;/**//**//**//*better to set as INT_MAX*/
for(i=0;i...{
tmp=n*omega*time[i];
fori_value[i]+=a*cos(tmp)+b*sin(tmp);
if(fori_value[i]>max)max=fori_value[i];
if(fori_value[i]}
}
void display(int offset)
/**//**//**//*offset:整个图像在纵轴的偏移值*/
...{
int i;
double time_tmp,f_tmp;
double f_scale=max-min;
line(0,offset+200,640,offset+200);/**//**//**//*draw the coordinate*/
line(320,offset-20,320,offset+200);
for(i=0;i...{
time_tmp=(double)i*640/TIME_DENSITY;
f_tmp=offset+(max-fori_value[i])*200/f_scale;/**//**//**//*成比例打点*/
circle(time_tmp,f_tmp,0.5);
}
}
void copyleft()
/**//**//**//*you know,everything has copyright,but this thing is opensource,so is is copyleft*/
...{
cleardevice();
settextstyle(GOTHIC_FONT,HORIZ_DIR,6);
outtextxy(100,180,"CopyLeft By LFX");
settextstyle(DEFAULT_FONT,HORIZ_DIR,1);
outtextxy(250,240,"CopyLeft By LFX");
}
int main()
...{
int i,n;
int gdriver=DETECT,gmode;
printf(" Please input the times of FORI transform ");
printf(" Using function of GATE as example ");
scanf("%d",&n);
initgraph(&gdriver,&gmode,"bgi");
init();
for(i=0;i...{
cleardevice();
display(20);
fori(i+1);
display(260);
getch();
}
copyleft();
getch();
closegraph();
return 0;
}