引言
大学物理实验这门科目不仅抄写内容多,实验操作复杂,计算量也不小。虽然能用计算器,但由于不确定度的计算公式并不简单,用计算器手敲费时费力。当年大一的小小的笔者为解决这一问题,用大一学到的最基本的c++知识编写了下面这款不确定度计算器。
下面简单介绍一下这个代码的结构,便于大家交流学习
主函数
首先进行待处理的数据输入,用一个循环输入多个实验数据
对数据进行预处理,计算并输出实验数据的平均值、方差、方差*n
这一步既能为不确定度的计算进行第一步处理,又能给出一些可能要写在实验报告上的数据
调用不确定度的三个部分进行计算,并得出结果
函数UB
输入Δ仪器,并询问属于哪种误差的仪器,用于计算仪器本身的误差ub
函数UA
计算ua,即根号下 (方差/(n-1))
函数UC
计算uc,即误差,根号下ua和ub的平方和;
#include <iostream>
#include<cmath>
using namespace std;
double UB()
{
double ub;
double yiqi;//delta仪
cout << "请输入▲仪\n";
cin >> yiqi;
cout << "请问要除以根号三(1)还是除以三(任意值)\n";
int gen;
cin >> gen;
if (gen == 1) ub = (yiqi / sqrt(3));
else ub = yiqi / 3.0;
return ub;
}
double UA(double d,double nn)
{
return sqrt(d / (nn - 1));
}
double UC(double a, double b)
{
return sqrt(a * a + b * b);
}
int main()
{
int n;
double* p;//[100];
cout << "请输入数据的个数n";
cin >> n;
p = new double[n];
//cin >> n;
cout << "请依次输入这些数据";
double suma = 0;
for (int i = 0; i < n; i++)
{
cin >> p[i];
suma += p[i];
}
double ave = suma / n;
double* fc;// [100] ;//每一个数据与平均值的差的平方
fc = new double[n];
double sufc = 0;//fc的和
for (int i = 0; i < n; i++)
{
fc[i] = (p[i] - ave) * (p[i] - ave);
sufc += fc[i];
}
double fcc = sufc / n;
cout << "平均值为:" << ave;
cout << "\n方差*个数为:" << sufc;
cout << "\n方差为:" << fcc;
double ub = UB();
double ua=UA(fcc,n);
double uc = UC(ua, ub);
cout << "ua=" << ua << endl;
cout << "ub=" << ub << endl;
cout << "uc=" << uc << endl;
double ita;
ita = (uc / ave) * 100.0;
cout << "ita=" << ita << "%\n";
//delete p;
//delete fc;
}