曲线拟合的最小二乘法c++
时间: 2023-06-22 07:47:46 浏览: 209
最小二乘法是一种常见的曲线拟合方法,它可以用于求解线性和非线性问题。下面是一个在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)
的值。
相关推荐














