AmpGen
2.1
Toggle main menu visibility
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
9
namespace
AmpGen
{
10
enum
Strategy
{
linear
,
quadratic
,
cubic
,
quartic
};
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
AmpGen::Pade::Pade
Pade(const std::function< double(const double &)> &fcn, const double &min, const double &max, const Strategy &strat=Strategy::linear)
Definition
Pade.h:24
AmpGen::Pade::print
void print() const
Definition
Pade.h:43
AmpGen::Pade::operator()
T2 operator()(const T2 &s) const
Definition
Pade.h:31
AmpGen::Pade::Pade
Pade(const std::vector< double > &r, const double &min, const double &max)
Definition
Pade.h:18
AmpGen::detail::solve_pade
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)
AmpGen::fcn
Definition
Expression.h:464
AmpGen
Definition
AddCPConjugate.h:2
AmpGen::Strategy
Strategy
Definition
Pade.h:10
AmpGen::cubic
@ cubic
Definition
Pade.h:10
AmpGen::linear
@ linear
Definition
Pade.h:10
AmpGen::quadratic
@ quadratic
Definition
Pade.h:10
AmpGen::quartic
@ quartic
Definition
Pade.h:10
AmpGen
Pade.h
Generated on
for AmpGen by
1.17.0