最小二乘法的基本原理和多项式拟合一、最小二乘法的基本原理从整体上考虑近似函数)(xp同所给数据点),(iiyx(i=0,1,…,m)误差iiiyxpr)((i=0,1,…,m)iiiyxpr)((i=0,1,…,m)绝对值的最大值imir0max,即误差向量Tmrrrr),,(10的∞—范数;二是误差绝对值的和miir0,即误差向量r的1—范数;三是误差平方和miir02的算术平方根,即误差向量r的2—范数;前两种方法简单、自然,但不便于微分运算,后一种方法相当于考虑2—范数的平方,因此在曲线拟合中常采用误差平方和miir02来度量误差ir(i=0,1,…,m)的整体大小。数据拟合的具体作法是:对给定数据),(iiyx(i=0,1,…,m),在取定的函数类中,求)(xp,使误差iiiyxpr)((i=0,1,…,m)的平方和最小,即miir02miiiyxp02min)(从几何意义上讲,就是寻求与给定点),(iiyx(i=0,1,…,m)的距离平方和为最小的曲线)(xpy(图6-1)。函数)(xp称为拟合函数或最小二乘解,求拟合函数p(x)的方法称为曲线拟合的最小二乘法。合中,函数类可有不同的选取方法.6—1二多项式拟合假设给定数据点),(iiyx(i=0,1,…,m),为所有次数不超过)(mnn的多项式构成的函数类,现求一nkkknxaxp0)(,使得min)(00202miminkikikiinyxayxpI(1)当拟合函数为多项式时,称为多项式拟合,满足式(1)的)(xpn称为最小二乘拟合多项式。特别地,当n=1时,称为线性拟合或直线拟合。显然minkikikyxaI020)(为naaa,,10的多元函数,因此上述问题即为求),,(10naaaII的极值问题。由多元函数求极值的必要条件,得njxyxaaImijinkikikj,,1,0,0)(200(2)即njyxaxnkmiijikmikji,,1,0,)(000(3)(3)是关于naaa,,10的线性方程组,用矩阵表示为miinimiiimiinminiminiminiminimiimiiminimiiyxyxyaaaxxxxxxxxm000100201001020001(4)式(3)或式(4)称为正规方程组或法方程组。可以证明,方程组(4)的系数矩阵是一个对称正定矩阵,故存在唯一解。从式(4)中解出ka(k=0,1,…,n),从而可得多项式nkkknxaxp0)((5)可以证明,式(5)中的)(xpn满足式(1),即)(xpn为所求的拟合多项式。我们把miiinyxp02)(称为最小二乘拟合多项式)(xpn的平方误差,记作miiinyxpr0222)(由式(2)可得minkmiikikiyxayr000222)((6)多项式拟合的一般方法可归纳为以下几步:(1)由已知数据画出函数粗略的图形——散点图,确定拟合多项式的次数n;(2)列表计算mijinjx0)2,,1,0(和miijinjyx0)2,,1,0(;(3)写出正规方程组,求出naaa,,10;(4)写出拟合多项式nkkknxaxp0)(。在实际应用中,mn或mn;当mn时所得的拟合多项式就是拉格朗日或牛顿插值多项式。例1测得铜导线在温度iT(℃)时的电阻)(iR如表6-1,求电阻R与温度T的近似函数关系。i0123456iT(℃)19.125.030.136.040.045.150.0)(iR76.3077.8079.2580.8082.3583.9085.10解画出散点图(图6-2),可见测得的数据接近一条直线,故取n=1,拟合函数为TaaR10列表如下iiTiR2iTiiRT019.176.30364.811457.330125.077.80625.001945.000230.179.25906.012385.425336.080.801296.002908.800440.082.351600.003294.000545.183.902034.013783.890650.085.102500.004255.000245.3565.59325.8320029.445正规方程组为445.200295.56583.93253.2453.245710aa解方程组得921.0,572.7010aa故得R与T的拟合直线为TR921.0572.70利用上述关系式,可以预测不同温度时铜导线的电阻值。例如,由R=0得T=-242.5,即预测温度T=-242.5℃时,铜导线无电阻。6-2例2例2已知实验数据如下表i012345678ix1345678910iy1054211234试用最小二乘法求它的二次拟合多项式。解设拟合曲线方程为2210xaxaay列表如下Iixiy2ix3ix4ixiiyxiiyx20110111101013592781154524416642561664352251256251050461362161296636571493432401749682645124096161287938172965612724381041001000100004040053323813017253171471025得正规方程组102514732253173017381301738152381529210aaa解得2676.06053.3,4597.13210aaa故拟合多项式为22676.06053.34597.13xy*三最小二乘拟合多项式的存在唯一性定理1设节点nxxx,,,10互异,则法方程组(4)的解存在唯一。证由克莱姆法则,只需证明方程组(4)的系数矩阵非奇异即可。用反证法,设方程组(4)的系数矩阵奇异,则其所对应的齐次方程组miinimiiimiinminiminiminiminimiimiiminimiiyxyxyaaaxxxxxxxxm000100201001020001(7)有非零解。式(7)可写为njaxnkkmikji,,1,0,0)(00(8)将式(8)中第j个方程乘以ja(j=0,1,…,n),然后将新得到的n+1个方程左右两端分别相加,得njnkkmikjijaxa00000)(因为mimimiinnkkiknjjijnjnkkjijknjnkkmikjijxpxaxaxaaaxa00020000000)())(()(其中nkkknxaxp0)(所以0)(inxp(i=0,1,…,m))(xpn是次数不超过n的多项式,它有m+1>n个相异零点,由代数基本定理,必须有010naaa,与齐次方程组有非零解的假设矛盾。因此正规方程组(4)必有唯一解。定理2设naaa,,1,0是正规方程组(4)的解,则nkkknxaxp0)(是满足式(1)的最小二乘拟合多项式。证只需证明,对任意一组数nbbb,,1,0组成的多项式nkkknxbxQ0)(,恒有miiinmiiinyxpyxQ0202)()(即可。njmijinkikikjjminjnkikikjijjiinmiininmiininmiiinmiiinxyxaabyxaxabyxpxpxQxpxQyxpyxQ00000000202022)(20)()()(2)()()()(因为ka(k=0,1,…,n)是正规方程组(4)的解,所以满足式(2),因此有0)()(0202miiinmiiinyxpyxQ故)(xpn为最小二乘拟合多项式。*四多项式拟合中克服正规方程组的病态在多项式拟合中,当拟合多项式的次数较高时,其正规方程组往往是病态的。而且①正规方程组系数矩阵的阶数越高,病态越严重;②拟合节点分布的区间mxx,0偏离原点越远,病态越严重;③ix(i=0,1,…,m)的数量级相差越大,病态越严重。为了克服以上缺点,一般采用以下措施:①尽量少作高次拟合多项式,而作不同的分段低次拟合;②不使用原始节点作拟合,将节点分布区间作平移,使新的节点ix关于原点对称,可大大降低正规方程组的条件数,从而减低病态程度。平移公式为:mixxxxmii,,1,0,20(9)③对平移后的节点ix(i=0,1,…,m),再作压缩或扩张处理:mixpxii,,1,0,(10)其中rmirixmp202)()1(,(r是拟合次数)(11)经过这样调整可以使ix的数量级不太大也不太小,特别对于等距节点),,1,0(0miihxxi,作式(10)和式(11)两项变换后,其正规方程组的系数矩阵设为A,则对1~4次多项式拟合,条件数都不太大,都可以得到满意的结果。变换后的条件数上限表如下:拟合次数1234)(2Acond=19.950.3435④在实际应用中还可以利用正交多项式求拟合多项式。一种方法是构造离散正交多项式;另一种方法是利用切比雪夫节点求出函数值后再使用正交多项式。这两种方法都使正规方程组的系数矩阵为对角矩阵,从而避免了正规方程组的病态。我们只介绍第一种,见第三节。例如m=19,0x=328,h=1,1x=0x+ih,i=0,1,…,19,即节点分布在[328,347],作二次多项式拟合时①直接用ix构造正规方程组系数矩阵0A,计算可得16021025.2)(Acond严重病态,拟合结果完全不能用。②作平移变换19,,1,0,2347328ixxiiix构造正规方程组系数矩阵1A,计算可得161210483868.4)(Acond比)(02Acond降低了13个数量级,病态显著改善,拟合效果较好。③取压缩因子1498.0)(2041904iixp作压缩变换19,,1,0,ixpxii用ix构造正规方程组系数矩阵2A,计算可得839.6)(22Acond又比)(12Acond降低了3个数量级,是良态的方程组,拟合效果十分理想。如有必要,在得到的拟合多项式)(xpn中使用原来节点所对应的变量x,可写为))2(()(0mnnxxxppxQ仍为一个关于x的n次多项式,正是我们要求的拟合多项式。Matlab实现:在MATLAB中可用函数aa=ployfit(x,y,n)来求得参数a,从而实现线性最小二乘拟合(当然也可以实现多项式函数拟合),其中参数x为给定结点数据的横坐标向量,y为对应的纵坐标向量,n为多项式的次数(如线性拟合则n为1,二次多项式拟合为2等),函数返回值aa为拟合的多项式系数。在求得多项式系数后,为了求得多项式的值,可用MATLAB函数y=polyval(aa,x)求得系数为aa的多项式在指定点x的函数值y。(1)【例】用多项式最小二乘拟合求电阻R与温度t之间的关系R=at+b:%多项式最小二乘数拟合(线性拟合实例)t=[20.532.5517395.7];r=[7658268739421032];