PDF version (NAG web site
, 64-bit version, 64-bit version)
NAG Toolbox: nag_specfun_gamma_log_real (s14ab)
Purpose
nag_specfun_gamma_log_real (s14ab) returns the value of the logarithm of the gamma function, , via the function name.
Syntax
Description
nag_specfun_gamma_log_real (s14ab) calculates an approximate value for . It is based on rational Chebyshev expansions.
Denote by
a ratio of polynomials of degree
in the numerator and
in the denominator. Then:
- for ,
- for ,
- for ,
- for ,
- and for ,
For each expansion, the specific values of
and
are selected to be minimal such that the maximum relative error in the expansion is of the order
, where
is the maximum number of decimal digits that can be accurately represented for the particular implementation (see
nag_machine_decimal_digits (x02be)).
Let
denote
machine precision and let
denote the largest positive model number (see
nag_machine_real_largest (x02al)). For
the value
is not defined;
nag_specfun_gamma_log_real (s14ab) returns zero and exits with
. It also exits with
when
, and in this case the value
is returned. For
in the interval
, the function
to machine accuracy.
Now denote by
the largest allowable argument for
on the machine. For
the
term in Equation
(1) is negligible. For
there is a danger of setting overflow, and so
nag_specfun_gamma_log_real (s14ab) exits with
and returns
.
References
Abramowitz M and Stegun I A (1972) Handbook of Mathematical Functions (3rd Edition) Dover Publications
Cody W J and Hillstrom K E (1967) Chebyshev approximations for the natural logarithm of the gamma function Math.Comp. 21 198–203
Parameters
Compulsory Input Parameters
- 1:
– double scalar
-
The argument of the function.
Constraint:
.
Optional Input Parameters
None.
Output Parameters
- 1:
– double scalar
The result of the function.
- 2:
– int64int32nag_int scalar
unless the function detects an error (see
Error Indicators and Warnings).
Error Indicators and Warnings
Errors or warnings detected by the function:
Cases prefixed with W are classified as warnings and
do not generate an error of type NAG:error_n. See nag_issue_warnings.
-
-
On entry,
. If
the function is undefined; on soft failure, the function value returned is zero. If
and soft failure is selected, the function value returned is the largest machine number (see
nag_machine_real_largest (x02al)).
- W
-
On entry,
(see
Description). On soft failure, the function value returned is the largest machine number (see
nag_machine_real_largest (x02al)).
-
An unexpected error has been triggered by this routine. Please
contact
NAG.
-
Your licence key may have expired or may not have been installed correctly.
-
Dynamic memory allocation failed.
Accuracy
Let and be the relative errors in the argument and result respectively, and be the absolute error in the result.
If
is somewhat larger than
machine precision, then
where
is the digamma function
.
Figure 1 and
Figure 2 show the behaviour of these error amplification factors.
These show that relative error can be controlled, since except near relative error is attenuated by the function or at least is not greatly amplified.
For large , and for small , .
The function has zeros at and and hence relative accuracy is not maintainable near those points. However absolute accuracy can still be provided near those zeros as is shown above.
If however,
is of the order of
machine precision, then rounding errors in the function's internal arithmetic may result in errors which are slightly larger than those predicted by the equalities. It should be noted that even in areas where strong attenuation of errors is predicted the relative precision is bounded by the effective machine precision.
Further Comments
None.
Example
This example reads values of the argument from a file, evaluates the function at each value of and prints the results.
Open in the MATLAB editor:
s14ab_example
function s14ab_example
fprintf('s14ab example results\n\n');
x = [ 1 1.25 1.5 1.75 2 5 10 20 1000];
n = size(x,2);
result = x;
for j=1:n
[result(j), ifail] = s14ab(x(j));
end
disp(' x log_gamma(x)');
fprintf('%12.3e%12.3e\n',[x; result]);
s14ab_plot;
function s14ab_plot
x = [0.1:0.2:8];
for j=1:numel(x)
[lg(j), ifail] = s14ab(x(j));
end
fig1 = figure;
plot(x,lg,'-r');
xlabel('x');
ylabel('ln \Gamma(x)');
title('Logarithm of Gamma Function ln \Gamma(x)');
axis([0 8 -1 9]);
s14ab example results
x log_gamma(x)
1.000e+00 0.000e+00
1.250e+00 -9.827e-02
1.500e+00 -1.208e-01
1.750e+00 -8.440e-02
2.000e+00 0.000e+00
5.000e+00 3.178e+00
1.000e+01 1.280e+01
2.000e+01 3.934e+01
1.000e+03 5.905e+03
PDF version (NAG web site
, 64-bit version, 64-bit version)
© The Numerical Algorithms Group Ltd, Oxford, UK. 2009–2015