离散点拟合成直线C++
时间: 2023-08-16 22:05:35 浏览: 228
在C++中,可以使用最小二乘法来拟合离散点成直线。以下是一个简单的示例程序:
```cpp
#include <iostream>
#include <vector>
#include <cmath>
// 定义线性回归函数
void linearRegression(const std::vector<double>& x, const std::vector<double>& y, double& slope, double& intercept)
{
int n = x.size();
double sumX = 0.0, sumY = 0.0, sumXY = 0.0, sumXX = 0.0;
for (int i = 0; i < n; i++) {
sumX += x[i];
sumY += y[i];
sumXY += x[i] * y[i];
sumXX += x[i] * x[i];
}
double meanX = sumX / n;
double meanY = sumY / n;
slope = (sumXY - n * meanX * meanY) / (sumXX - n * meanX * meanX);
intercept = meanY - slope * meanX;
}
int main()
{
std::vector<double> x = {1.0, 2.0, 3.0, 4.0, 5.0};
std::vector<double> y = {2.0, 3.0, 4.0, 5.0, 6.0};
double slope, intercept;
linearRegression(x, y, slope, intercept);
std::cout << "Slope: " << slope << std::endl;
std::cout << "Intercept: " << intercept << std::endl;
return 0;
}
```
在上面的示例中,我们定义了一个名为`linearRegression`的函数,它接受两个向量x和y作为输入,并通过最小二乘法计算出斜率(slope)和截距(intercept)。然后在主函数中,我们传入一些离散点的x和y值,调用该函数进行拟合,最后打印出斜率和截距的结果。
请注意,这只是一个简单的示例,实际应用中可能需要更多的错误处理和优化。
阅读全文