⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jiancuo.c.txt

📁 原始数据的误差检错及平滑处理。可用于负荷预测或状态估计之前的数据处理
💻 TXT
字号:
#include"math.h"
#include"stdio.h"
main()
{int i,j,p,t,s,f;
 int m=4;
 int n=8;
 int k=4;
 float a=0.00;
 float b=0.00;
 float z;
 float del;
 float r;
 float ra=0.037;
static int d[8]={0};
static float e[8]={0};
static float y1[4][8];
static float x[8]={328.0,337.0,348.0,380.0,405.0,436.0,501.0,541.0};
static float x1[8]={0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0} ;
static float y[4][8];
static float w[4]={0.25,0.25,0.25,0.25,};
static float v[4][8]={{0.0},{0.0},{0.0},{0.0}};
static float h[4][4]={{0.0},{0.0},{0.0},{0.0}};
static float r0[8]={0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
 FILE *fp;
 fp=fopen("a:\\datasj.txt","r");
 if(fp==NULL)
 {
   printf("\n I cannot open this file\n");
   exit(1);
 }
 for(i=0;i<m;i++)
 for(j=0;j<n;j++)
 fscanf(fp,"%f",&y[i][j]);
 fclose(fp);
 loop1:for(i=0;i<m;i++)
        {for(j=0;j<n;j++)
	  v[i][j]=y[i][j]-x[j];}
      for(i=0;i<m;i++)
        {for(j=0;j<m;j++)
          for(t=0;t<n;t++)
	   h[i][j]=h[i][j]+v[i][t]*v[j][t];}
      for(i=0;i<m;i++)
        {for(j=0;j<m;j++)
    if(i>=j)
         continue;
         else
         {
          {for(t=0;t<n;t++)
            a=a+(v[i][t]-v[j][t])*(v[i][t]-v[j][t]);}
          {for(p=0;p<m;p++)
	    b=b+(h[i][p]-h[j][p])*w[p];}
	    if(a>0.0)
	     { r=-b/a;
	     { if(r>0.0)
      {if(w[j]<r)
         del=w[j];
       else
         del=r;}
    if(r<0.0)
      {if(-w[i]>r)
         del=-w[i];
       else
	 del=r;}}
    z=a*del*del+2*b*del;
    if(z<0.0)
     { w[i]=w[i]+del;
      w[j]=w[j]-del;
      printf("\n%f\n",z);

     }
  else  if(z>=0.0)
       continue;
     }
     }
         }

  {for(i=0;i<n;i++)
   {for(j=0;j<m;j++)
      x1[i]=y[j][i]*w[j]+x1[i];}}
{
   for(i=0;i<n;i++)
    {
    r0[i]=abs(x1[i]-x[i]);
     r0[i]=r0[i]/x[i];
       if(r0[i]<ra)
    /* printf("r0[%d]=%.5f it is good data.\n",i,r0[i]);*/
       continue;
   else if(r0[i]>=ra)
  {/* printf("r0[%d]=%.5f it is bad data.\n",i,r0[i]);*/
 {if(i>=n-1)
	e[i]=x[i];
      else
        {
	 { for(t=0;t<i;t++)
	     e[t]=x[t];d[t]=r0[t];
	/* printf("x[%d]=%.5f\n",t,x[t]);*/}
	 {
	  for(s=i;s<n-1;s++)
	    { e[s]=x[s+1];d[s]=r0[s+1];
	    }
	    /* printf("x[%d]=%.5f\n",s,e[s]);*/
		     }
	 printf("\n\n");
	 { for(s=0;s<n-1;s++)
	   x[s]=e[s];r0[s]=d[s];        }
	 	   {for(p=0;p<n-1;p++)
	     printf("x[%d]=%.5f,r0[%d]=%.5f\n",p,e[p],p,r0[p]);}
	   {for(t=0;t<i;t++)
	    {for(f=0;f<m;f++)
	      y1[f][t]=y[f][t];}}
	   {for(s=i;s<n-1;s++)
             {for(f=0;f<m;f++)
		y1[f][s]=y[f][s+1];}
				    }
	   {for(s=0;s<n-1;s++)
	   for(f=0;f<m;f++)
	   y[f][s]=y1[f][s];}
	    {for(f=0;f<m;f++)
	     {for(t=0;t<n-1;t++)
	      printf("%10.3f",y[f][t]);
	     printf("\n"); }}
				}     }
	  {for(s=0;s<n-1;s++)
		 x1[s]=0.0;}
		 n=n-1;
		     getch();
	  goto loop1;}



}}
   fp=fopen("e:\\tian\\jiandata.txt","w");

     	{for(i=0;i<k;i++)
	 fprintf(fp,"w[%d]=%.5f\t",i,w[i]);}
	  fprintf(fp,"\n");
	{for(i=0;i<n;i++)
	  fprintf(fp,"x1[%d]=%.5f,r0[%d]=%.5f\n",i,x1[i],i,r0[i]);}
	  fclose(fp);
	}

输入数据为:
291.8 326.8 361.7 396.7 431.7 466.6 501.6 536.6
353.9 341.8 353.9 361.7 389.7 425.3 486.0 548.8
340.3 363.6 388.5 415.1 443.5 473.9 506.3 541.0
353.9 341.8 353.9 361.7 389.7 425.3 486.0 548.8

输出结果为:
w[0]=0.38639	w[1]=0.50376	w[2]=0.09348	w[3]=0.01636	
x1[0]=328.63367,r0[0]=0.00000
x1[1]=338.04202,r0[1]=0.00297
x1[2]=380.21570,r0[2]=0.00000
x1[3]=410.95782,r0[3]=0.01235
x1[4]=445.80121,r0[4]=0.02064
x1[5]=493.92538,r0[5]=0.01397
x1[6]=543.35681,r0[6]=0.00370

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -