《武汉工程大学学报》  2008年01期 117-119   出版日期:2008-01-30   ISSN:1674-2869   CN:42-1779/TQ
实验数据的线性拟合及计算机处理


根据物理实验的观测数据,寻求两个物理量之间近似的解析函数关系式或曲线方程,就是数据拟合或曲线拟合. 数值拟合是物理实验数据处理的重要方法之一.本文简述了线性拟合的原理,并结合实例给出了一元线性拟合的C语言程序,对其它复杂情况下如何运用数据拟合法也进行了讨论. 1一元线性拟合1.1最小二乘法最小二乘法是线性拟合的基本原理之一[1,2]. 假设两物理量Y与x的关系为Y=a0+a1x,实验的目的就是要由测量数据找到此规律,即一元线性拟合方程. 其中a0、a1为待定系数. 对应于实验测量值xi,通过此关系式可得Yi=a0+a1xi(1)Yi与实际测量的yi一般不相等,二者的差值称为偏差,将偏差与其平方和分别记为δi=yi-Yi=yi-a0-a1xiφ=∑ni=1δ2i=∑ni=1(yi-a0-a1xi)2(2)确定a0和a1的最佳值通常采用最小二乘法,它要求偏差的平方和最小. 由φa0=0,φa1=0可解出a1=xy-x yx2-2,a0=-a1(3)将算出的a0和a1值代入式(1)就得到拟合方程. 1.2计算步骤归纳以上过程,可得出线性拟合的具体计算步骤如下:1)计算各种平均值:=1n∑xi,=1n∑yi,xy=1n∑xiyi,x2=1n∑x2i. 其中的n是实验次数,i=1,2,…,n;2)按式(3)计算a1和a0.2实例研究2.1铜丝电阻随温度变化的线性拟合以实验中铜丝样品的电阻随温度变化为例(见表1).
表1铜丝电阻随温度变化的数据表
Table 1Rt data sheet of Cu
t/℃R/Ωt/℃R/Ω04.381106.26104.561206.44204.701306.58304.861406.74405.081506.94505.241607.12605.401707.28705.581807.42805.741907.60905.962007.781006.06根据表1数据[1]可初步判断Rt是一元线性方程R=a0+a1t根据前述计算步骤设计一个C语言程序(图1),画出Rt数据点并绘出拟合曲线.图1程序设计流程图
Fig.1The flow of programming计算出的a1与a0值可写出一元线性拟合方程的具体形式,也可以求出铜的电阻温度系数[3]. 下面是绘制拟合曲线的C语言程序:
# include <graphics.h>
# include <stdlib.h>
# include <stdio.h>
main()
{
int graphdrv=DETECT;
int graphmode;
int i,polypoints[]={25,20,25,460,625,460};
float t,t0,R,R0,a,a0,a1,x[21],y[21];
float mx=0,my=0,mxy=0,mx2=0;
clrscr();
printf("Enter y[i]:\n");
for(i=0;i<21;i++)
{
x[i]=10*i;
printf("x[%d]=%d",i,(int)x[i]);
printf(" y[%d]=?",i);
scanf("%f",&y[i]);
}
for(i=0;i<21;i++)
{
mx=mx+x[i]/21;
mx2=mx2+x[i]*x[i]/21;
my=my+y[i]/21;
mxy=mxy+x[i]*y[i]/21;
}
第1期何菊明,等:实验数据的线性拟合及计算机处理
武汉工程大学学报第30卷
a1=(mxymx*my)/(mx2mx*mx);
a0=mya1*mx;
initgraph(&graphdrv,&graphmode,"");
drawpoly(3,polypoints);
for(i=1;i<21;i++)
{
t=25+30*i;
line(t,460,t,455);
}
for(i=1;i<5;i++)
{
R=460100*i;
line(25,R,30,R);
}
for(i=0;i<21;i++)
{
line(3*x[i]+20,860100*y[i],3*x[i]+30,860100*y[i]);
line(3*x[i]+25,865100*y[i],3*x[i]+25,855100*y[i]);
}
settextstyle(1,0,0);
outtextxy(180,20,"Cu"s Rt Curve");
settextstyle(2,0,0);
outtextxy(0,450,"4.00");
outtextxy(0,350,"5.00");
outtextxy(0,250,"6.00");
outtextxy(0,150,"7.00");
outtextxy(0,50,"8.00");
outtextxy(25,465,"0");
outtextxy(170,465,"50");
outtextxy(320,465,"100");
outtextxy(470,165,"150");
outtextxy(620,465,"200");
getch();
moveto(25,860100*a0);
for(i=0;i<21;i++)
{
t=10*i;
R=a0+a1*t;
lineto(3*t+25,860100*R);
}
while(! kbhit());
closegraph();
}
绘出的Rt拟合曲线如图2.
图2Rt拟合曲线
Fig.2Rt Fitting curve2.2钢包体积与使用次数的线性拟合炼钢厂出钢时所用的盛钢水的钢包,在使用过程中由于钢液及炉渣对包衬耐火材料的侵蚀,使其体积不断增大. 表2是钢包容积与相应的使用次数的实验数据[3].表2钢包容积与使用次数的数据表Table 2VN data sheet
次数N容积V/L次数N容积V/L2106.4211110.593108.2614110.604109.5815110.905109.5016110.767110.0018111.008109.9319111.2010110.49对于这些数据,先在草图上描出其数据点,发现与双曲线近似,因而将次数N与容积V的关系写作1V=a0+a1N令y=1V,x=1N,将以上关系改写成一元线性拟合方程式y=a0+a1x按上一例方法,可以绘出钢包容积V与使用次数N的拟合曲线(图3).图3VN拟合曲线
Fig.3VN Fitting curve3其它情况的处理方法3.1特殊的一元非线性拟合如果物理量之间并不存在线性关系,但经过适当变换后可转化为线性关系. 例如半导体的电阻与温度的关系为R=CeEg2kT式中k是玻耳兹曼常量,Eg是禁带宽度,C在温度范围不大时可视为常量. 显然,电阻R和热力学温度T之间并非线性关系. 但对上式取对数后就可以得到一个线性关系lnR=lnC+Eg2k 1T令Y=lnR,x=1/T,则转化为式(1),其中,a0=lnC,a1=Eg2k. Yx的数据处理方法与一元线性拟合相同,但此时的RT拟合曲线不是直线了[3].3.2任意的一元非线性拟合如果物理规律是一元非线性函数关系,可用如下的多项式进行拟合Yi=a0+a1x+a2x2+…+akxk对这一情况,除了增加了一个求解线性代数方程组的过程以外,其它计算步骤也与一元线性拟合相同. 3.3多元线性拟合如果物理规律具有如下形式Y=a0+a1x1+…+akxk仍然可用n组数据(n>k)进行多元线性拟合. Yi=a0+a1x1+…+akxk将实验测得的n组数据代入其中,用计算机解k元线性方程组,由最小二乘法确定出k+1个系数,即得k元线性拟合方程. 4结语本文结合实例,介绍了一元线性拟合的原理与计算步骤,并提供了计算机C语言绘制拟合曲线的程序,解决了求拟合方程和绘制拟合函数曲线的问题. 在文章的第三部分,提出了如何将非一元或非线性问题转化为一元线性问题的方案,这对实验数值的计算机处理,具有一定的参考价值与指导意义.