C++ 曲线趋势拟合
时间: 2023-07-11 11:23:03 浏览: 102
在 C++ 中进行曲线趋势拟合,你可以使用一些数学库,例如 GNU Scientific Library (GSL)、Eigen 等。以下是一个使用 Eigen 进行多项式拟合的示例代码:
```cpp
#include <iostream>
#include <Eigen/Dense>
using namespace Eigen;
int main()
{
// 原始数据
VectorXd xData(5), yData(5);
xData << 0, 1, 2, 3, 4;
yData << 1.2, 2.5, 3.6, 4.8, 6.1;
// 多项式拟合
int degree = 2; // 多项式次数
MatrixXd A(xData.size(), degree+1);
for (int i = 0; i < A.rows(); i++) {
for (int j = 0; j < A.cols(); j++) {
A(i, j) = pow(xData(i), j);
}
}
VectorXd coefficients = A.fullPivHouseholderQr().solve(yData);
// 输出拟合结果
std::cout << "拟合结果:" << std::endl;
for (int i = 0; i < coefficients.size(); i++) {
std::cout << "x^" << i << ": " << coefficients(i) << std::endl;
}
return 0;
}
```
上面的代码中,我们使用 Eigen 中的 `VectorXd` 和 `MatrixXd` 类型来表示向量和矩阵,使用 `pow` 函数计算多项式的幂。然后,我们将数据和多项式矩阵合并,使用 QR 分解求解线性方程组,得到多项式系数。
注意,上面的示例代码仅仅是一个简单的示例,实际应用中需要根据具体情况进行调整和优化。此外,需要注意的是,多项式拟合可能会出现过拟合现象,因此需要根据实际数据选择合适的拟合模型和方法。
阅读全文