采用最小二乘法找到数一些数据的拟合曲线计算误差。用Visual Studio 2022表示
以下是一个简单的C++程序,使用最小二乘法来拟合一组数据并计算误差。
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
// 定义最小二乘函数
void leastSquares(const vector<double>& x, const vector<double>& y, double& a, double& b) {
double x_avg = 0.0;
double y_avg = 0.0;
for (int i = 0; i < x.size(); i++) {
x_avg += x[i];
y_avg += y[i];
}
x_avg /= x.size();
y_avg /= y.size();
double sum_xy = 0.0;
double sum_x2 = 0.0;
for (int i = 0; i < x.size(); i++) {
sum_xy += (x[i] - x_avg) * (y[i] - y_avg);
sum_x2 += (x[i] - x_avg) * (x[i] - x_avg);
}
a = sum_xy / sum_x2;
b = y_avg - a * x_avg;
}
int main() {
// 假设有一组数据
vector<double> x = { 1.0, 2.0, 3.0, 4.0, 5.0 };
vector<double> y = { 2.0, 3.0, 4.0, 5.0, 6.0 };
// 使用最小二乘法计算拟合曲线
double a, b;
leastSquares(x, y, a, b);
// 输出拟合曲线的参数
cout << "y = " << a << "x + " << b << endl;
// 计算误差
double error = 0.0;
for (int i = 0; i < x.size(); i++) {
double diff = y[i] - a * x[i] - b;
error += diff * diff;
}
error = sqrt(error / x.size());
// 输出误差
cout << "误差为:" << error << endl;
return 0;
}
这个程序首先定义了一个leastSquares函数,用于计算最小二乘拟合曲线的参数。它接受两个向量x和y,分别代表输入的数据点的x和y坐标,以及两个引用变量a和b,分别代表拟合曲线的斜率和截距。函数中的计算公式与最小二乘法的公式一致。
在main函数中,我们定义了一组数据,然后调用leastSquares函数计算拟合曲线的参数。我们将这些参数输出到控制台,然后计算误差。误差的计算使用了均方根误差的公式。最后,我们将误差输出到控制台。
这个程序可以在Visual Studio 2022中编译运行
原文地址: https://www.cveoy.top/t/topic/flMV 著作权归作者所有。请勿转载和采集!