C++程序实现最小二乘法算法
时间: 2024-09-08 12:04:02 浏览: 89
最小二乘法是一种数学优化技术,它通过最小化误差的平方和来寻找数据的最佳函数匹配。在C++中实现最小二乘法算法通常涉及线性回归分析。线性回归的目标是找到一条直线(或更一般的情况下的曲线),使得这条直线与观测数据点之间的差异(垂直距离)的平方和最小。这种方法适用于数据拟合、建模和预测等问题。
下面是一个简单的线性最小二乘法的C++实现,该例子假设我们要拟合一条直线 y = ax + b:
```cpp
#include <iostream>
#include <vector>
#include <utility> // For std::pair
// 使用std::pair来存储点对(x, y)
typedef std::pair<double, double> Point;
// 计算线性回归的参数a和b
void linearLeastSquares(const std::vector<Point>& points, double& a, double& b) {
size_t n = points.size();
double sumX = 0, sumY = 0, sumXY = 0, sumX2 = 0;
for (const auto& p : points) {
sumX += p.first;
sumY += p.second;
sumXY += p.first * p.second;
sumX2 += p.first * p.first;
}
// 根据最小二乘法公式计算a和b
double xMean = sumX / n;
double yMean = sumY / n;
a = (sumXY - n * xMean * yMean) / (sumX2 - n * xMean * xMean);
b = yMean - a * xMean;
}
int main() {
// 示例数据点
std::vector<Point> points = {{1, 2}, {2, 3}, {4, 5}, {5, 7}, {6, 8}};
double a, b;
// 计算最小二乘法线性回归参数
linearLeastSquares(points, a, b);
std::cout << "Best fit line is y = " << a << "x + " << b << std::endl;
return 0;
}
```
这个例子中,我们定义了一个`Point`类型来存储数据点对,然后使用一个函数`linearLeastSquares`来计算最佳拟合直线的斜率(`a`)和截距(`b`)。在`main`函数中,我们创建了一组示例数据点,调用了`linearLeastSquares`函数,并输出了拟合直线的方程。
阅读全文