请给出最小二乘法曲线拟合c++程序完整的程序代码
时间: 2024-12-14 07:15:24 浏览: 51
最小二乘法是一种常用的数据拟合技术,特别是在统计学和数学优化中。以下是一个简单的C++程序,它演示了如何使用最小二乘法来拟合一组二维数据点:
```cpp
#include <iostream>
#include <vector>
#include <cmath>
// 定义线性函数模型 (y = ax + b)
struct LinearModel {
double a;
double b;
};
// 求解最小二乘法拟合
LinearModel linear_regression(std::vector<std::pair<double, double>>& data) {
int n = data.size();
double sum_x = 0, sum_y = 0, sum_xy = 0, sum_xx = 0;
for (const auto& point : data) {
sum_x += point.first;
sum_y += point.second;
sum_xy += point.first * point.second;
sum_xx += pow(point.first, 2);
}
// 计算回归系数 a 和 b
double a = (n * sum_xy - sum_x * sum_y) / (n * sum_xx - pow(sum_x, 2));
double b = (sum_y - a * sum_x) / n;
return {a, b};
}
int main() {
std::vector<std::pair<double, double>> points = {{1, 2}, {2, 4}, {3, 5}, {4, 7}, {5, 9}}; // 示例数据
LinearModel model = linear_regression(points);
std::cout << "线性回归方程: y = " << model.a << "x + " << model.b << "\n";
return 0;
}
```
这个程序首先定义了一个线性模型结构体`LinearModel`,然后计算每个数据点的一维和、二维积以及一维平方和。最后通过公式求得斜率`a`和截距`b`,并返回一个`LinearModel`实例。
请注意,这只是一个基础的最小二乘法示例,实际应用中可能会处理更多维度的数据或者采用更复杂的数据结构和算法,例如矩阵运算库如Eigen或Boost uBLAS。
阅读全文