void kkfwt(double p[],double x[],int n,int k) { int m,l,it,ii,i,j,is; double q; m=1; l=n; it=2; x[0]=1; ii=n/2; x[ii]=2; for (i=1; i<=k-1; i++) { m=m+m; l=l/2; it=it+it; for (j=0; j<=m-1; j++) { x[j*l+l/2]=it+1-x[j*l]; } } for (i=0; i<=n-1; i++) { ii=x[i]-1; x[i]=p[ii]; } l=1; for (i=1; i<=k; i++) { m=n/(2*l)-1; for (j=0; j<=m; j++) { it=2*l*j; for (is=0; is<=l-1; is++) { q=x[it+is]+x[it+is+l]; x[it+is+l]=x[it+is]-x[it+is+l]; x[it+is]=q; } } l=2*l; } return; }
//等距节点五点三次平滑 //n-整型变量,输入的点数,要求n>=5 //y-长度为n的数组,存放n个等距观测点上的观测数据 //yy-长度为n的数组,返回时存放平滑结果 void kkspt(int n,double y[],double yy[]) { int i; if (n<5) { for (i=0; i<=n-1; i++) { yy[i]=y[i]; } } else { yy[0]=69.0*y[0]+4.0*y[1]-6.0*y[2]+4.0*y[3]-y[4]; yy[0]=yy[0]/70.0; yy[1]=2.0*y[0]+27.0*y[1]+12.0*y[2]-8.0*y[3]; yy[1]=(yy[1]+2.0*y[4])/35.0; for (i=2; i<=n-3; i++) { yy[i]=-3.0*y[i-2]+12.0*y[i-1]+17.0*y[i]; yy[i]=(yy[i]+12.0*y[i+1]-3.0*y[i+2])/35.0; } yy[n-2]=2.0*y[n-5]-8.0*y[n-4]+12.0*y[n-3]; yy[n-2]=(yy[n-2]+27.0*y[n-2]+2.0*y[n-1])/35.0;
上一篇:在SPLUS中直接连接SQLSERVER 2005
下一篇:《雷神之锤III》里求平方根的函数
|