《最小二乘法C语言程序.docx》由会员分享,可在线阅读,更多相关《最小二乘法C语言程序.docx(5页珍藏版)》请在三一办公上搜索。
1、最小二乘法C语言程序为明确解释变量和随机误差各产生的效应是多少,统计上把数据点与它在回归直线上相应位置的差异称为残差,把每个残差的平方和称为残差平方和,它表示随机误差的效应。S=n(y-y)ii=02in2设所示直线议程为y=ax+b,最小二乘法就是示使得残差平方和M=y-(ax+b)ii=1最小时a和b的值。把M看作a和b的函数,通过求多元函数偏导求最小值时的a和b。 nnMMMa(a,b)=-2yi-(axi+b)=0 Mb(a,b)=-2iy-(aix+b)= 0abi=1i=1nnnnn即:axi=12i+bxi=xiyi axi+nb=yi i=1i=1i=1i=1nn化简得:a=n
2、xiyi-xiyii=1nnxi2-(xi)2i=1i=1ni=1ni=1 b=y-a x求出其取极值时的a和b值取可得直线拟合的方程。其C语言程序如下: #include #include double lineK; int i; double tempMu; double tempZi; int v; double delta; double lineB; int q; void main double X50 = 0.00,0.40,0.80,1.20,1.61,2.02,2.44,2.85,3.27,3.68,4.10,4.51,4.92,5.33,5.73,6.14,6.54,6.9
3、4,7.34,7.74,8.14,8.54,8.94,9.34,9.75,10.15,10.56,10.97,11.38,11.80,12.21,12.62,13.04,13.46,13.87,14.29,14.71,15.13,15.55,15.97,16.40,16.82,17.24,17.67,18.09,18.51,19.36,19.79,20.21 ; double Y50 = 0.00,10.0,20.0,30.0,40.0,50.0,60.0,70.0,80.0,90.0,100.0,110.0,120.0,130.0,140.0,150.0,160.0,170.0,180.0,
4、190.0,200.0,210.0,220.0,230.0,240.0,250.0,260.0,270.0,280.0,290.0,300.0,310.0,320.0,330.0,340.0,350.0,360.0,370.0,380.0,390.0,400.0,410.0,420.0,430.0,440.0,450.0,460.0,470.0,480.0,490.0; double midx; double midy; double g; midx=0; midy=0; /求平均值 for(i=0;i50;+i) midx+=(Xi/50.0); midy+=(Yi/50.0); /求斜率
5、lineK=0; tempMu=0; tempZi=0; for(v=0;v50;+v) tempMu+=(Xv-midx)*(Xv-midx); tempZi+=(Xv-midx)*(Yv-midy); if(tempMu=0) printf(failn); lineK=tempZi/tempMu; /求截距 lineB=midy-lineK*midx; / printf(直线方程:n); printf(Y=); printf(%f,lineK); printf(x+); printf(%f,lineB); printf(n); /求误差 for(q=0;q50;+q) delta=Yq-lineK*Xq-lineB; printf(%dn,delta);