REDUCE

20.19 ELLIPFN: A Package for Elliptic Functions and Integrals

Additional documentation and examples can be found in the files efellip.tex, eftheta.tst and efweier.tst in the packages/ellipfn directory.

Author: Lisa Temme and Alan Barnes with contributions from Winfried Neun and several others.

20.19.1 Elliptic Functions: Introduction

The package ELLIPFN is designed to provide algebraic and numeric manipulations of many elliptic functions, namely:

20.19.2 Elliptic Functions

The implementation of the functions in this and the next two subsections have been substantially revised by Alan Barnes in 2019. This is to bring the notation more into line with standard (British) texts such as Whittaker & Watson [WW69] and Lawden [Law89] and also to correct a number of errors and omissions. These changes and additions will be itemised in the relevant sections below. New subsections has been added in 2021 to support Weierstrassian Elliptic functions, Sigma functions and inverse Jacobi elliptic functions.

The functions in this subsection are for the most part autoloading; the exceptions being the subsidiary utility functions such as the AGM function, the quasi-period factors, lattice functions and derivatives of the theta functions.

20.19.3 Jacobi Elliptic Functions

The following functions have been implemented:

The following Jacobi elliptic functions are available:-

These differ somewhat from the originals implemented by Lisa Temme in that the second argument is now the modulus (usually denoted by k in most texts rather than its square m). The notation for the most part follows Lawden [Law89]. The last nine Jacobi functions are related to the three basic ones: jacobisn(u,k), jacobicn(u,k) and jacobidn(u,k) and use Glaisher’s notation. For example

             1                  cn(u,k)               cn(u,k)
ns(x,k) = -------,    cs(x,k) = -------,    cd(x,k) = --------.
          sn(u,k)               sn(u,k)               dn(u,k)

Extensive rule lists are provided for differentiation of these functions with respect to either argument, to implement the standard addition formulae, argument shifts by multiples of the two quarter-periods K and iKand finally Jacobi’s transformations for a purely imaginary first argument.

