c++最小二乘法拟合代码
时间: 2024-01-25 19:11:53 浏览: 51
以下是使用C++编写的最小二乘法拟合代码的示例:
```cpp
#include <iostream>
#include <vector>
#include <Eigen/Dense>
using namespace std;
using namespace Eigen;
// 最小二乘法拟合函数
void leastSquaresFit(const vector<double>& xData, const vector<double>& yData, int order)
{
int numPoints = xData.size();
int numCoefficients = order + 1;
MatrixXd A(numPoints, numCoefficients);
VectorXd b(numPoints);
// 构建矩阵A和向量b
for (int i = 0; i < numPoints; i++) {
double x = xData[i];
double y = yData[i];
for (int j = 0; j < numCoefficients; j++) {
A(i, j) = pow(x, j);
}
b(i) = y;
}
// 使用最小二乘法求解系数向量
VectorXd coefficients = A.colPivHouseholderQr().solve(b);
// 输出拟合的多项式
cout << "拟合的多项式为:f(x) = ";
for (int i = 0; i < numCoefficients; i++) {
cout << coefficients(i) << " * x^" << i;
if (i < numCoefficients - 1) {
cout << " + ";
}
}
cout << endl;
}
int main()
{
// 示例数据
vector<double> xData = {1.0, 2.0, 3.0, 4.0, 5.0};
vector<double> yData = {2.0, 4.0, 6.0, 8.0, 10.0};
// 拟合阶次
int order = 1;
// 调用最小二乘法拟合函数
leastSquaresFit(xData, yData, order);
return 0;
}
```
该示例代码使用了Eigen库来进行矩阵运算和最小二乘法求解。首先,我们定义了一个`leastSquaresFit`函数,该函数接受x和y数据以及拟合的阶次作为参数。在函数内部,我们构建了系数矩阵A和向量b,并使用最小二乘法求解出系数向量。最后,我们输出拟合的多项式。
在`main`函数中,我们提供了示例数据和拟合的阶次,并调用了`leastSquaresFit`函数进行拟合。