CbmRoot
Loading...
Searching...
No Matches
KfMath.h
Go to the documentation of this file.
1/* Copyright (C) 2024 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Sergei Zharko [committer] */
4
9
10#pragma once
11
12#include <cstddef>
13
15{
16
21 inline constexpr int SymIndex(int i, int j) { return (j <= i) ? i * (1 + i) / 2 + j : j * (1 + j) / 2 + i; }
22
23
27 constexpr size_t NofPolCoefficients(size_t N, size_t M)
28 {
29 return M == 1 ? N + 1 : (NofPolCoefficients(N, M - 1) * (M + N)) / M;
30 }
31
42 template<size_t N, typename T>
43 constexpr T Horner(const T* c, const T& x)
44 {
45 if constexpr (N == 0) {
46 return c[0];
47 }
48 else {
49 return Horner<N - 1, T>(c, x) * x + c[N];
50 }
51 }
52
82 template<size_t N, typename T, typename... Args>
83 constexpr T Horner(const T* c, const T& x1, Args... xI)
84 {
85 if constexpr (N == 0) {
86 return c[0];
87 }
88 else {
89 constexpr size_t M = sizeof...(Args) + 1;
90 constexpr size_t k = NofPolCoefficients(N - 1, M);
91 return Horner<N - 1, T>(c, x1, xI...) * x1 + Horner<N, T>(c + k, xI...);
92 }
93 }
94} // namespace cbm::algo::kf::math
constexpr size_t NofPolCoefficients(size_t N, size_t M)
Number of coefficients in a polynomial.
Definition KfMath.h:27
constexpr int SymIndex(int i, int j)
Get matrix element for a symmetrix matrix stored in a low-triangular array.
Definition KfMath.h:21
constexpr T Horner(const T *c, const T &x)
Horner's scheme for a 1D-polynomial estimation.
Definition KfMath.h:43
@ N
Do not fit the time component.
Definition KfDefs.h:133