72 using Txx =
decltype(*x_begin * *x_begin);
73 using Txxx =
decltype(*x_begin * *x_begin * *x_begin);
74 using Txxxx =
decltype(*x_begin * *x_begin * *x_begin * *x_begin);
76 using Txy =
decltype(*x_begin * *y_begin);
77 using Txxy =
decltype(*x_begin * *x_begin * *y_begin);
79 using Ty_x =
decltype(*y_begin / *x_begin);
80 using Ty_xx =
decltype(*y_begin / *x_begin / *x_begin);
82 const std::ptrdiff_t x_size {x_end - x_begin}, y_size {y_end - y_begin};
99 IteratorX x_iter = x_begin;
100 IteratorY y_iter = y_begin;
102 while (x_iter != x_end)
104 const Tx x_i = (*x_iter);
105 const Ty y_i = (*y_iter);
109 x3 += x_i * x_i * x_i;
110 x4 += x_i * x_i * x_i * x_i;
115 x2y1 += x_i * x_i * y_i;
121 auto denominator = x4 * (x2 * x_size - x1 * x1) - x3 * (x3 * x_size - x1 * x2) + x2 * (x3 * x1 - x2 * x2);
123 auto a_numerator = x2y1 * (x2 * x_size - x1 * x1) - x3 * (x1y1 * x_size - x1 * y1) + x2 * (x1y1 * x1 - x2 * y1);
124 auto b_numerator = x4 * (x1y1 * x_size - x1 * y1) - x2y1 * (x3 * x_size - x1 * x2) + x2 * (x3 * y1 - x1y1 * x2);
125 auto c_numerator = x4 * (x2 * y1 - x1y1 * x1) - x3 * (x3 * y1 - x1y1 * x2) + x2y1 * (x3 * x1 - x2 * x2);
127 results.
a = a_numerator / denominator;
128 results.b = b_numerator / denominator;
129 results.c = c_numerator / denominator;
constexpr decltype(auto) quadraticLeastSquaresFitting(IteratorX x_begin, IteratorX x_end, IteratorY y_begin, IteratorY y_end)
Definition quadraticLeastSquaresFitting.hpp:70