Take the 2-minute tour ×
MathOverflow is a question and answer site for professional mathematicians. It's 100% free, no registration required.

Anyone know a fast and concise way of calculating the Beta $B(a,b)$ function for smallish (<10) real $a$ and $b$.

For integer $a$ and $b$ I have:

$B(a,b) = \prod\limits_{j=1}^b \frac{j}{a+j}$

which has tiny code and is also pretty fast. I've see some methods that rely on the Gamma or log Gamma function:

$\log B(a,b) = \log \Gamma(a) + \log \Gamma(b) - \log \Gamma(a+b)$

using approximations of $\log \Gamma$, but I was wondering if there was a more direct way.

share|improve this question
    
"Numerical Recipes in C" (highly recommended) says to use the Gamma function. –  Stopple Aug 2 '11 at 18:12
3  
I beg to differ: Numerical recipes in C is one of the banes of human existence, and has led to many, many bad implementations being used. –  Igor Rivin Aug 2 '11 at 18:20
    
try out: netlib.org/slatec esp. netlib.org/slatec/src/dgamln.f –  Suvrit Aug 2 '11 at 18:35
    
Fortran eugh. ;) –  Lucas Aug 2 '11 at 19:33
1  
Good idea Suvrit. Looking at source now. I'm sure Fortran is pretty damn efficient, it's just that I'm not really familiar with it, mainly because I find it ugly. From a practical point of view I'm sure it's great. –  Lucas Aug 2 '11 at 22:09

1 Answer 1

up vote 2 down vote accepted

There's nothing more straightforward than using the gamma function relationship, I believe (perhaps using Lanczos's approximation to compute the gamma functions). Of course, for integer arguments, the product representation is much faster. You could probably also consider the special case when one of the beta function's arguments is a semi-integer, and accordingly construct the appropriate product representation (involving $\sqrt{\pi}$).

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.