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,
13 const double& min,
14 const double& max,
15 const unsigned& N,
16 const Strategy& strat = Strategy::linear);
17 }
18
19 template <unsigned N, class T = double> class Pade
20 {
21 public:
22 Pade( const std::vector<double>& r,
23 const double& min,
24 const double& max) : min(min), max(max)
25 {
26 for(unsigned i = 0; i <= N; ++i ) co_f[i] = r[i];
27 for(unsigned i = 0; i < N; ++i ) co_g[i] = r[i+(N+1)];
28 range = 1./(max-min);
29 }
30
31 Pade(const std::function<double(const double&)>& fcn,
32 const double& min,
33 const double& max,
34 const Strategy& strat = Strategy::linear) :
35 m_function(fcn), min(min),max(max)
36 {
37 auto r = detail::solve_pade(fcn, min, max, N, strat );
38 for(unsigned i = 0; i <= N; ++i ) co_f[i] = r[i];
39 for(unsigned i = 0; i < N; ++i ) co_g[i] = r[i+(N+1)];
40 range = 1./(max-min);
41 }
42 template <typename T2>
43 T2 operator()(const T2& s) const
44 {
45 T2 x = (s-min)*range;
46 T2 f = 0.;
47 T2 g = 1.;
48 T2 acc = 1.;
49 for(unsigned i = 0; i < N; ++i){
50 f += co_f[i] * acc;
51 acc *= x;
52 g += co_g[i] * acc;
53 }
54 return (f + co_f[N]*acc)/g;
55 }
56 void print() const {
57 for( int i = 0 ; i != N+1; ++i ) std::cout << co_f[i] << std::endl;
58 for( int i = 0 ; i != N ; ++i ) std::cout << co_g[i] << std::endl;
59 }
60 private:
61 std::function<double(const double&)> m_function;
62 std::array<T, N+1> co_f;
63 std::array<T, N> co_g;
64 T min;
65 T max;
66 T range;
67 };
68}
69
70#endif
Pade(const std::function< double(const double &)> &fcn, const double &min, const double &max, const Strategy &strat=Strategy::linear)
Definition Pade.h:31
void print() const
Definition Pade.h:56
T2 operator()(const T2 &s) const
Definition Pade.h:43
Pade(const std::vector< double > &r, const double &min, const double &max)
Definition Pade.h:22
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