最小二乘法直线拟合计算

说明
	最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小 。

最小二乘法还可用于曲线拟合,其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达 。

C++代码
bool leastSquare(const QVector<double>& x, const QVector<double>& y, double& k, double& b)
{
    /** 公式:
    *       y1=ax1+bn
    *       y2=ax2+bx1
    ** 求解a,b
    */
    double x1 = 0, x2 = 0, y1 = 0, y2 = 0;
    int n = x.size();
    for (int i = 0; i < n; ++i)
    {
        x1 += x[i] * x[i];
        x2 += x[i];
        y1 += x[i] * y[i];
        y2 += y[i];
    }
    if ((x1 * y1 - n * x2) == 0 || (n * x2 - x1 * x1) == 0)
    {
        k = 0;
        b = 0;
        return false;
    }

    k = (x1 * y1 - n * y2) / (x1 * x1 - n * x2);
    b = (x2 * y1 - x1 * y2) / (n * x2 - x1 * x1);
    return true;
}

void main()
{
 	    QVector<double> xVector, yVector;
        for (int i= 0; i< 10; i++)
        {
            xVector << i;
            yVector << i;
       }
       double k = 0, b = 0;
       leastSquare(xVector, yVector, k, b)
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值