MathOverflow will be down for maintenance for approximately 3 hours, starting Monday evening (06/24/2013) at approximately 9:00 PM Eastern time (UTC-4).
3

1

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.

flag
"Numerical Recipes in C" (highly recommended) says to use the Gamma function. – Stopple Aug 2 2011 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 2011 at 18:20
try out: netlib.org/slatec esp. netlib.org/slatec/src/dgamln.f – suVRit Aug 2 2011 at 18:35
Fortran eugh. ;) – Lucas Aug 2 2011 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 2011 at 22:09
show 1 more comment

1 Answer

2

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}$).

link|flag

Your Answer

Get an OpenID
or

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