反义疑问句 六大句型:傅立叶级数显示 - dirtysalt的专栏 - CSDNBlog

来源:百度文库 编辑:中财网 时间:2024/05/09 05:20: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;i        f_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;
}