0001 function x = qgamma(p,a)
0002
0003
0004
0005
0006
0007
0008
0009 if any(any(abs(2*p-1)>1))
0010 error('A probability should be 0<=p<=1, please!')
0011 end
0012 if any(any(a<=0))
0013 error('Parameter a is wrong')
0014 end
0015
0016 x = max(a-1,0.1);
0017 dx = 1;
0018 while any(any(abs(dx)>256*eps*max(x,1)))
0019 dx = (pgamma(x,a) - p) ./ dgamma(x,a,1);
0020 x = x - dx;
0021 x = x + (dx - x) / 2 .* (x<0);
0022 end
0023
0024 I0 = find(p==0);
0025 x(I0) = zeros(size(I0));
0026 I1 = find(p==1);
0027 x(I1) = zeros(size(I1)) + Inf;