7.95 Bug in Jacobi elliptic function, Maple V to Maple 8 (2.11.98)

7.95.1 Robert Michael Sinclair

The expressions returned by Maple VR5 for the partial derivatives of JacobiSN(z,k), JacobiCN(z,k) and JacobiDN(z,k) with respect to k are not correct for all values of z. The reason is that they contain the subexpression EllipticE(JacobiSN(z, k), k) instead of the integral int(JacobiDN(v,k)^2,v=0..z). While it is true that both are equal for -EllipticK(k) <= z <= EllipticK(k), they are not in general equal for z outside this interval.

The example below illustrates the problem. The function d1 is Maple’s expression, d2 is the correct expression using the integral given above, and d3 is a difference quotient approximation to the partial derivative. In the first numerical comparison, z is less than EllipticK(k) (1.6<1.68...), but z is greater than EllipticK(k) in the other two. In the final comparison, both the sign and order of magnitude of Maple’s expression are incorrect.

    |\^/|     Maple V Release 5 (WMI Campus Wide License) 
._|\|   |/|_. Copyright (c) 1981-1997 by Waterloo Maple Inc. All rights 
 \  MAPLE  /  reserved. Maple and Maple V are registered trademarks of 
 <____ ____>  Waterloo Maple Inc. 
      |       Type ? for help. 
> d1:=unapply(diff(JacobiSN(z,k),k),z,k): 
> d2:=(z,k)->k/(1-k^2)*JacobiSN(z,k)-k/(1-k^2)*JacobiSN(z,k)^3 
>     +z/k*JacobiCN(z,k)*JacobiDN(z,k) 
>     -1/k/(1-k^2)*JacobiCN(z,k)*JacobiDN(z,k)*int(JacobiDN(v,k)^2,v=0..z): 
> d3:=(z,k)->(JacobiSN(z,k+1e-10)-JacobiSN(z,k))/1e-10: 
> Digits:=50: 
> EllipticK(0.5); 
                   1.6857503548125960428712036577990769895008008941411 
 
> zk:=1.6,0.5: d1(zk), evalf(d2(zk)), d3(zk); 
    -.03118216366846836883782434139289735504055016301907, 
    -.03118216366846836883782434139289735504055016301903, 
    -.0311821636805583075554137524327632560315 
 
> zk:=1.7,0.5: d1(zk), evalf(d2(zk)), d3(zk); 
     .005282011499481807709953789681659890276144429069717, 
     .005891184123212836060745180249782058869208078728551, 
     .0058911841124536887421084292997717937994 
 
> zk:=10.0,0.5: d1(zk), evalf(d2(zk)), d3(zk); 
  -19.459115391501625785648272200645954534230450114114, 
    3.223614644063210632808934334083732420054336805507, 
    3.2236146445474151176211871239861660835524
 

See also: Bug in derivative of JacobiDN