30 #include "gsl/gsl_sf_gamma.h"
31 #include "gsl/gsl_sf_pow_int.h"
35 namespace endfieldmodel {
37 std::vector< std::vector< std::vector<int> > >
Tanh::_tdi;
39 Tanh::Tanh(
double x0,
double lambda,
int max_index) : _x0(x0), _lambda(lambda) {
46 return new Tanh(*
this);
53 double lam_n = gsl_sf_pow_int(
_lambda, n);
55 for (
size_t i = 0; i <
_tdi[
n].size(); i++)
56 t += 1./lam_n*static_cast<double>(
_tdi[n][i][0])
57 *gsl_sf_pow_int(tanh_x,
_tdi[n][i][1]);
64 double lam_n = gsl_sf_pow_int(
_lambda, n);
66 for (
size_t i = 0; i <
_tdi[
n].size(); i++)
67 t += 1./lam_n*static_cast<double>(
_tdi[n][i][0])
68 *gsl_sf_pow_int(tanh_x,
_tdi[n][i][1]);
77 if (
_tdi.size() == 0) {
78 _tdi.push_back(std::vector< std::vector<int> >(1, std::vector<int>(2)));
82 for (
size_t i =
_tdi.size(); i < n+1; ++i) {
83 _tdi.push_back(std::vector< std::vector<int> >());
84 for (
size_t j = 0; j <
_tdi[i-1].size(); ++j) {
85 if (
_tdi[i-1][j][1] != 0) {
86 std::vector<int> new_vec(
_tdi[i-1][j]);
87 new_vec[0] *=
_tdi[i-1][j][1];
89 _tdi[i].push_back(new_vec);
91 if (
_tdi[i-1][j][1] != 0) {
92 std::vector<int> new_vec(
_tdi[i-1][j]);
93 new_vec[0] *= -
_tdi[i-1][j][1];
95 _tdi[i].push_back(new_vec);
109 out <<
"Tanh model with centre length: " <<
_x0
static void setTanhDiffIndices(size_t n)
EndFieldModel * clone() const
static std::vector< std::vector< std::vector< int > > > _tdi
double function(double x, int n) const
std::vector< std::vector< int > > CompactVector(std::vector< std::vector< int > > vec)
std::ostream & print(std::ostream &out) const
double getNegTanh(double x, int n) const
double getTanh(double x, int n) const
static std::vector< std::vector< int > > getTanhDiffIndices(size_t n)
Tps< T > tanh(const Tps< T > &x)
Hyperbolic tangent.