Hi,
Here is some modification from Wolf Book (pp.596 ff). The notation is based on this. It also uses Math::Pari. For related topic you may find this node helpful.
#!/usr/bin/perl -w
use strict;
use Data::Dumper;
use Math::Pari qw/binomial pari2num/;
my $val = hypergeometric(5,3,53,5);
print "Hyper = $val\n";
sub hypergeometric {
my ($M,$p,$F,$n) = @_;
return unless $n>0 && $n == int($n) && $p > 0 && $p == int($p) &&
$M > 0 && $M <= $n+$p;
return 0 unless $p <= $M && $p == int($p);
return pari2num((binomial($M,$p) * binomial($F-$M, $n-$p)
/ binomial($F,$n)));
}
That gives:
Hyper = 0.00393074501208321
|