www.pudn.com > hilert.rar > hilert.cpp


/*   main.c  
/******************************************/  
   
#include   
#include   
   
#define N 500  
#define PI 3.14159265  
   
#define sq(X) ((X)*(X))  
 
void hilbert(int, double[], double[]);    
 
int     main()  
{ 
	FILE *fp1,*fp2,*fp3,*fp4; 
	fp1=fopen("input.txt","w+"); 
	fp2=fopen("output.txt","w+"); 
	fp3=fopen("phase.txt","w+"); 
	fp4=fopen("angel.txt","w+"); 
 
        int             i;  
        double          x;  
        double          delta[N];  
        double          kappa[N];  
        double          y;  
        double          xmin = -10.;  
        double          xmax = 10.;  
        double          cd = -1.;  
        double          w = 2.;  
        double          h = (xmax - xmin) / N;  
   
        for (i = 0; i < N; i++)  
        {  
                x = 2. * (xmin + i * h - cd) / w;  
                if (x < -1.)  
                        delta[i] = 0.;  
                else if (x < 1.)  
                        delta[i] = sqrt(1. - sq(x));  
                else  
                        delta[i] = 0.;  
//				fprintf(fp1,"%.3f  ",delta[i]); 
        }  
		for (i = 0; i < N; i++) 
		{ 
			delta[i]=cos(4.*PI*i/N); 
			fprintf(fp1,"%.3f  ",delta[i]); 
		} 
   
        hilbert(N, delta, kappa);  
   
        for (i = 0; i < N; i++)  
        { 
                x = 2. * (xmin + i * h - cd) / w;  
                if (x < -1.)  
                        y = x + sqrt(sq(x) - 1.);  
                else if (x < 1.)  
                        y = x;  
                else  
                        y = x - sqrt(sq(x) - 1.);  
 
				fprintf(fp2,"%.3f  ",kappa[i]); 
				fprintf(fp3,"%.3f  ",xmin + i * h); 
				fprintf(fp4,"%.3f  ",y); 
 
                (void) printf("%.3f %.3f %.3f %.3f\n", xmin + i * h, delta[i], kappa[i], y);  
        }  
   
        return 0;  
 
		fclose(fp1); 
		fclose(fp2); 
		fclose(fp3); 
		fclose(fp4); 
}  
   
/******************************************/  
/*   hilbert.c  
/******************************************/  
   
 
   
/******************************************/  
/*   hilbert.c  
/******************************************/  
 
void hilbert(int n, double delta[], double kappa[])  
{  
        double d1, d2, d3, d4;  
        int i1, i2;  
   
        for (i1 = 0; i1 < n; i1++)  
        {  
                kappa[i1] = 0.;  
                for (i2 = 1; i2 < n; i2++)  
                {  
                        d1 = (i1+i2=0)? delta[i1-i2]: 0.;  
                        d3 = (i1+i2+1=0)? delta[i1-i2-1]: 0.;  
   
                        kappa[i1] -= 0.5 * (d1-d2) / i2 + 0.5 * (d3 - d4) / (i2+1);  
                }  
                kappa[i1] /= PI;  
        }  
}