AmpGen 2.1
Loading...
Searching...
No Matches
Pade.h
Go to the documentation of this file.
1#ifndef AMPGEN_PADE_H
2#define AMPGEN_PADE_H
3
4#include <array>
5#include <functional>
6#include <vector>
7#include <iostream>
8
9namespace AmpGen {
11 namespace detail {
12 std::vector<double> solve_pade(const std::function<double(const double &)> &fcn, const double &min, const double &max, const unsigned &N,
13 const Strategy &strat = Strategy::linear);
14 }
15
16 template <unsigned N, class T = double> class Pade {
17 public:
18 Pade(const std::vector<double> &r, const double &min, const double &max) : min(min), max(max) {
19 for(unsigned i = 0; i <= N; ++i) co_f[i] = r[i];
20 for(unsigned i = 0; i < N; ++i) co_g[i] = r[i + (N + 1)];
21 range = 1. / (max - min);
22 }
23
24 Pade(const std::function<double(const double &)> &fcn, const double &min, const double &max, const Strategy &strat = Strategy::linear)
25 : m_function(fcn), min(min), max(max) {
26 auto r = detail::solve_pade(fcn, min, max, N, strat);
27 for(unsigned i = 0; i <= N; ++i) co_f[i] = r[i];
28 for(unsigned i = 0; i < N; ++i) co_g[i] = r[i + (N + 1)];
29 range = 1. / (max - min);
30 }
31 template <typename T2> T2 operator()(const T2 &s) const {
32 T2 x = (s - min) * range;
33 T2 f = 0.;
34 T2 g = 1.;
35 T2 acc = 1.;
36 for(unsigned i = 0; i < N; ++i) {
37 f += co_f[i] * acc;
38 acc *= x;
39 g += co_g[i] * acc;
40 }
41 return (f + co_f[N] * acc) / g;
42 }
43 void print() const {
44 for(int i = 0; i != N + 1; ++i) std::cout << co_f[i] << std::endl;
45 for(int i = 0; i != N; ++i) std::cout << co_g[i] << std::endl;
46 }
47
48 private:
49 std::function<double(const double &)> m_function;
50 std::array<T, N + 1> co_f;
51 std::array<T, N> co_g;
52 T min;
53 T max;
54 T range;
55 };
56}
57
58#endif
Pade(const std::function< double(const double &)> &fcn, const double &min, const double &max, const Strategy &strat=Strategy::linear)
Definition Pade.h:24
void print() const
Definition Pade.h:43
T2 operator()(const T2 &s) const
Definition Pade.h:31
Pade(const std::vector< double > &r, const double &min, const double &max)
Definition Pade.h:18
std::vector< double > solve_pade(const std::function< double(const double &)> &fcn, const double &min, const double &max, const unsigned &N, const Strategy &strat=Strategy::linear)
Strategy
Definition Pade.h:10
@ cubic
Definition Pade.h:10
@ linear
Definition Pade.h:10
@ quadratic
Definition Pade.h:10
@ quartic
Definition Pade.h:10