asymptote: Mathematical functions

 
 6.11.4 Mathematical functions
 -----------------------------
 
 'Asymptote' has built-in versions of the standard 'libm' mathematical
 real(real) functions 'sin', 'cos', 'tan', 'asin', 'acos', 'atan', 'exp',
 'log', 'pow10', 'log10', 'sinh', 'cosh', 'tanh', 'asinh', 'acosh',
 'atanh', 'sqrt', 'cbrt', 'fabs', 'expm1', 'log1p', as well as the
 identity function 'identity'.  'Asymptote' also defines the order 'n'
 Bessel functions of the first kind 'Jn(int n, real)' and second kind
 'Yn(int n, real)', as well as the gamma function 'gamma', the error
 function 'erf', and the complementary error function 'erfc'.  The
 standard real(real, real) functions 'atan2', 'hypot', 'fmod',
 'remainder' are also included.
 
    The functions 'degrees(real radians)' and 'radians(real degrees)' can
 be used to convert between radians and degrees.  The function
 'Degrees(real radians)' returns the angle in degrees in the interval
 [0,360).  For convenience, 'Asymptote' defines variants 'Sin', 'Cos',
 'Tan', 'aSin', 'aCos', and 'aTan' of the standard trigonometric
 functions that use degrees rather than radians.  We also define complex
 versions of the 'sqrt', 'sin', 'cos', 'exp', 'log', and 'gamma'
 functions.
 
    The functions 'floor', 'ceil', and 'round' differ from their usual
 definitions in that they all return an int value rather than a real
 (since that is normally what one wants).  The functions 'Floor', 'Ceil',
 and 'Round' are respectively similar, except that if the result cannot
 be converted to a valid int, they return 'intMax' for positive arguments
 and 'intMin' for negative arguments, rather than generating an integer
 overflow.  We also define a function 'sgn', which returns the sign of
 its real argument as an integer (-1, 0, or 1).
 
    There is an 'abs(int)' function, as well as an 'abs(real)' function
 (equivalent to 'fabs(real)'), an 'abs(pair)' function (equivalent to
 'length(pair)').
 
    Random numbers can be seeded with 'srand(int)' and generated with the
 'int rand()' function, which returns a random integer between 0 and the
 integer 'randMax'.  The 'unitrand()' function returns a random number
 uniformly distributed in the interval [0,1].  A Gaussian random number
 generator 'Gaussrand' and a collection of statistics routines, including
 'histogram', are provided in the base file 'stats.asy'.  The functions
 'factorial(int n)', which returns n!, and 'choose(int n, int k)', which
 returns n!/(k!(n-k)!), are also defined.
 
    When configured with the GNU Scientific Library (GSL), available from
 <http://www.gnu.org/software/gsl/>, 'Asymptote' contains an internal
 module 'gsl' that defines the airy functions 'Ai(real)', 'Bi(real)',
 'Ai_deriv(real)', 'Bi_deriv(real)', 'zero_Ai(int)', 'zero_Bi(int)',
 'zero_Ai_deriv(int)', 'zero_Bi_deriv(int)', the Bessel functions 'I(int,
 real)', 'K(int, real)', 'j(int, real)', 'y(int, real)', 'i_scaled(int,
 real)', 'k_scaled(int, real)', 'J(real, real)', 'Y(real, real)',
 'I(real, real)', 'K(real, real)', 'zero_J(real, int)', the elliptic
 functions 'F(real, real)', 'E(real, real)', and 'P(real, real)', the
 Jacobi elliptic functions 'real[] sncndn(real,real)', the
 exponential/trigonometric integrals 'Ei', 'Si', and 'Ci', the Legendre
 polynomials 'Pl(int, real)', and the Riemann zeta function 'zeta(real)'.
 For example, to compute the sine integral 'Si' of 1.0:
 import gsl;
 write(Si(1.0));
 
    'Asymptote' also provides a few general purpose numerical routines:
 
 'real newton(int iterations=100, real f(real), real fprime(real), real x, bool verbose=false);'
      Use Newton-Raphson iteration to solve for a root of a real-valued
      differentiable function 'f', given its derivative 'fprime' and an
      initial guess 'x'.  Diagnostics for each iteration are printed if
      'verbose=true'.  If the iteration fails after the maximum allowed
      number of loops ('iterations'), 'realMax' is returned.
 
 'real newton(int iterations=100, real f(real), real fprime(real), real x1, real x2, bool verbose=false);'
      Use bracketed Newton-Raphson bisection to solve for a root of a
      real-valued differentiable function 'f' within an interval
      ['x1','x2'] (on which the endpoint values of 'f' have opposite
      signs), given its derivative 'fprime'.  Diagnostics for each
      iteration are printed if 'verbose=true'.  If the iteration fails
      after the maximum allowed number of loops ('iterations'), 'realMax'
      is returned.
 
 'real simpson(real f(real), real a, real b, real acc=realEpsilon, real dxmax=b-a)'
      returns the integral of 'f' from 'a' to 'b' using adaptive Simpson
      integration.