albeta.f 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. *DECK ALBETA
  2. FUNCTION ALBETA (A, B)
  3. C***BEGIN PROLOGUE ALBETA
  4. C***PURPOSE Compute the natural logarithm of the complete Beta
  5. C function.
  6. C***LIBRARY SLATEC (FNLIB)
  7. C***CATEGORY C7B
  8. C***TYPE SINGLE PRECISION (ALBETA-S, DLBETA-D, CLBETA-C)
  9. C***KEYWORDS FNLIB, LOGARITHM OF THE COMPLETE BETA FUNCTION,
  10. C SPECIAL FUNCTIONS
  11. C***AUTHOR Fullerton, W., (LANL)
  12. C***DESCRIPTION
  13. C
  14. C ALBETA computes the natural log of the complete beta function.
  15. C
  16. C Input Parameters:
  17. C A real and positive
  18. C B real and positive
  19. C
  20. C***REFERENCES (NONE)
  21. C***ROUTINES CALLED ALNGAM, ALNREL, GAMMA, R9LGMC, XERMSG
  22. C***REVISION HISTORY (YYMMDD)
  23. C 770701 DATE WRITTEN
  24. C 890531 Changed all specific intrinsics to generic. (WRB)
  25. C 890531 REVISION DATE from Version 3.2
  26. C 891214 Prologue converted to Version 4.0 format. (BAB)
  27. C 900315 CALLs to XERROR changed to CALLs to XERMSG. (THJ)
  28. C 900326 Removed duplicate information from DESCRIPTION section.
  29. C (WRB)
  30. C 900727 Added EXTERNAL statement. (WRB)
  31. C***END PROLOGUE ALBETA
  32. EXTERNAL GAMMA
  33. SAVE SQ2PIL
  34. DATA SQ2PIL / 0.9189385332 0467274 E0 /
  35. C***FIRST EXECUTABLE STATEMENT ALBETA
  36. P = MIN (A, B)
  37. Q = MAX (A, B)
  38. C
  39. IF (P .LE. 0.0) CALL XERMSG ('SLATEC', 'ALBETA',
  40. + 'BOTH ARGUMENTS MUST BE GT ZERO', 1, 2)
  41. IF (P.GE.10.0) GO TO 30
  42. IF (Q.GE.10.0) GO TO 20
  43. C
  44. C P AND Q ARE SMALL.
  45. C
  46. ALBETA = LOG(GAMMA(P) * (GAMMA(Q)/GAMMA(P+Q)) )
  47. RETURN
  48. C
  49. C P IS SMALL, BUT Q IS BIG.
  50. C
  51. 20 CORR = R9LGMC(Q) - R9LGMC(P+Q)
  52. ALBETA = ALNGAM(P) + CORR + P - P*LOG(P+Q) +
  53. 1 (Q-0.5)*ALNREL(-P/(P+Q))
  54. RETURN
  55. C
  56. C P AND Q ARE BIG.
  57. C
  58. 30 CORR = R9LGMC(P) + R9LGMC(Q) - R9LGMC(P+Q)
  59. ALBETA = -0.5*LOG(Q) + SQ2PIL + CORR + (P-0.5)*LOG(P/(P+Q))
  60. 1 + Q*ALNREL(-P/(P+Q))
  61. RETURN
  62. C
  63. END