Four utility rule lists to_sn, to_cn, to_dn and no_glaisher are provided for user convenience. The first to_sn replaces occurences of the squares of cn and dn in favour of the square of sn using the ‘Pythagorean’ identities. to_cn and to_dn apply these identities to replace squares in favour of cn and dn respectively. At most one of these rule sets should be active at any one time to avoid a potential infinite recursion in the simplification. The final rule list no_glaisher replaces all occurences of the nine subsidiary Jacobi elliptic functions (ns, sc, sd, …by reciprocals and quotients of the ‘basic’ Jacobi elliptic functions sn, cn and dn.

When their arguments are purely numerical, these twelve functions will be evaluated numerically if the rounded switch is ON. For complex arguments it is also better if the complex switch is also ON. However, if complex is OFF, an addition rule will be applied followed by Jacobi rules for a purely imaginary first arguments and then the result evaluated numerically. This will be considerably more expensive computationally than when switch complex is ON and rounding errors are likely to be larger.

Jacobi Amplitude Function

The amplitude of u can be evaluated using the jacobiam(u,k) command. A rule list is provided for differentiation of this functions with respect to either argument.

Arithmetic Geometric Mean (AGM)

A procedure to evaluate the AGM of initial values a0,b0,c0  exists as
AGM_function(a0,b0,c0     ) and will return
{N,AGM,{aN,,a0},{bN,,b0},{cN,,c0}}, where N is the number of steps to compute the AGM to the desired accuracy.

To determine the Elliptic Integrals K(m), E(m) we use initial values a0 = 1 ;      √ ------
b0 =   1− k2  ; c0 = k .

This procedure and the following one are primarily intended for use in the numerical evaluation of the various elliptic functions and integrals rather than for direct use by users.

Descending Landen Transformation

The procedure to evaluate the Descending Landen Transformation of ϕ and α uses the following equations:

(1 + sinαn+1)(1 + cosαn) = 2 where αn+1 < αn,
tan(ϕn+1 ϕn) = cosαn tanϕn where ϕn+1 > ϕn.

It can be called using landentrans(ϕ0, α0) and will return
{{ϕ0,n},{α0,n}}.

20.19.4 Elliptic Integrals

The following functions have been implemented:

These again differ somewhat from the originals implemented by Lisa Temme as the second argument is now the modulus k rather that its square. Also in the original implementation there was some confusion between Legendre’s form and Jacobi’s form of the incomplete elliptic integrals of the second kind; E(u,k) denoted the first in numerical evaluations and the second in the derivative formulae for the Jacobi elliptic functions with respect to their second argument. This confusion was perhaps understandable as in the literature some authors use the notation E(u,k) for the Legendre form and others for Jacobi’s form.

To bring the notation more into line with that in the NIST Digital Library of Mathematical Functions and avoid any possible confusion, E(u,k) is used for the Legendre form and (u,k) for Jacobi’s form. This differs from the 2019 version of this section which followed Lawden [Law89], where the notation D(ϕ,k) and E(u,k) were used for the Legendre and Jacobi forms respectively.

A number of rule lists have been provided to implement, where appropriate, derivatives of these functions, addition rules and periodicity and quasi-periodicity properties and to provide simplifications for special values of the arguments.

Elliptic F

The Elliptic F function can be used as EllipticF(phi,k) and will return the value of the Incomplete Elliptic Integral of the First Kind:

          ∫ ϕ
F (ϕ,k) =    (1 − k2sin2𝜃)−1∕2d𝜃.
           0

Elliptic K

The Elliptic K function can be used as EllipticK(k) and will return the value of the Complete Elliptic Integral of the First Kind:

                  ∫
                    π∕2      2  2   −1∕2
K (k ) = F (π ∕2,k) = 0  (1−  k sin  𝜃)   d 𝜃.

This is one of the quarter periods of the Jacobi elliptic functions and is often used in the calculation of other elliptic functions.

The complementary Elliptic Kfunction can be used as EllipticK!(k) and will return the value

   ′      ∘ -----2
K(k ) = K ( 1−  k )

which is the other quarter-period of the Jacobi elliptic functions.

Elliptic E

The Elliptic E function comes with either one or two arguments; used with two arguments as EllipticE(u,k) it will return the value of Legendre’s form of the Incomplete Elliptic Integral of the Second Kind:

         ∫
E(ϕ,k) =   ϕ ∘1-−-k2-sin2𝜃d 𝜃.
          0

When called with one argument EllipticE(k) will return the value of the Complete Elliptic Integral of the Second Kind:

                  ∫ π∕2∘ -----------
E(k) = E (π∕2,k) =       1−  k2sin2 𝜃d𝜃.
                   0

The complementary Elliptic Efunction can be used as EllipticE!(k) and will return the value

         ∘ ------
E(k′) = E ( 1 − k2).

Jacobi E

The Jacobi E function can be used as jacobiE(u,k); it will return the value of Jacobi’s form of the Incomplete Elliptic Integral of the Second Kind:

         ∫ u
ℰ (u,k) =    dn2(v,k)dv.
           0

The relationship between the two forms of incomplete elliptic integrals can be expressed as

ℰ(u,k) = E(am (u),k).

Note that

                   ∫ K (k)
E (k) = ℰ(K (k),k) =      dn2(v,k)dv.
                    0

On a GUI that supports calligraphic characters (NB. this is now the case with the CSL GUI), there is no problem and it is rendered as (u,k) in accordance with NIST usage. On non-GUI interfaces the Jacobi E function is rendered as E_j.

Jacobi’s Zeta Function

This can be called as jacobiZeta(u,k) and refers to Jacobi’s (elliptic) Zeta function Z(u,k) whereas the operator Zeta will invoke Riemann’s ζ function.

20.19.5 Some Numerical Utility Functions

Five utility functions are provided:

These are only operative when the switch rounded is on and their argument is numerical. The first pair relate the nome q of the theta functions with the moduli k and k= √------
 1 − k2 of the associated Jacobi elliptic functions.

The second pair return the quarter-periods K and Krespectively of the Jacobi elliptic functions associated with the nome q.

Finally, nome(k) returns the nome q associated with the modulus k of a Jacobi elliptic function and is essentially the inverse of nome2mod.

20.19.6 Jacobi Theta Functions

These theta functions differ from those originally defined by Lisa Temme in a number of respects. Firstly four separate functions of two arguments are defined:

rather than a single function with three arguments (with the first argument taking integer values in the range 1 to 4). Secondly the periods are 2π,2π,π and π respectively (NOT 4K, 4K, 2K and 2K). Thirdly the second argument is the modulus τ = a + ib where b = τ > 0 and hence the quasi-period is πτ.

The second parameter was previously the nome q where |q| < 1. As a consequence elliptictheta1 and elliptictheta2 were multi-valued owing to the appearance of q14 in their defining expansions. elliptictheta3 and elliptictheta4 were, however, single-valued functions of q.

Regarded as functions of τ, elliptictheta1 and elliptictheta2 are single-valued functions. The nome is given by q = exp(iπτ) so that the condition (τ) > 0 ensures that |q| < 1. Note also in this case q14 is interpreted as exp(iπτ∕4) rather than the principal value of q14. Thus, τ, 2 + τ, 4 + τ and 6 + τ produce four different values of both elliptictheta1 and elliptictheta2 although they all correspond to the same nome q.

The four theta functions are defined by their Fourier series:

𝜗1(z,τ) = 2eiπτ∕4 n=0(1)nqn2+n sin(2n + 1)z
𝜗2(z,τ) = 2eiπτ∕4 n=0qn2+n cos(2n + 1)z
𝜗3(z,τ) = 1 + 2 n=1qn2 cos2nz
𝜗4(z,τ) = 1 + 2 n=1(1)nqn2 cos2nz.

Utilising the periodicity and quasi-periodicity of the theta functions some generalised shift rules are implemented to shift their first argument into the base period parallelogram with vertices

(π∕2,π τ∕2),  (− π∕2,π τ∕2),  (− π∕2,− πτ∕2),  (π∕2,− πτ∕2 ).

Together with the relation 𝜗1(0) = 0, these shift rules serve to simplify all four theta functions to zero when appropriate.

When the switches rounded and complex are on and the arguments are purely numerical and the imaginary part of τ positive, the theta functions are evaluated numerically. Note that as τ is necessarily complex, the switch complex must be on.

In what follows a and b will denote the real and imaginary parts of τ respectively and so |q| = exp(πb) and arg q = πa. The series for the theta functions are fairly rapidly convergent due to the quadratic growth of the exponents of the nome q – except for values of q for which |q| is near to 1 (i.e. b = τ close to zero). In such cases the direct algorithm would suffer from slow convergence and rounding errors. For such values of |q|, Jacobi’s transformation τ= 1∕τ can be used to produce a smaller value of the nome and so increase the rate of convergence. This works very well for real values of q, or equivalently for τ purely imaginary since q= q1∕b2 , but for complex values the gains are somewhat smaller. The Jacobi transformation produces a nome qfor which |q′| = |q|1(a2+b2) .

When q < 0, the Jacobi transformation is preceded by either the modular transformation τ= τ + 1 when q < 0, or τ= τ 1 when q > 0, which both have the effect of multiplying q by 1, so that the new nome has a non-negative real part and |a|≤ 12. Thus the worst case occurs for values of the nome q near to ±i where |q′|≈|q|4.

By using a series of Jacobi transformations preceded, if necessary by τ-shifts to ensure |a| <= 12, |q| may be reduced to an acceptable level. Somewhat arbitrarily these Jacobi’s transformations are used until b > 0.6 (i.e. |q| < 0.15). This seems to produce reasonable behaviour. In practice more than two applications of Jacobi transformations are rarely necessary.

The previous version of the numerical code returned the principal values of 𝜗1 and 𝜗2, that is the ones obtained by taking the principal value of q14 in their series expansions. The current version replaces q14 by exp(iπτ∕4). If the principal value is required, it is easily obtained by multiplying by the ‘correcting’ factor q14 exp(iπτ∕4).

Derivatives of Theta Functions

Four functions are provided:

These return the dth derivatives of the respective theta functions with respect to their first argument u; τ is as usual the modulus of the theta function. These functions are only operative when the switches rounded and complex are ON and their arguments are numeric with d being a positive integer. They are provided mainly to support the implementation the Weierstrassian and Sigma functions discussed in the following subsection.

The numeric code simply sums the Fourier series for the required derivatives. Unlike the theta functions themselves the code does not use the quasi-periodicity nor modular transformations to speed up the convergence of the series by reducing the sizes of u and |q|. In the numerical evaluation of the Weierstrassian and Sigma functions these functions are only called after the necessary shifts of the argument u and modular transformations of τ have been performed. These are much simpler in this context.

Nevertheless they may be used from top level and numerical experiments reveal that the rounding errors are not significant provided |q| is not near one (say |q| < 0.9) and u is real or at least has a relatively small imaginary part.

20.19.7 Weierstrass Elliptic & Sigma Functions

Three main functions of three arguments are defined:

The notation used is broadly similar used by Lawden [Law89] which is also used in the NIST Digital Library of Mathematical Functions DLMF:NIST. However, ζw is used for the Weierstrassian Zeta function to distinguish it from the Riemann Zeta function and the usual symbol is used for the Weierstrassian elliptic function itself.

The two primitive periods of the Weierstrass function are 2ω1 and 2ω3 and these must satisfy (ω3∕ω1)0. The two periods are normally numbered so that τ = ω3∕ω1 has a positive imaginary part and hence the nome q = exp(iπτ) satisfies |q| < 1.

Any linear combination Ωm,n = 21 + 23 where m and n are integers (not both zero) is also a period. The set of all such periods plus the origin form a lattice. In the literature (ω1 + ω3) is often denoted by ω2 and 2ω2 is clearly also a period; this accounts for the gap in the numbering of primitive periods. The period ω2 is not used in REDUCE the rule sets for the Weierstrassian elliptic and related functions.

The primitive periods are not unique; indeed any periods 1 and 3 defined by the unimodular integer bilinear transformation:

Ω1 = aω1 + bω3,    Ω3 = cω1 + dω3,     where ad − bc = 1

are also primitive. This fact is very useful in the numerical evaluation of the Weierstrassian and Sigma functions as a sequence of such transformations may be used to increase the size τ and so reduce the size of |q|. Thus the Fourier series for the theta functions and their derivatives will converge rapidly. In theory these transformations may be used to reduce the size of |q| until τ √ --
  32 when |q| < 0.06. However, in numerical evaluations in REDUCE it is sufficient to use these transformations only until τ > 0.7, i.e. until |q| < 0.11. In practice only two or three iterations are required and usually very much smaller values of |q| are achieved particularly when τ is purely imaginary i.e. q is real.

In the numerical evaluations, if a result is real (or purely imaginary) it may happen that the result returned has a very small imaginary part (resp. real part). The ratio of the ‘deliquent’ part to the actual result is invariably smaller than current PRECISION and is due to rounding. Similarly if the true result is actually zero the result returned may have a very small absolute value – again smaller than the current PRECISION.

The Weierstrassian function is even and has a pole of order 2 at all lattice points. The Zeta and Sigma functions are only quasi-periodic on the lattice. Zeta is odd and has simple poles of residue 1 at all lattice points. The basic Sigma function σ(u,ω13) is odd and regular everywhere as is the function 𝜗1(u,τ) to which it is closely related. It has zeros at all lattice points. All three functions , ζw and σ are homogenous of degrees -2, -1 and +1 respectively. The functions are related by

℘(u) = − ζ′w(u),       ζw (u ) = σ′(u)∕σ(u),

where the lattice parameters have been omitted for conciseness.

Rule sets are provided which implement all the properties such as double periodicity discussed above. For numerical evaluation the switches rounded and complex must both be ON and all three parameters must be numeric. It is not, however, necessary to ensure (ω3∕ω1) > 0 as the second and third parameters will be swapped if required.

Alternative forms of the Weierstrass Functions

Two commonly used alternative forms of the Weierstrassian functions in which they are regarded as functions of the lattice invariants g2 and g3 rather than the primitive periods ω1 and ω3 are provided:

Note that for output they are distinguished from the two discussed above by separating the first and second arguments by a vertical bar rather than a comma. The rule for differentiation of the Weierstrass function is simpler when expressed in this alternative:

  ′        2               3
℘ (u | g2,g3) = 4℘ (u | g2,g3) − g2℘(u | g2,g3)− g3.

Other Sigma Functions

Three further Sigma functions are also provided:

These are all even functions, regular everywhere, homogenous of degree zero and doubly quasi-periodic. They are closely related to the theta functions 𝜗2, 𝜗3 and 𝜗4 respectively; but note the difference in numbering. For more information on the properties these sigma functions, see Lawden [Law89]; they do not appear in the NIST Digital Library of Mathematical Functions, but are included here for completeness.

Quasi-Period Factors & Lattice Functions

Ten functions are provided:

These are operative when the switches rounded and complex are ON and their arguments are numerical. The first three are referred to as lattice roots and are related to the invariants g2,g3, the discriminant Δ = g23 27g32 and a closely related invariant G = g23(27g32) of the Weierstrassian elliptic function . The lattice roots also appear in the numerical evaluation of the Weierstrass function. These lattice roots satisfy:

                           2   2    2
e1 + e2 + e3 = 0,  g2 = 2(e1 + e2 + e3),    g3 = 4e1e2e3.

If the discriminant Δ vanishes or equivalently if G = 1, there are at most two distinct lattice roots and the elliptic function degenerates to an elementary one. The advantage of the invariant G is that it is a function of τ = ω3∕ω1 only.

The remaining three functions eta_1, eta_2 & eta_3 appear in the rules for the quasi-periodicity of the four sigma functions and of the Weierstrassian Zeta function. They are also used in the numerical evaluation of these functions when the switches rounded and complex are ON. The quasi-period relations are:

ζw(u + 2ωj) = ζw(u) + 2ηj
σ(u + 2ωj) = exp(2ηj(u + ωj))σ(u)
σk(u + 2ωj) = exp(2ηj(u + ωj))σk(u) if jk
σj(u + 2ωj) = exp(2ηj(u + ωj))σj(u)
ζw(ωj) = ηj
σj(ωj) = 0,

where the lattice parameters have been omitted for conciseness and j,k = 13. The quasi-period factors satisfy

η1 + η2 + η3 = 0,   η1ω3 − η3ω1 = η2ω1 − η1ω2 = η3ω2 − η2ω3 = iπ∕2.

As well as the scalar-valued functions discussed above in this section, there are four functions which return a list as their value:

The first three are actually more efficient than calling the requisite scalar-valued functions individually and the fourth is used in the numerical evaluation of the Weierstrass functions regarded as functions of the invariants. These functions are only useful when the switches rounded and complex are ON and their arguments are all numerical. Note that the call sequence:

  lattice_generators(g2,g3);  
  lattice_invariants(first ws, second ws);  
  {first ws, second ws};

should reproduce the list {g2, g3}, perhaps with small rounding errors. The corresponding sequence with the calls to lattice_generators and lattice_invariants interchanged (and g2 & g3 replaced by w1 & w3), in general, will not produce the same pair of lattice generators since the generators are only defined up to a unimodular bilinear transformation.

For details of the algorithm used to calculate the lattice generators from the invariants see the DLMF:NIST chapter on Lattice Calculations.

20.19.8 Inverse Jacobi Elliptic Functions

The following inverses of the 12 Jacobi elliptic functions are available:-

Thus, for example,

   jacobisn(arcsn(x, k), k)   --> x  
   jacobisc(arcsc(x, k), k)   --> x

A rule list is provided to simplify these functions for special values of their arguments such x = 0, k = 0 and k = 1, to implement the inverse function simplification formulae illustrated immediately above and for differentiation of these functions with respect to their two arguments.

Note that for simplicity arccs is now defined to be an odd function of its first argument like cs. This choice means that the range of (real) principal values is no longer connected as it is the open set (K(k),K(k)) 0. It brings it into line with arcns and arcds whose principal value ranges are necessarily not connected as they have poles at zero; similarly for the range of principal values of arcdc which has a pole at K(k).

In earlier versions of the package it was taken to satisfy:

arccs(− x,k) = 2K (k )− arccs(x,k ).

This was analogous to the situation in Reduce for acot where

arctan(− x ) = − arctan (x ),  arccot(− x ) = π − arccot(x ).

When their arguments are numerical and real, these functions will be evaluated numerically if the rounded switch is ON provided, of course that the defining elliptic integral is convergent. Note that in some cases the result may be imaginary even if both arguments are real. In these cases if further computation is required involving the result, it is better if the switch complex is also ON

Note also that for arcdn and arcnd a zero value of the modulus k is excluded (since dn(x,0) = nd(x,0) = 1 x).

As the Jacobi elliptic functions are doubly periodic, the inverse functions are multi-valued. When both arguments are real and |k| <= 1 and when the result exists and is real there are certain restrictions on the range of acceptable values of the first parameter x (see the table below).

The numerical value returned is the principal value which lies in the range given in the third column of the table below. (c.f. the inverse trigonometric functions). Other real values of the inverse functions are indicated in the fourth column of the table below where n is an arbitrary integer.

Fn Domain Principal Value v Other real values
arcsn: |x| <= 1 K(k) <= v <= K(k) 2nK(k) + (1)nv
arccn:|x| <= 1 0 <= v <= 2K(k) 4nK(k) ± v
arccd:|x| <= 1 0 <= v <= 2K(k) 4nK(k) ± v
arcns: |x| >= 1 K(k) <= v <= K(k) & v0 2nK(k) + (1)nv
arcnc:|x| >= 1 0 <= v <= 2K(k) & vK(k) 4nK(k) ± v
arcdc:|x| >= 1 0 <= v <= 2K(k) & vK(k) 4nK(k) ± v
arcdn:k<= x <= 1 0 <= v <= K(k) 2nK(k) ± v
arcnd:1 <= x <= 1∕k0 <= v <= K(k) 2nK(k) ± v
arcds: |x| >= kK(k) <= v <= K(k) & v0 2nK(k) + (1)nv
arcsd: |x| <= 1∕kK(k) <= v <= K(k) 2nK(k) + (1)nv
arcsc: x K(k) < v < K(k) 2nK(k) + v
arccs: x K(k) < v < K(k) & v0 2nK(k) + v

If one or both arguments are complex, the current version of the package attempts to evaluate the result numerically provided that the switch complex is also ON. This code is still under development and whilst it succeeds in many cases, it may fail with a divergent integral error message. If the function in question has a branch point or pole at the evaluation point, this is of course correct, but in other cases the value may exist, but the current choice of symmetric integral in the algorithm may diverge. This can occur when the first parameter is a subrange of the real or imaginary axis.

The value currently returned may not always be the principal value (ie. the value in the fundamental period parallelogram of the elliptic function concerned). However, the value returned should be an inverse value

(ie. jacobipq(arcpq(z,k),k)) = z where pq = sn,cn,dn,cs).

