c++最小二乘法求多项式系数
时间: 2023-06-22 14:26:48 浏览: 111
使用最小二乘法求多项式系数的步骤如下:
1.确定多项式的次数n,假设多项式为y=a0+a1*x+a2*x^2+...+an*x^n。
2.确定x和y的数据集,假设有m组数据,分别为(x1,y1),(x2,y2),...,(xm,ym)。
3.构造矩阵A和向量B:
- A矩阵为n+1阶的矩阵,第i行第j列的元素为xi^(j-1)。
- B向量为n+1维的列向量,第i个元素为yi。
4.求解线性方程组A^T*A*X=A^T*B,其中X为多项式系数的列向量。
5.将X中的元素依次赋值给a0,a1,...,an即可。
下面是C++代码实现:
```c++
#include <iostream>
#include <vector>
#include <Eigen/Dense> //需要安装Eigen库
using namespace std;
using namespace Eigen;
vector<double> polyfit(vector<double> x, vector<double> y, int n) {
int m = x.size();
MatrixXd A(m, n+1);
VectorXd B(m);
for (int i = 0; i < m; i++) {
B(i) = y[i];
for (int j = 0; j <= n; j++) {
A(i, j) = pow(x[i], j);
}
}
VectorXd X = (A.transpose() * A).inverse() * A.transpose() * B;
vector<double> coef(n+1);
for (int i = 0; i <= n; i++) {
coef[i] = X(i);
}
return coef;
}
int main() {
vector<double> x = {1, 2, 3, 4, 5};
vector<double> y = {0.5, 2.5, 2, 4, 3.5};
int n = 2;
vector<double> coef = polyfit(x, y, n);
for (int i = 0; i <= n; i++) {
cout << "a" << i << " = " << coef[i] << endl;
}
return 0;
}
```
输出结果为:
```
a0 = 0.428571
a1 = 0.714286
a2 = 0.0714286
```
即多项式为y=0.428571+0.714286*x+0.0714286*x^2。
阅读全文