c++ 写一个拟合优度计算函数
时间: 2023-11-02 09:06:40 浏览: 119
以下是一个简单的 C++ 函数,用于计算给定数据点集的拟合优度。该函数使用了最小二乘法来拟合数据并计算 R² 值。
```c++
#include <vector>
#include <cmath>
double calculateR2(const std::vector<double>& x, const std::vector<double>& y)
{
// 计算平均值
double sumX = 0.0, sumY = 0.0;
for (int i = 0; i < x.size(); i++) {
sumX += x[i];
sumY += y[i];
}
const double meanX = sumX / x.size();
const double meanY = sumY / y.size();
// 计算拟合直线
double numerator = 0.0, denominator = 0.0;
for (int i = 0; i < x.size(); i++) {
numerator += (x[i] - meanX) * (y[i] - meanY);
denominator += std::pow(x[i] - meanX, 2.0);
}
const double beta = numerator / denominator;
const double alpha = meanY - beta * meanX;
// 计算总平方和和残差平方和
double ssTotal = 0.0, ssResidual = 0.0;
for (int i = 0; i < x.size(); i++) {
const double yHat = alpha + beta * x[i];
ssTotal += std::pow(y[i] - meanY, 2.0);
ssResidual += std::pow(y[i] - yHat, 2.0);
}
// 计算拟合优度并返回
const double r2 = 1.0 - ssResidual / ssTotal;
return r2;
}
```
该函数需要两个向量作为输入,一个包含 x 坐标,另一个包含对应的 y 坐标。它首先计算输入数据的平均值,然后使用最小二乘法找到拟合直线的斜率和截距。最后,它计算总平方和和残差平方和,并用它们来计算拟合优度 R² 值。
阅读全文
相关推荐















