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

📄 tj.c

📁 单片机程序设计基础 随书光盘
💻 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 + -