曲线拟合的最小二乘法c++
时间: 2023-06-22 12:47:46 浏览: 189
最小二乘法是一种常见的曲线拟合方法,它可以用于求解线性和非线性问题。下面是一个在C++中实现最小二乘法的示例代码:
```c++
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
// 定义一个二次多项式的类
class QuadraticPolynomial {
public:
QuadraticPolynomial(double a = 0, double b = 0, double c = 0) : a(a), b(b), c(c) {}
double operator() (double x) const {
return a * x * x + b * x + c;
}
double a, b, c;
};
// 定义一个最小二乘法的函数
QuadraticPolynomial leastSquares(const vector<pair<double, double>>& points) {
double sx = 0, sy = 0, sxx = 0, sxy = 0, n = points.size();
for (const auto& p : points) {
sx += p.first;
sy += p.second;
sxx += p.first * p.first;
sxy += p.first * p.second;
}
double det = n * sxx - sx * sx;
double a = (n * sxy - sx * sy) / det;
double b = (sxx * sy - sx * sxy) / det;
double c = (-a * sx - b * sy) / n;
return QuadraticPolynomial(a, b, c);
}
int main() {
vector<pair<double, double>> points = {{1, 2}, {2, 4}, {3, 5}, {4, 7}};
QuadraticPolynomial f = leastSquares(points);
cout << "f(2.5) = " << f(2.5) << endl;
return 0;
}
```
在这个例子中,我们定义了一个二次多项式类`QuadraticPolynomial`,它包含三个系数`a`、`b`、`c`,可以用来表示二次函数`f(x) = ax^2 + bx + c`。我们还定义了一个最小二乘法函数`leastSquares`,它接受一个点集`points`,返回一个`QuadraticPolynomial`对象,表示对这些点进行拟合的二次函数。最后,在`main`函数中,我们调用`leastSquares`函数,得到拟合函数`f`,并输出`f(2.5)`的值。
阅读全文