Files
Jungfraujoch/image_analysis/Regression.h

44 lines
1.1 KiB
C++

// Copyright (2019-2024) Paul Scherrer Institute
// Copyright (2019-2024) Paul Scherrer Institute
#ifndef JUNGFRAUJOCH_REGRESSION_H
#define JUNGFRAUJOCH_REGRESSION_H
#include <vector>
#include <utility>
#include "../common/JFJochException.h"
struct RegressionResult {
double intercept;
double slope;
};
inline RegressionResult regression(std::vector<float> &x, std::vector<float> &y) {
if (x.size() != y.size())
throw JFJochException(JFJochExceptionCategory::InputParameterInvalid,
"Regression: mismatch between input parameter size");
double x_sum = 0.0;
double y_sum = 0.0;
double xy_sum = 0.0;
double x2_sum = 0.0;
for (int i = 0; i < x.size(); i++) {
x_sum += x[i];
y_sum += y[i];
x2_sum += x[i] * x[i];
xy_sum += x[i] * y[i];
}
double denominator = x.size() * x2_sum - x_sum * x_sum;
double intercept = (y_sum * x2_sum - x_sum * xy_sum) / denominator;
double slope = (x.size() * xy_sum - x_sum * y_sum) / denominator;
return {
.intercept = intercept,
.slope = slope
};
};
#endif //JUNGFRAUJOCH_REGRESSION_H