写出最小二乘法的c++代码
时间: 2023-08-30 07:07:43 浏览: 87
下面是用 C++ 编写的简单示例代码,用最小二乘法来拟合一条直线:
```cpp
#include <iostream>
#include <vector>
#include <cmath>
// 最小二乘法拟合直线
void leastSquaresFit(const std::vector<double>& x, const std::vector<double>& y, double& a, double& b) {
int n = x.size();
double sum_x = 0.0, sum_y = 0.0, sum_xy = 0.0, sum_x2 = 0.0;
// 计算相关的和
for (int i = 0; i < n; ++i) {
sum_x += x[i];
sum_y += y[i];
sum_xy += x[i] * y[i];
sum_x2 += x[i] * x[i];
}
// 计算参数
double avg_x = sum_x / n;
double avg_y = sum_y / n;
// 计算斜率和截距
a = (sum_xy - n * avg_x * avg_y) / (sum_x2 - n * avg_x * avg_x);
b = avg_y - a * avg_x;
}
int main() {
// 输入数据点
std::vector<double> x = {1.0, 2.0, 3.0, 4.0, 5.0};
std::vector<double> y = {2.0, 3.0, 4.0, 5.0, 6.0};
// 拟合直线参数
double a, b;
leastSquaresFit(x, y, a, b);
// 输出结果
std::cout << "拟合直线方程:y = " << a << "x + " << b << std::endl;
return 0;
}
```
在上述代码中,首先定义了一个函数 `leastSquaresFit` 来进行最小二乘法拟合。然后在 `main` 函数中输入了一组数据点 x 和 y,调用 `leastSquaresFit` 函数来计算拟合直线的参数 a 和 b,并输出结果。
请注意,这只是一个简单的示例代码,实际应用中可能需要根据具体情况进行适当的修改和扩展。
阅读全文