最小二乘法拟合直线

本文介绍如何使用最小二乘法进行直线拟合,包括确定直线参数a和b的过程,并给出了相关系数r的计算方法。通过一个具体的例子展示了整个计算流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

曲线拟合中最基本和最常用的是直线拟合。设xy之间的函数关系为:

                   ya+bx

式中有两个待定参数,a代表截距,b代表斜率。对于等精度测量所得到的N组数据xiyi),i12……,Nxi值被认为是准确的,所有的误差只联系着yi下面利用最小二乘法把观测数据拟合为直线。     

用最小二乘法估计参数时,要求观测值yi的偏差的加权平方和为最小。对于等精度观测值的直线拟合来说,可使下式的值最小:

最小二乘法拟合直线

上式分别对a、b求偏导得:
    最小二乘法拟合直线

整理后得到方程组

最小二乘法拟合直线


    解上述方程组便可求得直线参数ab的最佳估计值。

最小二乘法拟合直线

相关系数r:

最小二乘法处理数据除给出ab外,常常还给出相关系数r,  r定义为

最小二乘法拟合直线

最小二乘法拟合直线 

算例:我用一篇论文中的已知数据作为算例。最小二乘法拟合直线

计算:

最小二乘法拟合直线

代入上面推导出来的计算公式可得:

a=13.6284394650024    b=-0.0799231779033084


//最小二乘拟合计算直线的倾角  
int pointCount = pointVect.size();  
if (pointCount > 0)  
{  
    int xCount = 0;  
    int yCount = 0;  
    int xyCount = 0;  
    int xxCount = 0;  
    for (int i = 0; i< pointCount; i++)  
    {  
        xCount += pointVect.at(i).x;  
        yCount += pointVect.at(i).y;  
        xyCount += (pointVect.at(i).x * pointVect.at(i).y);  
        xxCount += (pointVect.at(i).x * pointVect.at(i).x);  
    }  
    double k = (double)(pointCount * xyCount - xCount * yCount) / (double)(pointCount * xxCount - xCount * xCount);  
    double sinValue = - k / (sqrt(1 + k * k));  
    double radian = asin(sinValue);  
        double pi = 3.1415926535;  
        double angle = radian * 180.0 / pi;  
}  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值