最小二乘法曲线拟合c++程序
时间: 2024-11-16 18:13:29 浏览: 3
VC-least-squares-curve-fitting-.rar_Curve Fitting vc++_最小二乘法曲线拟
最小二乘法是一种常用的数据拟合技术,它通过寻找一条直线或其他函数,使得实际数据点到这条线的垂直距离(误差)平方和最小。在C++中,你可以使用标准库中的`vector`容器和一些数学运算来实现这个过程。下面是一个简单的示例,展示如何使用最小二乘法来拟合一次多项式(y = ax + b):
```cpp
#include <iostream>
#include <vector>
#include <cmath>
// 定义线性回归模型
struct LinearRegression {
double a, b;
};
// 计算误差平方和
double sum_of_squares(const std::vector<double>& x, const std::vector<double>& y, const LinearRegression& model) {
double error_sum = 0.0;
for (size_t i = 0; i < x.size(); ++i) {
error_sum += pow(model.a * x[i] + model.b - y[i], 2);
}
return error_sum;
}
// 使用最小二乘法求解线性回归系数
LinearRegression least_square_fit(const std::vector<double>& x, const std::vector<double>& y) {
double sum_x = 0.0, sum_y = 0.0, sum_xy = 0.0, sum_xx = 0.0;
// 赋值均值
for (const auto& xi : x) {
sum_x += xi;
sum_y += y[i];
sum_xy += xi * y[i];
sum_xx += xi * xi;
}
size_t n = x.size();
double a = (n * sum_xy - sum_x * sum_y) / (n * sum_xx - sum_x * sum_x);
double b = (sum_y - a * sum_x) / n;
LinearRegression result {a, b};
return result;
}
int main() {
std::vector<double> x_data = {1, 2, 3, 4, 5};
std::vector<double> y_data = {2, 4, 6, 8, 10}; // 假设这是正比例的真实数据
LinearRegression fit = least_square_fit(x_data, y_data);
std::cout << "拟合线的方程: y = " << fit.a << "x + " << fit.b << std::endl;
阅读全文