16 using namespace shogun;
21 "CJacobiEllipticFunctions::ellipKKp(): \
22 Parameter L should be non-negative\n");
25 const Real pi=mp_real::_pi;
37 Real m=exp(-2.0*pi*L);
41 K=compute_quarter_period(sqrt(mp));
42 Kp=Real(std::numeric_limits<float64_t>::max());
46 K=Real(std::numeric_limits<float64_t>::max());
47 Kp=compute_quarter_period(sqrt(m));
51 K=compute_quarter_period(sqrt(mp));
52 Kp=compute_quarter_period(sqrt(m));
58 ::ellipJC(Complex u, Real m, Complex &sn, Complex &cn, Complex &dn)
61 "CJacobiEllipticFunctions::ellipJC(): \
62 Parameter m should be >=0 and <=1\n");
65 const Real eps=sqrt(mp_real::_eps);
81 sn=mp_complex(_sn.real(),_sn.imag());
82 cn=mp_complex(_cn.real(),_cn.imag());
83 dn=mp_complex(_dn.real(),_dn.imag());
87 Complex ai=0.25*(1.0-m);
89 sn=t+ai*(twon-u)/(b*b);
90 Complex phi=Real(1.0)/b;
98 const Real prec=4.0*eps;
101 Real kappa[MAX_ITER];
103 while (i<MAX_ITER && m>prec)
117 Complex sin_u=sin(u);
118 Complex cos_u=cos(u);
119 Complex t=Real(0.25*m)*(u-sin_u*cos_u);
122 dn=Real(1.0)+Real(0.5*m)*(cos_u*cos_u);
128 Complex ksn2=k*(sn*sn);
129 Complex d=Real(1.0)+ksn2;
132 dn=(Real(1.0)-ksn2)/d;