This is the mail archive of the gsl-discuss@sources.redhat.com mailing list for the GSL project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Elliptic integral and function


My understanding is that the Jacobi elliptic function is the inverse
of the elliptic function.  That is, 
  sn(K(k),k) = 1
  cn(K(k),k) = 0
  dn(K(k),k) = sqrt(1-k^2)
see http://mathworld.wolfram.com/JacobiEllipticFunctions.html

but when I try this I get e.g.
gsltest 0.5
k=  0.50000000000000 K(k)=  1.68575035481260
sn=  0.99289175131682 cn=  0.11902088122262 dn=  0.71209759519570
all three of these seem wrong.  My driver program is attached.

What is wrong here?  Thank you for any light you can shed on this. 

Liam 

/* ******************************************************** */
/*  file:        gsltest.c                                  */
/*  description: Test the GSL                               */
/*  date:        Mon Dec 17 2001 - 10:09                    */
/*  author:      Liam Healy <Liam.Healy@nrl.navy.mil>       */
/*  modified:    Mon Dec 17 2001 - 11:45 */
/* ******************************************************** */

/* Compile with:
   gcc gsltest.c -lgslcblas -lgsl -o gsltest 
   Run:
     source ~/bin/libpath /usr/local/lib/
     gsltest
*/


#include <stdio.h>
#include <stdlib.h>
#include <gsl/gsl_sf_ellint.h>
#include <gsl/gsl_sf_elljac.h>

int main(int argc, char *argv[]) {
  double k, kk;
  double sn, cn, dn;
  int ret;

  k = atof(argv[1]);
  kk = gsl_sf_ellint_Kcomp (k, GSL_PREC_DOUBLE);
  ret = gsl_sf_elljac_e (kk, k, &sn, &cn, &dn); 

  printf("k=%18.14f K(k)=%18.14f\n",k,kk);
  printf("sn=%18.14f cn=%18.14f dn=%18.14f\n",sn,cn,dn);
}

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]