📄 tj.c
字号:
//能剔除粗大误差样本的统计算法。
#include <math.h>
#define N 200 //初始样本个数
float d[N]={1.807,1.731,1.813,1.818,1.816,1.721,1.687,1.704,1.678,1.675, //初始样本数据
1.828,1.703,1.760,1.798,1.770,1.749,1.757,1.769,1.766,1.771,
1.778,1.706,1.739,1.725,1.706,1.786,1.716,1.702,1.806,1.738,
1.806,1.722,1.680,1.736,1.824,1.671,1.780,1.668,1.831,1.682,
1.733,1.757,1.761,1.778,1.798,1.775,1.727,1.754,1.786,1.801,
1.683,1.753,1.714,1.809,1.683,1.656,1.694,1.656,1.736,1.767,
1.693,1.779,1.822,1.742,1.744,1.843,1.762,1.732,1.739,1.844,
1.720,1.660,1.773,1.841,1.694,1.801,1.854,1.852,1.736,1.747,
1.766,1.721,1.710,1.719,1.831,1.648,1.649,1.793,1.746,1.858,
1.748,1.770,1.742,1.776,1.793,1.795,1.707,1.763,1.803,1.664,
1.761,1.824,1.678,1.691,1.729,1.783,1.631,1.639,1.822,1.754,
1.743,1.732,1.714,1.719,1.811,1.766,1.676,1.750,1.847,1.631,
1.867,1.753,1.780,1.784,1.694,1.806,1.751,1.821,1.730,1.690,
1.750,1.771,1.791,1.870,1.599,1.734,1.778,1.738,1.831,1.889,
1.728,1.761,1.764,1.800,1.673,1.896,1.714,1.787,1.792,1.697,
1.651,1.762,1.786,1.733,1.803,1.210,1.350,1.110,1.749,2.350,
1.748,1.766,1.793,1.788,1.744,1.777,1.728,1.717,1.719,1.760,
1.771,1.753,1.711,1.703,1.780,1.711,1.720,1.788,1.833,1.739,
1.727,1.765,1.727,1.762,1.780,1.752,1.708,1.699,1.795,1.689,
1.806,1.702,1.721,1.744,1.732,1.746,1.792,1.800,1.711,1.769};
int n; //当前有效样本个数(最终结果为196个)
float ave; //平均值(最终结果为1.7517)
float s; //方差(最终结果为0.0535)
float averg ( ) //计算平均值
{
int i;
float sum;
for (i=0,sum=0;i<n;i++) sum += d[i];
return sum/n ;
}
float tjs ( ) //计算方差
{
int i;
float sum,c;
for (i=0,sum=0;i<n;i++) {
c = d[i]-ave ;
sum += c*c ;
}
return sqrt(sum/(n-1)) ;
}
int del ( ) //剔除坏样本
{
int i,k;
float low,high;
low = ave - 3*s ; //合理样本的下限
high = ave + 3*s ; //合理样本的上限
k = 0 ; //初始化剔除标志
for (i=0;i<n;i++) if ( d[i]<low || d[i]>high ) {//如果发现坏样本
if ( i<n-1 ) { //如果该坏样本不是最后一个样本
d[i] = d[n-1] ; //用最后一个样本来覆盖这个坏样本
i-- ; //退回前一个位置,以便处理刚刚覆盖的样本
}
n-- ; //当前有效样本个数减一
k = 1; //设置剔除操作标志
}
return k ;
}
main ( )
{
n=N; //初始样本个数
while (1) { //数据处理循环
ave = averg ( );//计算平均值
s = tjs ( ) ; //计算方差
if ( !del() ) break;//如果没有剔除坏样本,则处理完毕
}
while (1) ; //在这一行设置断点,中止程序运行,以便观察程序运行的结果
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -