黄宁曼,苏关东,李宫晟
(中国石油大学,北京 102249)
C语言在落球法测液体粘度实验中的应用
黄宁曼,苏关东,李宫晟
(中国石油大学,北京102249)
在大数据时代,为了提高物理实验数据的处理效率,减少数据处理过程中的人为误差,本文以落球法测液体的粘滞阻力系数实验为载体,运用高效率、结构化、模块化的编程语言,采取面向过程的编程技术,编写了适用于落球法测液体粘度实验的C语言程序,并根据相关理论计算了了粘滞阻力系数的相对不确定度,从而进一步地阐述了C语言程序设计在物理实验数据处理中的可行性、优越性、可推广性以及适用性,提出了Excel与C语言结合、高效率处理物理实验数据的方法。
落球法; C语言程序设计;粘滞阻力系数;实验数据处理
粘滞阻力系数又称为粘度(黏度),是评价流体动力学特性的重要参数,对实际生产,工程实践,医学临床[1]都有重要的指导意义。例如,在石油行业中,原油的粘度对油气田的开发方式的选择,对地面油气集输管网的设计都有影响,是生产实践中需要考虑的重要因素。测量粘度的方法很多,常用的方法有落球法、毛细管法、落针法、转筒法等[2]。其中,落球法测量液体的绝对粘度,具有较高的精度,是大学物理教学中的经典实验。本次实验采用C语言程序来处理数据,大大提高了数据处理的效率。
金属球在粘性液体中竖直下落时,受三个竖直方向力的作用:重力,浮力,粘滞阻力,分别用mg,ρ液gV球,f表示,如图1所示。
根据斯托克斯公式,在无限深广的液体里,有
f=6πηνr
(1)
η、ν、r分别为液体的粘滞阻力系数(即粘度),小球下落速度,小球半径。由于待测液体必须用容器盛放,即不满足无限深广的理想条件,故需要对斯托克斯公式进行密立根几何修正:
f=6πηνr(1+2.4d/D)(1+1.6d/h)
(2)
d、h、D分别为小球直径、液柱高度、容器内径。
小球在下落的过程中,起初小球的速度较小,mg>ρ液gV球+f,小球加速运动;随着小球速度的增大,粘滞阻力增大,最终金属球在竖直方向做匀速直线运动。此时根据牛顿第一定律有
mg=ρ液gV球+f
(3)
联立(2)(3),得
(4)
将mg=ρ球gV球;V球=πD3/6;v=L/t;r=d/2代入(3)式,得
(5)
L、t分别为小球匀速下落的位移和对应的时间。
实验数据记录如表1、表2所示。根据评估不确定度的相关,可得落球法测定液体粘滞系数的合成不确定度计算公[3],如下
(6)
图1 受力分析
实验次数123456789测量仪器量筒直径D/mm69.2068.8069.30------游标卡尺小球直径d/mm2.2022.2102.1802.1782.210----千分尺下落时间t/s8.949.058.808.718.968.728.838.788.84秒表
根据公式(5)和(6)以及不确定度评定的相关理论,编制C语言程序,源代码如下:
#include
#include
#define g 9.80/*重力加速度m/s^2*/
double average(double *a,int n);/*函数声明*/
double uncertaintyA(double *a,int n);
double totaluncert(double *a,int n,double d);
void main(){
double a[3],D;/*量筒内径mm*/
double b[5],d;/*小球直径mm*/
double time[9],t;/*下落时间s*/
double da=0.04,db=0.04,dc=0.01;/*仪器误差:游标卡尺mm,千分尺mm,秒表s*/
/*η=(ρ球-ρ液)g d^2t/(18L*(1+2.4d/D)*(1+1.6d/h))*/
double L=10.25;/*小球匀速下落的位移cm*/
double h=29.5;/*油柱深度 cm*/
double dp=(7900-960);/*dp=(ρ球-ρ液)kg/m^3*/
double Yita,uncrtnty0,uncrtnty;
int i;
printf("************************************** ");
printf("*****欢迎使用落球法测粘滞阻力系统***** ");
printf("************************************** ");
printf(" 请输入量筒的内径(3组 单位mm): ");
for(i=0;i<3;i++){
scanf("%lf",&a[i]);
}
printf(" 请输入小球的直径(5组 单位mm): ");
for(i=0;i<5;i++){
scanf("%lf",&b[i]);
}
printf(" 请输入小球的下落时间(9组 单位s): ");
for(i=0;i<9;i++){
scanf("%lf",&time[i]);
}
D=average(a,3);
d=average(b,5);
t=average(time,9);
Yita=dp*g*pow(d,2)*t/(18*L*(1+2.4*d/D/10)*(1+1.6*d/h/10))/10000;
uncrtnty0=sqrt(pow(totaluncert(a,3,da)/D,2)+4*pow(totaluncert(b,5,db)/d,2)+pow(totaluncert(time,9,dc)/t,2));
uncrtnty=Yita*sqrt(pow(totaluncert(a,3,da)/D,2)+4*pow(totaluncert(b,5,db)/d,2)+pow(totaluncert(time,9,dc)/t,2));
printf(" 实验结果如下: ");
printf("蓖麻油的粘度为:%.2lf Pa*s ",Yita);
printf("相对不确定度为:%.2lf ",uncrtnty0);
printf("绝对不确定度为:%.2lf Pa*s ",uncrtnty);
getchar();
}
double average(double *a,int n){/*求平均值函数*/
double s=0;
int i=0;
for(i;i s=s+a[i]; } return s/n; } double uncertaintyA(double *a,int n){/*贝赛尔法求A类不确定度*/ double s=0; double avg=average(a,n); int i; for(i=0;i s=s+pow((a[i]-avg),2); } return(sqrt(s/(n*(n-1)))); } double uncertaintyB(double d){/*仪器误差求B类不确定度*/ return d/sqrt(3); } double totaluncert(double *a,int n,double d){/*总不确定度*/ double c=uncertaintyA(a,n); double e=uncertaintyB(d); return sqrt(pow(c,2)+pow(e,2)); } 运行结果如图2所示: 图2 运行结果 数据的处理是实验永恒的话题,随着计算机科技的发展,处理数据的方法也向着信息化的方向发展。 近些年来,学术界比较流行的数据处理软件有Excel等办公软件,Matlab、Mathematics等数学软件。Excel 等办公软件虽然普及程度高,但其在操作过程中,步骤繁琐,处理数据效率低下,特别是在误差计算方面存在着短板;Matlab等数学软件虽然功能强大,但由于其价格昂贵、入门门槛也比较高,普及程度比较低[3]。 相比之下,用C语言编程来处理数据更加方便,且其精度可以满足常规的实验要求。一方面,相对与Matlab,C语言在高校教育中相对普及;另一方面,其面向过程的特性基本上可以耦合绝大部分的物理量求解过程。同时,C语言提供大量的数组、结构体等数据类型为批量、高效处理数据提供可能;C语言的文件处理机制更是方便实验数据的输入输出。总之,用C语言编程来处理实验数据具有一定的可行性、优越性、可推广性。 对于常见的实验,其数据处理都可以通过Excel和C语言编程结合来高效完成。 在适用性方面,C语言编程比较适合数据量巨大,计算公式复杂,涉及到求物理量的不确定度的实验[4],比如密立根油滴实验[5-6],落球法测粘度实验等。很好地补充了Excel在处理复杂计算时不方便的短板。 实验以落球法测出了蓖麻油的粘滞阻力系数,并给出了不确定度;实验数据处理方面,本实验采用C语言编程来处理数据,简洁高效。并进一步阐述了C语言程序设计在物理实验数据处理中的可行性、优越性、可推广性以及适用性。总之,C语言程序设计不失为一种处理数据的有效方法,具有广阔的应用前景。 致谢 感谢中国石油大学(北京)理学院物理系张鹏教授在实验及写作过程中热情而悉心的指导。 [1]黄秋萍. 落球法液体粘滞系数实验的改进[J].大学物理实验,2015,28(3):38-41. [2]陈用,郑仲森.液体粘滞系数测量方法的改进[J].大学物理实验,2003,16(3):6-8. [3]廖帮全.Excel作图和二分法结合解超越方程的一种方法[J].大学物理实验,2015,28(2):109-112. [4]宋达微.C语言程序在测量数据不确定度计算中的应用 [J].大学物理实验,2015,28(6):89-93. [5]张鑫,郭胜,李金玉.C语言在密立根实验数据处理中的应用[J].大学物理实验,2015,18(1):63-65. [6]蔡旭红.用VC++语言实现密立根油滴实验数据处理系统[J].汕头大学学报:自然科学版,2006,21(2):77-81. Application of the C Language Programming in Measuring Liquid Viscosity by Ball-Dropping Method HUANG Ning-man,SU Guan-dong,LI Gong-sheng (China University of Petroleum (Beijing),Beijing 102249) In the age of big data,in order to improve the processing efficiency in physical experiment,reduce artificial errors in data processing,this paper discusses the experiment of measuring liquid viscous resistance coefficient based on the Ball-Dropping method.Using efficient,structured and modular programming language and process-oriented programming technology,a C language program is written to apply to the liquid viscous resistance coefficient measuring experiment,and to calculate the relative uncertainty of the viscous resistance coefficient according to the related theory,which further expounds the feasibility,superiority,generalizability and applicability of the C programming language in data processing of physical experiment,and brings up a high-efficiency physics experiment data processing method combining the use of Excel and C programming language. ball-dropping method;C language programming;liquid viscosity;experimental data processing 2016-04-11 1007-2934(2016)04-0082-04 O 4-39 A 10.14139/j.cnki.cn22-1228.2016.004.0263 C语言编程处理物理实验数据的探讨
4 结 论