2017电子测量大作业 测量误差理论和测量数据处理 下载本文

经验证,计算结果无误。

源代码:

#include #include main() {

float x[50],v[50],sum=0,y=0,dx,s1,s2,vmax,v1=0,v2=0,v3=0,a,b; double ch,g,t; double

ch1[33]={1.65,1.73,1.79,1.86,1.92,1.96,2.00,2.04,2.07,2.10,2.13,2.16,2.18,2.20,2.22,2.24,2.26,2.28,2.30,2.32,2.33,2.34,2.35,2.37,2.38,2.39,2.45,2.50,2.58,2.64,2.74,2.81,3.02};//肖特纳准则表 double

g1[28]={1.15,1.46,1.67,1.82,1.94,2.03,2.11,2.18,2.23,2.29,2.33,2.37,2.41,2.44,2.47,2.50,2.53,2.56,2.58,2.60,2.62,2.64,2.66};//格拉布斯准则表0.95 double

g2[28]={1.16,1.49,1.75,1.94,2.10,2.22,2.32,2.41,2.48,2.55,2.61,2.66,2.71,2.75,2.79,2.82,2.85,2.88,2.91,2.94,2.96,2.99,3.01};//格拉布斯准则表0.99 double

t1[30]={12.706,4.303,3.182,2.776,2.571,2.447,2.365,2.306,2.262,2.228,2.201,2.179,2.160,2.145,2.131,2.120,2.110,2.101,2.093,2.086,2.080,2.074,2.069,2.064,2.060,2.056,2.052,2.048,2.045,2.042};//t分布表0.95 double

t2[30]={63.657,9.925,5.841,4.604,4.032,3.707,3.499,3.355,3.250,3.169,3.106,3.054,3.012,2.977,2.947,2.921,2.898,2.878,2.861,2.845,2.831,2.819,2.807,2.797,2.787,2.779,2.771,2.763,2.756,2.750};//t分布表0.99 int i,j,n,u;

printf(\请输入数据个数(不超过30个)n=\ scanf(\

printf(\请输入%d个数据:\\n\ for(i=0;i

y=0;

printf(\请选择粗大误差判别准则:\\n\

printf(\莱特准侧\\n2.肖维纳准则\\n3.格拉布斯准则(置信概率为0.95)\\n4.格拉布斯准则(置信概率为0.99)\\n\\n\ scanf(\ for(i=0;i

dx=sum/n;//求平均值

printf(\输出平均值:%.4f\\n\ printf(\输出残差值:\\n\ for(i=0;i

v[i]=x[i]-dx;//求残差 printf(\:\ y=x[i]*x[i]+y; }

putchar('\\n');

s2=sqrt((y-n*dx*dx)/(n-1));//求标准差 printf(\输出标准差值:%.6f\\n\ if(v[0]<0) vmax=-v[0]; else

vmax=v[0]; for(i=0;i

if(v[i+1]<0)

v[i+1]=0-v[i+1]; if(vmax

printf(\输出残差最大绝对值vmax=%.4f\\n\\n\ for(i=0;i

i=i+1;//第i个数残差绝对值最大 break; }

if(u==1)

{ if(n<10) {

printf(\莱特准则不可用。请选择其他准则:\\n\\n\ scanf(\ }

else

if(vmax>3*s2)

printf(\由莱特准则可知第%d个数据为异常值\\n\\n\ else {

printf(\由莱特准则可知该数据无异常值\\n\\n\ break; } } if(u==2) {

ch=ch1[n-5];

printf(\ if(vmax>ch*s2)

printf(\由肖维纳准则可知第%d个数据为异常值\\n\\n\ else {

printf(\由肖维纳准则可知该数据无异常值\\n\\n\ break; } }

if(u==3) {

if(n<=25)

g=g1[n-3]; else {

if(n==30) g=2.74; if(n==35) g=2.81; if(n==40) g=2.87; if(n==50) g=2.96; if(n==100) g=3.17; }

printf(\ if(vmax>g*s2)

printf(\由格拉布斯准则可知第%d个数据为异常值\\n\\n\

else {

printf(\由格拉布斯准则可知该数据无异常值\\n\\n\ break; } } if(u==4) {

if(n<=25)

g=g2[n-3]; else {

if(n==30) g=3.10; if(n==35) g=3.18; if(n==40) g=3.24; if(n==50) g=3.34; if(n==100) g=3.58; }

printf(\ if(vmax>g*s2)

printf(\由格拉布斯准则可知第%d个数据为异常值\\n\\n\ else {

printf(\由格拉布斯准则可知该数据无异常值\\n\\n\ break; } }

if(i

for(i=i-1;i

printf(\判断数据系统误差:\\n\if(n/2==0) //偶数个数据 {

for(i=0;i

for(i=n/2;i

if(v1>v2&&v1-v2>=vmax)

printf(\由马利科夫判据知该数据存在累进性系统误差\\n\ else

printf(\由马利科夫判据知该数据不存在累进性系统误差\\n\ if(v1=vmax)

printf(\由马利科夫判据知该数据存在累进性系统误差\\n\ else

printf(\由马利科夫判据知该数据不存在累进性系统误差\\n\}

else //奇数个数据 {

for(i=0;i<(n-1)/2;i++) v1=v1+v[i];

for(i=(n-1)/2;iv2)

if(v1-v2>=vmax)

printf(\由马利科夫判据知该数据存在累进性系统误差\\n\ else

printf(\由马利科夫判据知该数据不存在累进性系统误差\\n\ if(v1

if(v2-v1>=vmax)

printf(\由马利科夫判据知该数据存在累进性系统误差\\n\ else

printf(\由马利科夫判据知该数据不存在累进性系统误差\\n\}

for(i=0;isqrt(n-1)*s2)

printf(\由阿卑-赫梅特判据知该数据存在周期性系统误差\\n\\n\else

printf(\由阿卑-赫梅特判据知该数据不存在周期性系统误差\\n\\n\

printf(\给出置信区间:(请选择置信概率)\\n\printf(\置信概率0.95\\n2.置信概率0.99\\n\\n\scanf(\if(u==1) {

s1=s2/sqrt(n); t=t1[n-2];

printf(\