home *** CD-ROM | disk | FTP | other *** search
/ PC Professionell 2004 December / PCpro_2004_12.ISO / files / webserver / tsw / TSW_3.4.0.exe / Apache2 / perl / Cephes.pm < prev    next >
Encoding:
Perl POD Document  |  2002-09-09  |  3.8 KB  |  117 lines

  1. # This file was automatically generated by SWIG
  2. package Math::Cephes;
  3. use strict;
  4. use vars qw($VERSION @EXPORT_OK %EXPORT_TAGS @ISA);
  5.  
  6. require Exporter;
  7. *import = \&Exporter::import;
  8.  
  9. require DynaLoader;
  10. @ISA = qw( DynaLoader);
  11.  
  12. my @constants = qw($PI $PIO2 $PIO4 $SQRT2 $MACHEP $MAXLOG $MINLOG $MAXNUM
  13.            $SQ2OPI $LOGE2 $LOGSQ2 $THPIO4 $TWOOPI $SQRTH $LOG2E );
  14. my @trigs = qw(asin acos atan atan2 sin cos tan cot hypot
  15.            tandg cotdg sindg cosdg radian cosm1);
  16. my @hypers = qw(acosh asinh atanh sinh cosh tanh);
  17. my @explog = qw(log1p expm1 exp exp10 exp2 log log10 log2 expxx);
  18. my @cmplx = qw(clog cexp csin ccos ctan ccot casin 
  19.            cacos catan cadd csub cmul cdiv cmov cneg cabs csqrt
  20.            csinh ccosh ctanh cpow casinh cacosh catanh);
  21. my @utils = qw(ceil floor frexp ldexp fabs
  22.            round sqrt lrand pow powi drand lsqrt fac cbrt);
  23. my @bessels = qw(i0 i0e i1 i1e iv j0 j1 jn jv k0 k1 kn yn yv k0e k1e y0 y1);
  24. my @dists = qw(bdtr bdtrc bdtri btdtr chdtr chdtrc chdtri 
  25.            fdtr fdtrc fdtri gdtr gdtrc nbdtr nbdtrc nbdtri 
  26.            ndtr ndtri pdtr pdtrc pdtri stdtr stdtri);
  27. my @gammas = qw(gamma igam igamc igami psi fac rgamma);
  28. my @betas = qw(beta lbeta incbet incbi lbeta);
  29. my @elliptics = qw(ellie ellik ellpe ellpj ellpk);
  30. my @hypergeometrics = qw(onef2 threef0 hyp2f1 hyperg hyp2f0);
  31. my @misc = qw(zeta zetac airy dawsn fresnl sici shichi expn spence ei 
  32.               erfc erf struve plancki simpson bernum polylog vecang);
  33. my @fract = qw(radd rsub rmul rdiv euclid);
  34.  
  35. %EXPORT_TAGS = ('constants' => [@constants],
  36.         'utils' => [@utils],
  37.                 'trigs' => [@trigs],
  38.                 'hypers' => [@hypers],
  39.                 'explog' => [@explog],
  40.                 'cmplx' => [@cmplx],
  41.                 'bessels' => [@bessels],
  42.                 'gammas' => [@gammas],
  43.         'dists' => [@dists],
  44.                 'betas' => [@betas],
  45.                 'elliptics' => [@elliptics],
  46.         'hypergeometrics' => [@hypergeometrics],
  47.         'fract' => [@fract],
  48.                 'misc' => [@misc],
  49.                 'all' => [@constants, @utils, @trigs, @hypers, 
  50.               @explog, @bessels, @gammas, @betas, @elliptics, 
  51.               @hypergeometrics, @misc, @dists],
  52.            );
  53.   
  54. @EXPORT_OK = (@constants, @utils, @trigs, @hypers, 
  55.           @explog, @bessels, @gammas, @betas, @elliptics, 
  56.           @hypergeometrics, @misc, @dists, @fract, @cmplx);
  57.         
  58. $VERSION = '0.36';
  59. Math::Cephes->bootstrap($VERSION);
  60. #var_Math__Cephes_init();
  61.  
  62. sub simpson {
  63.   my ($r, $a, $b, $abs, $rel, $nmax) = @_;
  64.   die "Must supply a CODE reference" unless ref($r) eq 'CODE';
  65.   die "Must supply start and end points($a and $b)" 
  66.     unless (defined $a and defined $b);
  67.   $abs ||= 1e-06;
  68.   $rel ||= 1e-06;
  69.   $nmax ||= 256;
  70.   $nmax = 2 if $nmax < 2;
  71.   my $sumold = 0;
  72.   for (my $n=2; $n<=$nmax; $n++) {
  73.     my $count = 0;
  74.     my $x = $a;
  75.     my $sum = 0;
  76.     my $h = ($b - $a) / $n / 8;
  77.     my $f = [];
  78.     for($count=0; $count <= 8*$n; $count++, $x+=$h) {
  79.       $f->[$count] = &$r($x);
  80.     }
  81.     $sum = Math::Cephes::simpsn_wrap($f, $count-1, $h);
  82.     my $test = abs($sum - $sumold);
  83.     return $sum if ($test < $abs or abs($test/$sum) < $rel);
  84.     $sumold = $sum;
  85.   }
  86.   warn("Math::Cephes::simpson: Maximum number $nmax of iterations reached");
  87.   return undef;
  88. }
  89.  
  90. sub bernum {
  91.   my $i = shift;
  92.   die "Cannot exceed i=30" if (defined $i and $i > 30);
  93.   my $num = [split //, 0 x 30 ];
  94.   my $den = [split //, 0 x 30 ];
  95.   Math::Cephes::bernum_wrap($num, $den);
  96.   return defined $i ? (int($num->[$i]), int($den->[$i])) : ($num, $den);
  97. }
  98.  
  99. sub expxx {
  100.   my $x = shift;
  101.   my $n = shift || 1;
  102.   return Math::Cephes::expx2($x, $n);
  103. }
  104.  
  105. sub vecang {
  106.   my ($a, $b) = @_;
  107.   die "Must supply array references" 
  108.     unless (ref($a) eq 'ARRAY' and ref($b) eq 'ARRAY');
  109.   die "Vectors must be of dimension 3"
  110.     unless (scalar @$a == 3 and scalar @$b == 3);
  111.   return Math::Cephes::arcdot($a, $b);
  112. }
  113.  
  114. 1;
  115.  
  116. __END__
  117.