Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
probml
GitHub Repository: probml/pyprobml
Path: blob/master/notebooks/book2/12/rjmcmc_rbf/gengamma.m
1193 views
1
function x = gengamma(alpha, beta)
2
% USED TO SAMPLE FROM A GAMMA DISTRIBUTION.
3
4
% AUTHOR: ARNAUD DOUCET.
5
6
% si alpha=1, on a une exponentielle beta
7
if (alpha==1)
8
x = -log(1-rand(1,1))/beta;
9
return
10
end
11
flag=0; % teste si alpha<1 ou alpha>1
12
if (alpha<1)
13
flag=1;
14
alpha=alpha+1;
15
end
16
gamma=alpha-1;
17
eta=sqrt(2.0*alpha-1.0);
18
c=.5-atan(gamma/eta)/pi;
19
aux=-.5;
20
while(aux<0)
21
y=-.5;
22
while(y<=0)
23
u=rand(1,1);
24
y = gamma + eta * tan(pi*(u-c)+c-.5);
25
end
26
v=-log(rand(1,1));
27
aux=v+log(1.0+((y-gamma)/eta)^2)+gamma*log(y/gamma)-y+gamma;
28
end;
29
30
if (flag==1)
31
x = y/beta*(rand(1))^(1.0/(alpha-1));
32
else
33
x = y/beta;
34
end
35
36