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

📄 a.cpp

📁 精密测量中常用的误差处理函数
💻 CPP
字号:
#include <iostream.h>
#include <math.h>
void main()
{
  	float sum,v,x,A,a[100],b[100],c[100][100];
	float b0,b1,b2,b3,b4 ,y,dx,dy;
	float v1 ,xbzc,average ,bzc,sjwc;
	float sumx,sumdx,sumy,sumdy,sumxy,sumdxy,sumxydx,sumxydy,sum2;
	int i,n,w,d,e, j,n1,n2,s,t;
	b0=b1=b2=b3=b4=0;

loop1:
{
    cout<<"请选择要输入的项目:"<<endl;
	cout<<"计算均值及校核请输入0"<<endl;
	cout<<"计算标准差及方差请输入1"<<endl;
	cout<<"计算函数系统误差请输入2"<<endl;
	cout<<"计算函数随机误差请输入3"<<endl;
	cin>>s;
}
//000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
if(s==0)
{
	cout<<"请输入样本个数n:";
	cin>>n;
	cout<<"请输入"<<n<<"次测量值的大小,并以空格隔开。"<<endl;
	for(i=0,sum=0;i<n;i++)
	{
		cin>>a[i];
		sum+=a[i];
	}
	x=sum/n;
	cout<<"样本平均值大小为:"<<x<<endl;
	//下面开始算样本平均值X小数点后的位数
	 
	 w=floor(x+0.00001);
	if ( x-w>1e-5)
	{
		
      
		if (x*10-floor(x*10+1e-4)>1e-4)
		{
             
				if (x*100-floor(x*100+1e-3)>1e-3)
				{
		           
					if(x*1000-floor(x*1000+1e-2)>1e-2)
			        	A=0.0001;
				else A=0.001;
				}
				else A=0.01;
		}
		else A=0.1;
	}
	
	else A=0;
	cout<<A<<endl;

	//下面要比较输入的样本有效位和样本平均值X小数点后的位数来确定A的大小


	for (i=0;i<n;i++)
	{
		
		if (a[i]*1000-floor(a[i]*1000+1e-2)>1e-2)
		{	b4=0.0001,b3=0.001,b2=0.01,b1=0.1,b0=0;
		    break;
		}
		else continue;
	}
    if (b3==0)
	{
        for (i=0;i<n;i++)
		{
			if (a[i]*100-floor(a[i]*100+1e-3)>1e-3)
			{	b3=0.001,b2=0.01,b1=0.1,b0=0;
			    break;
			}
			else continue;
		}
	}
	 if(b2==0)
	{
		 for (i=0;i<n;i++)
		 {
           if (a[i]*10-floor(a[i]*10+1e-4)>1e-4)
		   {   b2=0.01,b1=0.1,b0=0;
		       break;
		   }
		   else continue;
		 }
	}
    if (b1==0)
	{
		 for (i=0;i<5;i++)
		{
           if (a[i]-floor(a[i]+0.0001)>1e-5)
		   {   b1=0.1,b0=0;
		       break;
		   }
		   else continue;
		}
	}
	else b0==0;

	
     if (b4)
            A=b4>A?A:b4;
	else if(b3)
	        A=b3>A?A:b3;
	else if (b2)
			A=b2>A?A:b2;
	else if (b1)
			A=b1>A?A:b1;
	else    A=A;
	cout<<A<<endl;

//下面由求得的A通过第二种规则校核该算术平均值
	

      for(v=0,i=0;i<n;i++)
		v+=(a[i]-x);             //求残余误差代数和
	 
     cout<<"用第二种规则校核该算术平均值,求得残余误差代数和为:"<<v<<",  "<<"A为:"<<A<<",";
	if(n%2==0)
	{
		if(fabs(v)<=(n*A/2))
			cout<<"经校核说明计算结果正确。"<<endl;
		else
			cout<<"经校核说明计算结果错误。"<<endl;
	}
	else if (fabs(v)<=(n/2-0.5)*A)
		cout<<"经校核说明计算结果正确。"<<endl;
	else
       	cout<<"经校核说明计算结果错误。"<<endl;



	
}


//111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
else if (s==1)
{
	cout<<"请输入样本个数n:";
	cin>>n;
	cout<<"请输入"<<n<<"次测量值的大小,并以空格隔开。"<<endl;
	for(i=0,sum=0;i<n;i++)
	{
		cin>>a[i];
		sum+=a[i];
	}
	x=sum/n;
	 w=floor(x+0.00001);
	if ( x-w>1e-5)
	{
		
      
		if (x*10-floor(x*10+1e-4)>1e-4)
		{
             
				if (x*100-floor(x*100+1e-3)>1e-3)
				{
		           
					if(x*1000-floor(x*1000+1e-2)>1e-2)
			        	A=0.0001;
				else A=0.001;
				}
				else A=0.01;
		}
		else A=0.1;
	}
	
	else A=0;


	for (i=0;i<n;i++)
	{
		
		if (a[i]*1000-floor(a[i]*1000+1e-2)>1e-2)
		{	b4=0.0001,b3=0.001,b2=0.01,b1=0.1,b0=0;
		    break;
		}
		else continue;
	}
    if (b3==0)
	{
        for (i=0;i<n;i++)
		{
			if (a[i]*100-floor(a[i]*100+1e-3)>1e-3)
			{	b3=0.001,b2=0.01,b1=0.1,b0=0;
			    break;
			}
			else continue;
		}
	}
	 if(b2==0)
	{
		 for (i=0;i<n;i++)
		 {
           if (a[i]*10-floor(a[i]*10+1e-4)>1e-4)
		   {   b2=0.01,b1=0.1,b0=0;
		       break;
		   }
		   else continue;
		 }
	}
    if (b1==0)
	{
		 for (i=0;i<5;i++)
		{
           if (a[i]-floor(a[i]+0.0001)>1e-5)
		   {   b1=0.1,b0=0;
		       break;
		   }
		   else continue;
		}
	}
	else b0==0;

	
     if (b4)
            A=b4>A?A:b4;
	else if(b3)
	        A=b3>A?A:b3;
	else if (b2)
			A=b2>A?A:b2;
	else if (b1)
			A=b1>A?A:b1;
	else    A=A;


	

      for(v=0,i=0;i<n;i++)
		v+=(a[i]-x);             //求残余误差代数和
	 
  	  for ( i=0,v1=0;i<n;i++)
		 v1+=pow((a[i]-x),2);
		 bzc=sqrt (v1/(n-1));
		 xbzc=bzc/sqrt(n);
		 cout<<"标准差的大小为:"<<bzc<<endl;
		 cout<<"算术平均值的标准差大小为:"<<xbzc<<endl;
		 cout<<"方差的大小为:"<<pow(bzc,2)<<endl;  
}
//22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222

else if (s==2)
{
	loop:{	cout<<"选择一元函数请输入1,选择二元函数请输入2:";
		cin>>t;
	 }

  if(t==1)//一元函数系统误差
  {
	cout<<"请输入变量x的值及其误差值dx:"<<endl;
	cin>>x>>dx;

	cout<<"请输入变量X的最高次数n"<<endl;
	cin>>n;
    for(i=1,dy=0;i<=n;i++)
	{
			cout<<"请输入x的"<<i<<"次方的系数"<<endl;
    	    cin>>a[i];
	}
         

    for(i=1,dy=0;i<=n;i++)
	{
                dy+=i*a[i]*pow(x,i-1)*dx;
	}
    cout<<"y的系统误差为dy="<<dy<<endl;

  
  }



  else if(t==2)//二元函数系统误差
  {	
	cout<<"请输入第1个变量x的最高次数:"<<endl;
	cin>>n1;
	cout<<"请输入第1个变量x的值:"<<endl;
	cin>>x;
	cout<<"请输入变量x的误差:"<<endl;
	cin>>dx;
	for (i=1;i<=n1;i++)
	{
		cout<<"请输入x的"<<i<<"次方的系数"<<endl;
    	cin>>a[i];
	}

	cout<<"请输入第2个变量y的最高次数:"<<endl;
	cin>>n2;
	cout<<"请输入第2个变量y的值:"<<endl;
	cin>>y;
	cout<<"请输入变量y的误差:"<<endl;
	cin>>dy;
    for (i=1;i<=n2;i++)
	{
		cout<<"请输入y的"<<i<<"次方的系数"<<endl;
	    cin>>b[i];
	}

   for (i=1;i<=n1;i++)
     for(j=1;j<=n2;j++)
	 {
		 cout<<"请输入x "<<i<<"次方y "<<j<<"次方的系数"<<endl;
			 cin>>c[i][j];
			 cout<<"c["<<i<<"]["<<j<<"]="<<c[i][j]<<endl;
	 }



	 for(i=1,sumx=sumdx=0;i<=n1;i++)
	{
		 sumx+=a[i]*pow(x,i);
		 sumdx+=a[i]*i*pow(x,i-1)*dx;
	 }
	 cout<<"sumx="<<sumx<<endl;
	 cout<<"sumdx="<<sumdx<<endl;//对x的n次方求导

	 for(j=1,sumy=sumdy=0;j<=n2;j++)
	{
		 sumy+=b[j]*pow(y,j);
		 sumdy+=b[j]*j*pow(y,j-1)*dy;//对y的n次方求导
	 }
	 for(i=1,sumxy=sumxydx=sumxydy=0;i<=n1;i++)
		 for(j=1;j<=n2;j++)
		 {
			 sumxy+=c[i][j]*pow(x,i)*pow(y,j);//含xy项的求和
			 sumxydx+=c[i][j]*i*pow(x,i-1)*pow(y,j)*dx;//对含xy项求x偏导
			 sumxydy+=c[i][j]*pow(x,i)*j*pow(y,j-1)*dy;//对含xy项求y偏导
			 sumdxy=sumxydx+sumxydy;//对含xy项求x、y全微分
		 }
		
		 cout<<"sumdxy="<<sumdxy<<endl;
	

   
	sum2=sumdx+sumdy+sumdxy;
	cout<<"函数系统误差大小为:"<<sum2<<endl;

  } 

  else  
  {
 cout<<"您的输入有误!请重新输入:";
        goto loop;
  }
}
//333333333333333333333333333333333333333333333333333333333333333333333333333
else if (s==3)
{
    cout<<"请输入一元函数变量x的最高次数:";
	cin>>n;
	for (i=1;i<=n;i++)
	{
		cout<<"请输入x "<<i<<"次方的系数:"<<endl;
		cin>>a[i];
	}

	cout<<"请输入样本的个数:"<<endl;
	cin>>n1;
	cout<<"请输入样本值,并以空格隔开:";
   	for (i=1,sumx=0;i<=n1;i++)
	{
	   cin>>b[i];
	   sumx+=b[i];
	}
	average=sumx/n1;

    for (i=1,v=0;i<=n1;i++)
	{
		v+=pow(b[i]-average,2);
	}
	bzc=sqrt(v/(n1-1));
	

	
	for (i=1,sumdx=0;i<=n;i++)
	{
        sumdx+=i*a[i]*pow(average,i-1);
	}
	cout<<"sumdx="<<sumdx<<endl;
	sjwc=sumdx*bzc;
	cout<<"一元函数随机误差值为:"<<sjwc<<endl;
}
//
else 
{
	cout<<"您的输入有误!请重新输入:"<<endl;
	goto loop1;
}
}

⌨️ 快捷键说明

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