annotate scripts/specfun/factorial.m @ 9141:c1fff751b5a8

Update section 17.1 (Utility Functions) of arith.txi Split section into "Exponents and Logarithms" and "Utility Functions" Use Tex in many more of the doc strings for pretty printing in pdf format.
author Rik <rdrider0-list@yahoo.com>
date Mon, 20 Apr 2009 17:16:09 -0700
parents 1bf0ce0930be
children 8c71a86c4bf4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7017
a1dbe9d80eee [project @ 2007-10-12 21:27:11 by jwe]
jwe
parents: 7016
diff changeset
1 ## Copyright (C) 2000, 2006, 2007 Paul Kienzle
5820
27c966e4b2dc [project @ 2006-05-17 21:00:54 by jwe]
jwe
parents:
diff changeset
2 ##
27c966e4b2dc [project @ 2006-05-17 21:00:54 by jwe]
jwe
parents:
diff changeset
3 ## This file is part of Octave.
27c966e4b2dc [project @ 2006-05-17 21:00:54 by jwe]
jwe
parents:
diff changeset
4 ##
27c966e4b2dc [project @ 2006-05-17 21:00:54 by jwe]
jwe
parents:
diff changeset
5 ## Octave is free software; you can redistribute it and/or modify it
27c966e4b2dc [project @ 2006-05-17 21:00:54 by jwe]
jwe
parents:
diff changeset
6 ## under the terms of the GNU General Public License as published by
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6542
diff changeset
7 ## the Free Software Foundation; either version 3 of the License, or (at
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6542
diff changeset
8 ## your option) any later version.
5820
27c966e4b2dc [project @ 2006-05-17 21:00:54 by jwe]
jwe
parents:
diff changeset
9 ##
27c966e4b2dc [project @ 2006-05-17 21:00:54 by jwe]
jwe
parents:
diff changeset
10 ## Octave is distributed in the hope that it will be useful, but
27c966e4b2dc [project @ 2006-05-17 21:00:54 by jwe]
jwe
parents:
diff changeset
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of
27c966e4b2dc [project @ 2006-05-17 21:00:54 by jwe]
jwe
parents:
diff changeset
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
27c966e4b2dc [project @ 2006-05-17 21:00:54 by jwe]
jwe
parents:
diff changeset
13 ## General Public License for more details.
27c966e4b2dc [project @ 2006-05-17 21:00:54 by jwe]
jwe
parents:
diff changeset
14 ##
27c966e4b2dc [project @ 2006-05-17 21:00:54 by jwe]
jwe
parents:
diff changeset
15 ## You should have received a copy of the GNU General Public License
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6542
diff changeset
16 ## along with Octave; see the file COPYING. If not, see
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6542
diff changeset
17 ## <http://www.gnu.org/licenses/>.
5820
27c966e4b2dc [project @ 2006-05-17 21:00:54 by jwe]
jwe
parents:
diff changeset
18
27c966e4b2dc [project @ 2006-05-17 21:00:54 by jwe]
jwe
parents:
diff changeset
19 ## -*- texinfo -*-
27c966e4b2dc [project @ 2006-05-17 21:00:54 by jwe]
jwe
parents:
diff changeset
20 ## @deftypefn {Function File} {} factorial (@var{n})
9141
c1fff751b5a8 Update section 17.1 (Utility Functions) of arith.txi
Rik <rdrider0-list@yahoo.com>
parents: 9051
diff changeset
21 ## Return the factorial of @var{n}. If @var{n} is a scalar, this is
c1fff751b5a8 Update section 17.1 (Utility Functions) of arith.txi
Rik <rdrider0-list@yahoo.com>
parents: 9051
diff changeset
22 ## equivalent to @code{prod (1:@var{n})}. For vector or matrix arguments,
c1fff751b5a8 Update section 17.1 (Utility Functions) of arith.txi
Rik <rdrider0-list@yahoo.com>
parents: 9051
diff changeset
23 ## return the factorial of each element in the array.
5820
27c966e4b2dc [project @ 2006-05-17 21:00:54 by jwe]
jwe
parents:
diff changeset
24 ## @end deftypefn
27c966e4b2dc [project @ 2006-05-17 21:00:54 by jwe]
jwe
parents:
diff changeset
25
27c966e4b2dc [project @ 2006-05-17 21:00:54 by jwe]
jwe
parents:
diff changeset
26 function x = factorial (n)
6391
3f3e86e9fb57 [project @ 2007-03-07 18:14:44 by jwe]
jwe
parents: 5963
diff changeset
27 if (nargin != 1)
3f3e86e9fb57 [project @ 2007-03-07 18:14:44 by jwe]
jwe
parents: 5963
diff changeset
28 print_usage ();
6532
25cad08843a0 [project @ 2007-04-17 21:05:30 by jwe]
jwe
parents: 6391
diff changeset
29 elseif (any (n(:) < 0 | n(:) != round (n(:))))
25cad08843a0 [project @ 2007-04-17 21:05:30 by jwe]
jwe
parents: 6391
diff changeset
30 error ("factorial: n must all be nonnegative integers");
5820
27c966e4b2dc [project @ 2006-05-17 21:00:54 by jwe]
jwe
parents:
diff changeset
31 endif
6532
25cad08843a0 [project @ 2007-04-17 21:05:30 by jwe]
jwe
parents: 6391
diff changeset
32 x = round (gamma (n+1));
5820
27c966e4b2dc [project @ 2006-05-17 21:00:54 by jwe]
jwe
parents:
diff changeset
33 endfunction
6532
25cad08843a0 [project @ 2007-04-17 21:05:30 by jwe]
jwe
parents: 6391
diff changeset
34
25cad08843a0 [project @ 2007-04-17 21:05:30 by jwe]
jwe
parents: 6391
diff changeset
35 %!assert (factorial(5), prod(1:5))
25cad08843a0 [project @ 2007-04-17 21:05:30 by jwe]
jwe
parents: 6391
diff changeset
36 %!assert (factorial([1,2;3,4]), [1,2;6,24])
6542
90bc7594a7f8 [project @ 2007-04-19 03:19:11 by jwe]
jwe
parents: 6532
diff changeset
37 %!assert (factorial(70), exp(sum(log(1:70))), -128*eps)
6532
25cad08843a0 [project @ 2007-04-17 21:05:30 by jwe]
jwe
parents: 6391
diff changeset
38 %!fail ('factorial(5.5)', "must all be nonnegative integers")
25cad08843a0 [project @ 2007-04-17 21:05:30 by jwe]
jwe
parents: 6391
diff changeset
39 %!fail ('factorial(-3)', "must all be nonnegative integers")