9#ifndef DRYCHEM_COMMON_UTILITIES_INCLUDE_COMMON_UTILS_MATH_STATISTICS_LINEARLEASTSQUARESFITTING_HPP
10#define DRYCHEM_COMMON_UTILITIES_INCLUDE_COMMON_UTILS_MATH_STATISTICS_LINEARLEASTSQUARESFITTING_HPP
30 template<
typename T_slope,
typename T_intercept = T_slope,
typename T_variance = T_slope,
31 typename = std::enable_if_t<std::conjunction_v<std::is_default_constructible<T_slope>,
32 std::is_default_constructible<T_intercept>,
33 std::is_default_constructible<T_variance>>>>
67 template<
typename IteratorX,
typename IteratorY = IteratorX,
68 typename Tx =
typename std::iterator_traits<IteratorX>::value_type,
69 typename Ty =
typename std::iterator_traits<IteratorY>::value_type,
70 typename = std::enable_if_t<std::conjunction_v<std::is_default_constructible<Tx>, std::is_default_constructible<Ty>>>>
73 using Txx =
decltype(*x_begin * *x_begin);
74 using Txy =
decltype(*x_begin * *y_begin);
75 using Tyy =
decltype(*y_begin * *y_begin);
76 using Ty_x =
decltype(*y_begin / *x_begin);
77 using Tyy_xx =
decltype(*y_begin * *y_begin / *x_begin / *x_begin);
79 std::ptrdiff_t x_size {x_end - x_begin}, y_size {y_end - y_begin};
89 IteratorX x_iter = x_begin;
90 IteratorY y_iter = y_begin;
92 Txy slope_numerator {};
93 Txx slope_denominator {};
95 while (x_iter != x_end)
97 slope_numerator += (*x_iter - x_average) * (*y_iter - y_average);
98 slope_denominator += (*x_iter - x_average) * (*x_iter - x_average);
104 results.
slope = slope_numerator / slope_denominator;
105 results.intercept = y_average - (results.slope * x_average);
107 Tyy var_numerator {};
112 while (y_iter != y_end)
114 Ty res {*y_iter - (results.slope * (*x_iter) + results.intercept)};
115 var_numerator += res * res;
121 results.variance = var_numerator / (slope_denominator * (y_size - 2));
Definition nPointStencil.hpp:25
Definition backwardsDifferenceMethod.hpp:20
constexpr T calculateAverage(Iterator x_begin, Iterator x_end)
Definition statistics.hpp:62
constexpr decltype(auto) linearLeastSquaresFitting(IteratorX x_begin, IteratorX x_end, IteratorY y_begin, IteratorY y_end)
Definition linearLeastSquaresFitting.hpp:71
Definition linearLeastSquaresFitting.hpp:35
T_variance variance
Definition linearLeastSquaresFitting.hpp:38
T_slope slope
Definition linearLeastSquaresFitting.hpp:36
T_intercept intercept
Definition linearLeastSquaresFitting.hpp:37