Transcendental Functions

In each of the functions below, the precision of the result will be approximately equal to the precision of the argument if that is finite; otherwise it will be approximately equal to the default precision of the parent of the argument. An error will result if the coefficient ring of the series is not a field. If the first argument has a non-zero constant term, an error will result unless the coefficient ring of the parent is a real or complex domain (so that the transcendental function can be evaluated in the constant term).

See also the chapter on real and complex fields for elliptic and modular functions which are also defined for formal series.

Contents

Exponential and Logarithmic Functions

Exp(f) : RngSerElt -> RngSerElt
Given a series f defined over a field, return the exponential of f.
Log(f) : RngSerElt -> RngSerElt
Given a series f defined over a field of characteristic zero, return the logarithm of f. The valuation of f must be zero.

Example RngSer_Bernoulli (H50E3)

In this example we show how one can compute the Bernoulli number Bn for given n using generating functions. The function BernoulliNumber now actually uses this method (since V2.4). Using this method, the Bernoulli number B10000 has been computed, taking about 14 hours on a 250MHz Sun Ultrasparc (the computation depends on the new asymptotically fast methods for series division).

The exponential generating function for the Bernoulli numbers is: E(x) = (x /(ex - 1)). This means that the n-th Bernoulli number Bn is n! times the coefficient of xn in E(x). The Bernoulli numbers B0, ..., Bn for any n can thus be calculated by computing the above power series and scaling the coefficients.

In this example we will compute B500. We first set the final coefficient index n we desire to be 500. We then create the denominator D = ex - 1 of the exponential generating function to precision n + 2 (we need n + 2 since we lose precision when we divide by the denominator and the valuation changes). For each series we create, we print the sum of it and (O)(x20), which will only print the terms up to x19.

> n := 500;
> S<x> := LaurentSeriesRing(RationalField(), n + 2);
> time D := Exp(x) - 1;
Time: 0.040
> D + O(x^20);
x + 1/2*x^2 + 1/6*x^3 + 1/24*x^4 + 1/120*x^5 + 1/720*x^6 + 1/5040*x^7 +
    1/40320*x^8 + 1/362880*x^9 + 1/3628800*x^10 + 1/39916800*x^11 +
    1/479001600*x^12 + 1/6227020800*x^13 + 1/87178291200*x^14 +
    1/1307674368000*x^15 + 1/20922789888000*x^16 + 1/355687428096000*x^17 +
    1/6402373705728000*x^18 + 1/121645100408832000*x^19 + O(x^20)
We then form the quotient E=x/D which gives the exponential generating function.
> time E := x / D;
Time: 5.330
> E + O(x^20);
1 - 1/2*x + 1/12*x^2 - 1/720*x^4 + 1/30240*x^6 - 1/1209600*x^8 +
    1/47900160*x^10 - 691/1307674368000*x^12 + 1/74724249600*x^14 -
    3617/10670622842880000*x^16 + 43867/5109094217170944000*x^18 + O(x^20)
We finally compute the Laplace transform of E (which multiplies the coefficient of xi by i!) to yield the generating function of the Bernoulli numbers up to the xn term. Thus the coefficient of xn here is Bn.
> time B := Laplace(E);
Time: 0.289
> B + O(x^20);
1 - 1/2*x + 1/6*x^2 - 1/30*x^4 + 1/42*x^6 - 1/30*x^8 + 5/66*x^10 -
    691/2730*x^12 + 7/6*x^14 - 3617/510*x^16 + 43867/798*x^18 + O(x^20)
> Coefficient(B, n);
-16596380640568557229852123088077134206658664302806671892352650993155331641220\
960084014956088135770921465025323942809207851857992860213463783252745409096420\
932509953165466735675485979034817619983727209844291081908145597829674980159889\
976244240633746601120703300698329029710482600069717866917229113749797632930033\
559794717838407415772796504419464932337498642714226081743688706971990010734262\
076881238322867559275748219588404488023034528296023051638858467185173202483888\
794342720837413737644410765563213220043477396887812891242952336301344808165757\
942109887803692579439427973561487863524556256869403384306433922049078300720480\
361757680714198044230522015775475287075315668886299978958150756677417180004362\
981454396613646612327019784141740499835461/8365830
> n;
500

Trigonometric Functions and their Inverses

Sin(f) : RngSerElt -> RngSerElt
Given a series f defined over a field of characteristic zero, return the sine of f. The valuation of f must be zero.
Cos(f) : RngSerElt -> RngSerElt
Given a series f defined over a field of characteristic zero, return the cosine of f. The valuation of f must be zero.
Sincos(f) : RngSerElt -> RngSerElt
Given a series f defined over a field of characteristic zero, return both the sine and cosine of f. The valuation of f must be zero.
Tan(f) : RngSerElt -> RngSerElt
Return the tangent of the series f defined over a field.
Arcsin(f) : RngSerElt -> RngSerElt
Given a series f defined over a field of characteristic zero, return the inverse sine of f.
Arccos(f) : RngSerElt -> RngSerElt
Given a series f defined over the real or complex field, return the inverse cosine of f.
Arctan(f) : RngSerElt -> RngSerElt
Given a series f defined over a field of characteristic zero, return the inverse tangent of f.

Hyperbolic Functions and their Inverses

Sinh(f) : RngSerElt -> RngSerElt
Given a series f defined over a field, return the hyperbolic sine of f.
Cosh(f) : RngSerElt -> RngSerElt
Given a series f defined over a field, return the hyperbolic cosine of f.
Tanh(f) : RngSerElt -> RngSerElt
Given a series f defined over a field, return the hyperbolic tangent of f.
Argsinh(f) : RngSerElt -> RngSerElt
Given a series f defined over a field of characteristic zero, return the inverse hyperbolic sine of f.
Argcosh(f) : RngSerElt -> RngSerElt
Given a series f defined over the real or complex field, return the inverse hyperbolic cosine of f.
Argtanh(f) : RngSerElt -> RngSerElt
Given a series f defined over a field of characteristic zero, return the inverse hyperbolic tangent of f.
V2.28, 13 July 2023