§2数据拟合方法及应用在生产实践和科学研究中,常常有这样的问题:由实验或测量得到变量间的一批离散样点,要求由此建立变量之间的函数关系或得到样点之外的数据。与此有关的另一类问题是拟合问题。当原始数据),(,),,(),,(1100nnyxyxyx有误差时,我们确定的初等函数)(xPy并不要求经过数据点,而是要求在某种距离意义下的误差达到最小(通常考虑使各数据点误差平方和最小)。假设已知函数),(xcfy(这里c可以是多个未知参数)的一批有误差的数据),(,),,(),,(2211nnyxyxyx要求据此确定参数c,这样的问题称为数据拟合。最小二乘法就是求c使得残差平方和21)),(()(iniixcfycQ达到最小。这里的建模原理实质上就是数理统计中的回归分析。1、线性函数(1)建立回归方程若离散样点),(,),,(),,(2211nnyxyxyx集中在一条直线的附近,这时可建立线性回归方程xbayˆˆˆ按最小二乘法得到的具体算法是记niiixyniiyyniixxniiniiyxnyxSynySxnxSynyxnx11221221111则有xxxySSbˆxbyaˆˆ(2)线性回归的显著性检验采用如下检验统计量:xxSbTˆˆ,其中的)ˆ(21ˆ2xxyySbSn若)2(2ntT,则认为所建立的线性回归方程正确。(3)利用回归方程作区间预测当0xx时,y的置信度为1的预测区间是:))(11ˆ)2(ˆˆ,)(11ˆ)2(ˆˆ(20202020xxxxSxxnntxbaSxxnntxba例1、为研究某一化学反应过程中温度x对产品得率y的影响,测得数据如下。x(℃)100110120130140150160170180190y(%)45515461667074788589要求拟合出它们的函数关系。x=[100110120130140150160170180190];y=[45515461667074788589];close;plot(x,y,’o’);由于这些点落在一条直线附近,可以用线性函数bxay来拟合,按上面算法通过命令p=polyfit(x,y,1)求出xy483.0735.2。2、可线性化的函数根据专业知识或离散样点的形状,有时可选择适当的非线性函数来拟合。为确定其中的未知参数,可通过变量转换,把非线性函数转换成线性函数,然后借助线性函数的方法来实现数据拟合。诸如下面所列的曲线函数都能做到线性化:(1)xbay1(2)baxy(3)xbayln(4)bxaey(5)xbaey(6)xbeay1以xbaey为例,我们只要作变换yYxXln,1,就可化为线性函数bXaYln。例2、电容器充电后,电压达到100伏,然后开始放电,测得时刻it(秒)时电压iu(伏)如下表。t012345678910u100755540302015101055要求拟合电压u与放电时间t的函数关系。t=[012345678910];u=[100755540302015101055];close;plot(t,u,’o’)由于这些点落在曲线)0(,baeubt附近,可通过变量转换uUtTln,,化成线性函数bTaUln。按上面算法通过如下命令来实现:T=t;U=log(u);p=polyfit(T,U,1)b=p(1)a=exp(p(2))求出078.100,3126.0ab,这样所拟合的函数teu3126.078.1003、多项式函数若离散样点的形状表明既不能用线性函数来拟合,又不能用可以线性化的函数来拟合的话,从理论上讲,用一个多项式函数来拟合总是可行的。在实际应用中,最常用的是二次和三次多项式函数。下面通过一个例子来说明。例3、某种产品在生产过程中的废品率y与它所含的某种物质量x有关,现将试验所得16组数据记录列于下表。x3436373839393940y1.301.000.730.900.810.700.600.50x4041424343454748y0.440.560.300.420.350.400.410.60要求拟合y与x的函数关系。x=[34363738393939404041424343454748];y=[1.301.000.730.900.810.700.600.500.440.560.300.420.350.400.410.60];close;plot(x,y,’o’)这些离散样点落在开口向上的二次抛物线2cxbxay附近,按最小二乘法,使残差平方和212)(iniiiycxbxaS达到最小。分别对S求关于a,b,c的偏导数,并令其为0,得到如下方程组iniiniiniiniiiniiniiniiniiniiniiniiyxcxbxaxyxcxbxaxycxbxna121413121131211121)()()()()()()()(将以上表中数据代入方程组求出20093.08205.04840.18xxy。下面是用MATLAB具体实现:p=polyfit(x,y,2)xi=linspace(34,48,1000);%绘图的X轴数据z=polyval(p,xi);%得到多项式在数据点处的值close;plot(x,y,’ko’,xi,z,’r-’)若多项式次数太高,则会影响到拟合的精度,这时可考虑用分段多项式拟合。