The numerical values of the inverse functions are calculated by expressing them in terms of the symmetric elliptic integral:

             ∫ ∞   ∘ -------------------
RF (x,y,z) =     1∕  (t− x)(t− y )(t− z)dt.
              0

This is then evaluated using a sequence of quadratic transformations which converge rapidly to the elementary hyperbolic integral:

     2    2   2         2  2   2    2                 2    2
Rc(X  + Y  ,X ) = RF (X  ,X ,X   + Y ) = arctanh (Y∕(X  + Y  ))∕Y.

More information on this method due to Carlson in the 1990’s may be found on the DLMF website: Quadratic Transformations and Inverse Jacobian Elliptic Functions.

20.19.9 Table of Elliptic Functions and Integrals

FunctionOperator
  
am(u,k)jacobiam(u,k)
sn(u,k)jacobisn(u,k)
dn(u,k)jacobidn(u,k)
cn(u,k)jacobicn(u,k)
cd(u,k)jacobicd(u,k)
sd(u,k)jacobisd(u,k)
nd(u,k)jacobind(u,k)
dc(u,k)jacobidc(u,k)
nc(u,k)jacobinc(u,k)
sc(u,k)jacobisc(u,k)
ns(u,k)jacobins(u,k)
ds(u,k)jacobids(u,k)
cs(u,k)jacobics(u,k)
Inverse Functions of the above:
arcsn(u,k)arcsn(u,k)
arccn(u,k)arccn(u,k)
...
arccs(u,k)arccs(u,k)
Complete Integral (1st kind) K(k)ellipticK(k)
K(k)ellipticK!’(k)
Incomplete Integral (1st kind) F(ϕ,k)ellipticF(phi,k)
Complete Integral (2nd kind) E(k)ellipticE(k)
E(k)ellipticE!’(k)
Legendre Incomplete Int (2nd kind) E(u,k)ellipticE(u,k)
Jacobi Incomplete Int (2nd kind) (u,k)jacobiE(u,k)
Jacobi’s Zeta Z(u,k)jacobiZeta(u,k)
𝜗1(u,τ)elliptictheta1(u,tau)
𝜗2(u,τ)elliptictheta2(u,tau)
𝜗3(u,τ)elliptictheta3(u,tau)
𝜗4(u,τ)elliptictheta4(u,tau)
(u,ω13)weierstrass(u,omega1,omega3)
ζw(u,ω13)weierstrassZeta(u,omega1,omega3)
σ(u,ω13)weierstrass_sigma(u,omega1,omega3)
σ1(u,ω13)weierstrass_sigma1(u,omega1,omega3)
σ2(u,ω13)weierstrass_sigma2(u,omega1,omega3)
σ3(u,ω13)weierstrass_sigma3(u,omega1,omega3)
(ug2,g3)weierstrass1(u,g2,g3)
ζw(ug2,g3)weierstrassZeta1(u,g2,g3)