NAME
   Math::Random::AcceptReject - Acceptance-Rejection PDF transformations

SYNOPSIS
     use Math::Random::AcceptReject;
     my $pdf = Math::Random::AcceptReject->new(
       xmin   => 0, # defaults to 0
       xmax   => 2, # defaults to 1
       ymax   => 2, # no default!
       pdf    => 'x',    # a triangle from x=0 to x=2 with slope 1
       random => 'rand', # use Perl's builtin (default)
     );

     foreach (1..100) {
         my $rnd = $pdf->rand();
         # ...
     }

     # Use Math::Random::MT instead of bultin rand()
     # Same target PDF but as Perl code instead of a Math::Symbolic
     # function!
     use Math::Random::MT;
     my $mt = Math::Random::Mt->new($seed);
     $pdf = Math::Random::AcceptReject->new(
       xmax   => 2,
       ymax   => 2,
       pdf    => sub { $_[0] },
       random => sub { $mt->rand() };
     );

DESCRIPTION
   This module implements acceptance-rejection transformations of uniformly
   distributed random numbers to mostly arbitrary probability density
   functions (*PDF*s).

   Note that whereas J. von Neumann's algorithm can transform from
   arbitrary source PDFs to arbitrary destination PDFs, this module is
   currently limited to uniform "[0,1]" source PDFs!

METHODS
 new
   Creates a new random number generator. Takes named arguments.

   Mandatory parameters:

     pdf:  The probability density function. This can either be a
           subroutine reference which takes an argument ('x') and
           returns f(x), a Math::Symbolic tree representing f(x) and
           using the variable 'x', or a string which can be parsed
           as such a Math::Symbolic tree.
     ymax: Maximum value of the target PDF f(x) in the x range. This
           max theoretically be safely set to a very large value which
           is much higher than the real maximum of f(x) within
           the range [xmin,xmax]. The efficiency of the algorithm goes
           down with

   Optional parameters:

     random: The random number generator. Defaults to using Perl's
             rand() function. May be set to either 'rand' for the
             default or a subroutine reference for custom random
             number generators. Expected to return one or more(!)
             random numbers per call.
     xmin:   Minimum value for x. Defaults to 0.
     xmax:   Maximum value for x. Defaults to 1.

 rand
   Returns the next random number of PDF f(x) as specified by the "pdf"
   parameter to "new()".

SEE ALSO
   <http://en.wikipedia.org/wiki/Rejection_sampling>

   Math::Random::MT, Math::Random, Math::Random::OO, Math::TrulyRandom

   Math::Symbolic

   The examples in the examples/ subdirectory of this distribution.

AUTHOR
   Steffen Mueller, <[email protected]>

COPYRIGHT AND LICENSE
   Copyright (C) 2007 by Steffen Mueller

   This library is free software; you can redistribute it and/or modify it
   under the same terms as Perl itself, either Perl version 5.6 or, at your
   option, any later version of Perl 5 you may have available.