Calculates half periods in terms of \(e\)

half.periods(ignore=NULL, e=NULL, g=NULL, primitive)

Arguments

e

e

g

g

ignore

Formal argument present to ensure that e or g is named (ignored)

primitive

Boolean, with default TRUE meaning to return primitive periods and FALSE to return the direct result of Legendre's iterative scheme

Details

Parameter e=c(e1,e2,e3) are the values of the Weierstrass \(\wp\) function at the half periods: $$e_1=\wp(\omega_1)\qquad e_2=\wp(\omega_2)\qquad e_3= \wp(\omega_3)$$ where $$\omega_1+\omega_2+\omega_3=0.$$

Also, \(e\) is given by the roots of the cubic equation \(x^3-g_2x-g_3=0\), but the problem is finding which root corresponds to which of the three elements of \(e\).

Value

Returns a pair of primitive half periods

References

M. Abramowitz and I. A. Stegun 1965. Handbook of Mathematical Functions. New York, Dover.

Author

Robin K. S. Hankin

Note

Function parameters() uses function half.periods() internally, so do not use parameters() to determine e.

Examples


half.periods(g=c(8,4))                ## Example 6, p665, LHS
#> [1] 1.009453+0.000000i 0.000000+1.484412i
#> attr(,"class")
#> [1] "primitive"

u <- half.periods(g=c(-10,2))
massage(c(u[1]-u[2] , u[1]+u[2]))     ## Example 6, p665, RHS
#> [1] 0.000000-1.52561i 1.402395+0.00000i

half.periods(g=c(10,2))               ## Example 7, p665, LHS
#> [1] 1.003847+0.00000i 0.000000+1.09797i
#> attr(,"class")
#> [1] "primitive"

u <- half.periods(g=c(7,6))
massage(c(u[1],2*u[2]+u[1]))          ## Example 7, p665, RHS
#> [1] 0.9957998+0.000000i 0.0000000+2.332418i


half.periods(g=c(1,1i, 1.1+1.4i))
#> [1] 0.3004954-1.4486012i 1.4486012-0.3004954i
#> attr(,"class")
#> [1] "primitive"
half.periods(e=c(1,1i, 2, 1.1+1.4i))
#> [1] 0.3561185-1.1207477i 1.2654855+0.1622369i
#> attr(,"class")
#> [1] "primitive"


g.fun(half.periods(g=c(8,4)))         ##  should be c(8,4)
#>   g2   g3 
#> 8+0i 4+0i