粗大误差处理程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include
#include
#include

int i,N;
double a[20],v[20],c,a1,a2,a3,k,g,r,r1,r2;

void laiyite();
void roman();
void geluobusi();
void dikesong();
double average(double arr[],int m);
double bzhch(double arr1[],int m);
void kzhi(int n1);
void gzhi(int n2);
void rzhi(int n3,double arr[],int n);


void main()
{
int n,w;
printf("\n*****************************粗大误差处理****************************\n\n");
printf("请输入数据个数: ");
scanf("%d",&N);
printf("\n请?输?入?数簓据Y: ");
for(i=0;iscanf("%lf",&a[i]);
S:{
printf("\n\n***************************菜单**************************\n");
printf("\t\t\t1.莱以特准则\n\t\t\t2.罗曼洛夫斯基准则ò\n\t\t\t3.格罗布斯准则\n\t\t\t4.狄克松准则\n");
printf("**********************************************************\n");
printf("\n请选择判别的准则: [ ]\b\b");
scanf("%d",&n);
switch(n)
{
case 1: laiyite();break;
case 2: roman();break;
case 3: geluobusi();break;
case 4: dikesong();break;
}
printf("\n\n要继续吗\t1.继续 2.退出? [ ]\b\b");
scanf("%d",&w);
switch(w)
{
case 1: goto S;break;
case 2:break;
}
}

}


void laiyite() //1.莱以特准则
{
double b;
L1:{
c=average(a,N);
b=bzhch(a,N);
for(i=0;iv[i]=a[i]-c;
for(i=0;i{
v[i]=abs(v[i]);
if(v[i]>3*b)
{
printf("\n剔除值残余误差: %8.3lf 剔除值 %8.3lf\n",v[i],a[i]);
for(;ia[i]=a[i+1];
a[N-1]='\0';
N--;
goto L1;
}
}
}
printf("\n标准差: %8.3lf \n",b);
printf("\n输出最后数值: ");
for(i=0;iprintf("%8.3lf ",a[i]);
}

void roman() //2.罗曼洛夫斯基准则
{
double t=100,x[20],b,ave,b2,sum=0,s2;
int d;
printf("\n请?输?入?显?著?度è:阰 ");
scanf("%lf",&a1);
for(i=0;ix[i]=a[i];
L2:{
kzhi(N);
for(i=0;i{
if(x[i]{
t=x[i];
d=i;
}
}
for(i=d;ix[i]=x[i+1];
x[N-1]='\0';
ave=average(x,N-1);
b2=bzhch(x,N-2);
if(abs(t-ave)>k*b2)
{
printf("\n输出k值:阰 %lf\n ",k);
printf("\n剔除值: %8.3lf\n",t);
printf("\n输出最后数值:阰 ");
for(i=0;iprintf("%8.3lf ",x[i]);
N--;
t=100;
goto L2;
}
}
}

void geluobusi() //3.格罗布斯准则
{
int d1,d2;
double min=100,max=0,ave1,b3,g1,g2,x[20];
printf("\n请输入显著度: ");
scanf("%lf",&a2);
for(i=0;ix[i]=a[i];
L3:{
ave1=average(x,N);
b3=bzhch(x,N-1);
for(i=0;i{
if(x[i]{
min=x[i];
d1=i;

}
if(x[i]>max)
{
max=x[i];
d2=i;
}
}
g1=(ave1-x[d1])/b3;
g2=(x[d2]-ave1)/b3;
gzhi(N);
if (g1>g)
{
for(i=d1;ix[i]=x[i+1];
x[N-1]='\0';
printf("\n输出剔除值: %8.3lf\n",max);
printf("\n输出g值: %8.3lf\n",g);
N--;
min=100;
max=0;
goto L3;
}
if (g2>g)
{
for(i=d2;ix[i]=x[i+1];
x[N-1]='\0';
printf("\n输出剔除值: %8.3lf\n",max);
printf("\n输出g值: %8.3lf\n",g);
N--;
min=100;
max=0;
goto L3;
}
}
printf("\n输出最后数值: ");
for(i=0;iprintf("%8.3lf ",x[i]);
}

void dikesong() // 4.狄克松准则
{
int j;
double t,x[20],m;
printf("\n请输入显著度: ");
scanf("%lf",&a3);
for(i=0;ix[i]=a[i];
for(j=0;jfor(i=0;iif(x[i]>x[i+1])
{
t=x[i];
x[i]=x[i+1];
x[i+1]=t;
}
L4:{
rzhi(N,x,N);
if (r1>r)
{
m=x[N-1];
x[N-1]='\0';
printf("\n输出剔除值: %8.3lf\n",m);
printf("\n输出g值: %8.3lf\n",r);
N--;
goto L4;
}
if (r2>r)
{
m=x[0];
for(i=0;ix[i]=x[i+1];
x[N-1]='\0';
printf("\n输出剔除值: %8.3lf\n",m);
printf("\n输出r值: %8.3lf\n",r);
N--;
goto L4;
}
}
printf("\n输出最后数值: ");
for(i=0;iprintf("%8.3lf ",x[i]);
}


double average(double arr[],int m) //平均值函数
{
double sum=0,average;
for(i=0;isum=sum+arr[i];
average=sum/m;
return average;
}

double bzhch(double arr1[],int m) //标准差函数
{
double s1=0.000000,b1;
c=average(arr1,m);
for(i=0;iv[i]=arr1[i]-c;
for(i=0;is1=s1+v[i]*v[i];
b1=sqrt(s1/(m-1));
return b1 ;
}

void kzhi(int n1) //不同n值和不同显著度时k值函数,k值为罗曼诺夫斯基准则参数
{
if(a1=0.05)
{
switch(n1)
{
case 4: k= 4.97;break;
case 5: k= 3.65;break;
case 6: k= 3.04;break;
case 7: k= 2.78;break;
case 8: k= 2.62;break;
case 9: k= 2.51;break;
case 10: k= 2.43;break;
case 11: k= 2.37;break;
case 12: k= 2.33;break;
case 13: k= 2.29;break;
case 14: k= 2.26;break;
case 15: k= 2.24;break;
case 16: k= 2.22;break;
case 17: k= 2.20;break;
case 18: k= 2.18;break;
case 19: k= 2.17;break;
case 20: k= 2.16;break;
case 21: k= 2.15;break;
case 22: k= 2.14;break;
case 23: k= 2.13;break;
case 24: k= 2.12;break;
case 25: k= 2.11;break;
case 26: k= 2.10;break;
case 27: k= 2.10;break;
case 28: k= 2.09;break;
case 29: k= 2.09;break;
case 30: k= 2.08;break;
}
}
else if(a1=0.01)
{
switch(n1)
{
case 4

: k= 11.46;break;
case 5: k= 6.53;break;
case 6: k= 5.04;break;
case 7: k= 4.36;break;
case 8: k= 3.96;break;
case 9: k= 3.71;break;
case 10: k= 3.54;break;
case 11: k= 3.41;break;
case 12: k= 3.31;break;
case 13: k= 3.23;break;
case 14: k= 3.17;break;
case 15: k= 3.12;break;
case 16: k= 3.08;break;
case 17: k= 3.04;break;
case 18: k= 3.01;break;
case 19: k= 3.00;break;
case 20: k= 2.95;break;
case 21: k= 2.93;break;
case 22: k= 2.91;break;
case 23: k= 2.90;break;
case 24: k= 2.88;break;
case 25: k= 2.86;break;
case 26: k= 2.85;break;
case 27: k= 2.84;break;
case 28: k= 2.83;break;
case 29: k= 2.82;break;
case 30: k= 2.81;break;
}
}
}

void gzhi(int n2) //不同n值和不同显著度时函数,g值为格罗布斯准则参数
{
if(a2=0.05)
{
switch(n2)
{
case 3: g= 1.15;break;
case 4: g= 1.46;break;
case 5: g= 1.67;break;
case 6: g= 1.82;break;
case 7: g= 1.94;break;
case 8: g= 2.03;break;
case 9: g= 2.11;break;
case 10: g= 2.18;break;
case 11: g= 2.23;break;
case 12: g= 2.28;break;
case 13: g= 2.33;break;
case 14: g= 2.37;break;
case 15: g= 2.41;break;
case 16: g= 2.44;break;
case 17: g= 2.48;break;
case 18: g= 2.50;break;
case 19: g= 2.53;break;
case 20: g= 2.56;break;
case 21: g= 2.58;break;
case 22: g= 2.60;break;
case 23: g= 2.62;break;
case 24: g= 2.64;break;
case 25: g= 2.66;break;
case 30: g= 2.74;break;
case 35: g= 2.81;break;
case 40: g= 2.87;break;
case 50: g= 2.96;break;
case 100: g= 3.17;break;
}
}
else if(a2=0.01)
{
switch(n2)
{
case 3: g= 1.16;break;
case 4: g= 1.49;break;
case 5: g= 1.75;break;
case 6: g= 1.94;break;
case 7: g= 2.10;break;
case 8: g= 2.22;break;
case 9: g= 2.32;break;
case 10: g= 2.41;break;
case 11: g= 2.48;break;
case 12: g= 2.55;break;
case 13: g= 2.61;break;
case 14: g= 2.66;break;
case 15: g= 2.70;break;
case 16: g= 2.75;break;
case 17: g= 2.78;break;
case 18: g= 2.82;break;
case 19: g= 2.85;break;
case 20: g= 2.88;break;
case 21: g= 2.91;break;
case 22: g= 2.94;break;
case 23: g= 2.96;break;
case 24: g= 2.99;break;
case 25: g= 3.01;break;
case 30: g= 3.10;break;
case 35: g= 3.18;break;
case 40: g= 3.24;break;
case 50: g= 3.33;break;
case 100: g= 3.59;break;
}
}
}


void rzhi(int n3,double arr[],int n) //不同n值和不同显著度r值函数,r值为狄克松准则参数
{
if(a3=0.05)
if(n3>2&&n3<8)
{
r1=(arr[n-1]-arr[n-2])/(arr[n-1]-arr[0]);
r2=(arr[0]-arr[1])/(arr[0]-arr[n-1]);

switch(n3)
{
case 3: r= 0.341;break;
case 4: r= 0.765;break;
case 5: r= 0.642;break;
case 6: r= 0.560;break;
case 7: r= 0.507;break;
}
}
if(n3>7&&n3<11)
{
r1=(arr[n-1]-arr[n-2])/(arr[n-1]-arr[1]);
r2=(arr[0]-arr[1])/(arr[0]-arr[n-2]);
switch(n3)
{
case 8: r= 0.554;break;
case 9: r= 0.512;break;
case 10: r= 0.477;break;
}
}
if(n3>10&&n3<15)
{
r1=(arr[n-1]-arr[n-3])/(arr[n-1]-arr[1]);
r2=(arr[0]-arr[2])/(arr[0]-arr[n-2]);
switch(n3)
{
case 11: r= 0.576;break;
case 12: r= 0.546;break;
case 13: r= 0.521;break;
case 14: r= 0.546;break;
}
}
if(n3>14&&n3<26)
{
r1=(arr[n-1]-arr[n-3])/(arr[n-1]-arr[2]);
r2=(arr[0]-arr[2])/(arr[0]-arr[n-3]);
switch(n3)
{
case 15: r= 0.525;break;
case 16: r= 0.507;break;
case 17: r= 0.490;break;
case 18: r= 0.475;break;
case 19: r= 0.462;break;
case 20: r= 0.450;break;
case 21: r= 0.440;break;
case 22: r= 0.430;break;
case 23: r= 0.421;break;
case 24: r= 0.413;break;
case 25: r= 0.406;break;
}
}

if(a3=0.01)
if(n3>2&&n3<8)
{
r1=(arr[n-1]-arr[n-2])/(arr[n-1]-arr[0]);
r2=(arr[0]-arr[1])/(arr[0]-arr[n-1]);
switch(n3)
{
case 3: r= 0.988;break;
case 4: r= 0.889;break;
case 5: r= 0.780;break;
case 6: r= 0.698;break;
case 7: r= 0.637;break;
}
}
if(n3>7&&n3<11)
{
r1=(arr[n-1]-arr[n-2])/(arr[n-1]-arr[1]);
r2=(arr[0]-arr[1])/(arr[0]-arr[n-2]);
switch(n3)
{
case 8: r= 0.683;break;
case 9: r= 0.635;break;
case 10: r= 0.597;break;
}
}
if(n3>10&&n3<15)
{
r1=(arr[n-1]-arr[n-3])/(arr[n-1]-arr[1]);
r2=(arr[0]-arr[2])/(arr[0]-arr[n-2]);
switch(n3)
{
case 11: r= 0.679;break;
case 12: r= 0.642;break;
case 13: r= 0.615;break;
case 14: r= 0.641;break;
}
}
if(n3>14&&n3<26)
{
r1=(arr[n-1]-arr[n-3])/(arr[n-1]-arr[2]);
r2=(arr[0]-arr[2])/(arr[0]-arr[n-3]);
switch(n3)
{
case 15: r= 0.616;break;
case 16: r= 0.595;break;
case 17: r= 0.577;break;
case 18: r= 0.561;break;
case 19: r= 0.547;break;
case 20: r= 0.535;break;
case 21: r= 0.524;break;
case 22: r= 0.514;break;
case 23: r= 0.505;break;
case 24: r= 0.497;break;
case 25: r= 0.489;break;
}
}
}

相关文档
最新文档