Specifically, I know that JacobiCN[EllipticF[I x, 2], 2]==Cosh[x] for complex x (e.g., check with series expansion in x about x=0), but FullSimplify will neither confirm the identity nor simplify the left side to the right side.

How can I "teach" MMA to simplify the above to Cosh[x]? There are a number of other Jacobi Elliptic function identities that I would like to "teach" MMA in order to make life easy.

CLARIFICATION: I would like the following to yield Cosh[x]

FullSimplify[JacobiCN[EllipticF[I x], 2], 2]

I would like it to do so for any argument, not just x, since I don't know in advance what the argument will be. For example,

FullSimplify[JacobiCN[EllipticF[I y], 2], 2]==Cosh[y]

FullSimplify[JacobiCN[EllipticF[I Sin[a]^b, 2], 2]==Cosh[Sin[a]^b]

should both yield True. x,y,a,b, etc. are generally complex numbers.

  • 1
    $\begingroup$ It would be useful you post the code you have tried. In a hurry, I would use in FullSimplify the option Assumptions->JacobiCN[EllipticF[I x, 2], 2]==Cosh[x] or in your expression to be simplified the rule /. JacobiCN[EllipticF[I x, 2], 2]->Cosh[x] $\endgroup$ Dec 14, 2017 at 18:20

2 Answers 2


you may want to play with TransformationFunctions

t[JacobiCN[EllipticF[I x_, 2], 2]] := Cosh[x]
FullSimplify[JacobiCN[EllipticF[I y, 2], 2], 
 TransformationFunctions -> {Automatic, t}]


FullSimplify[JacobiCN[EllipticF[I Sin[a]^b, 2], 2], 
 TransformationFunctions -> {Automatic, t}]


note it seems you could do this as well (cleaner):

t[JacobiCN[EllipticF[x_, 2], 2]] := Cosh[-I x]

you should verify correctness though.


For instance:

JacobiCN[EllipticF[I Sin[a x + Sqrt[3]], 2], 2] /. 
JacobiCN[EllipticF[I x_, 2], 2] ->  Cosh[x]

which returns

Cosh[Sin[Sqrt[3] + a x]]

However, I am puzzled as MMA does not recognised the equality between the terms you are trying to make equal:

JacobiCN[EllipticF[I y, 2], 2] === Cosh[y]

(* False *)

If so, maybe this could be the reason why FullSimplify does not work.

  • $\begingroup$ There's some serious whackiness here: xne = FindInstance[JacobiCN[EllipticF[I x, 2], 2] != Cosh[x], x][[1]] (* {x -> 899/10 + (578 I)/5} *) But, in fact, they agree to 50 places: N[Cosh[x] /. xne, 50] (* -4.4321692141504986119689214681396443885366308222468*10^38 + 3.2925662127511753354382365101127987767774575518821*10^38 I *) N[JacobiCN[EllipticF[I x, 2], 2] /. xne, 50] (* -4.4321692141504986119689214681396443885366308222468*10^38 + 3.2925662127511753354382365101127987767774575518821*10^38 I *) $\endgroup$
    – John Doty
    Dec 14, 2017 at 20:00
  • $\begingroup$ Notably, machine precision introduces an error of approximately $10^{38}$ in the absolute value of the difference, so it might be that the comparison operators are being careless with error management when converting to real numbers to determine < and ==. Perhaps a bug? Using that x value, and calling LHS-RHS v, Re[v]<0 and Im[v]>0, according to Mathematica. $\endgroup$
    – eyorble
    Dec 14, 2017 at 21:37
  • $\begingroup$ I'm not sure this is relevant, but when JacobiXX[u,m] should return a real result, it returns that real plus a very small (choppable) imaginary part, so Chop[JacobiXX[u,m]] is the more accurate estimate of XX[u,m]. $\endgroup$
    – Paul R.
    Dec 19, 2017 at 15:28

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.