Mercurial > hg > octave-nkf
annotate scripts/general/bincoeff.m @ 20511:eca5aa3225f4
imshow.m: Add support for 'parent' property (bug #45473).
* imshow.m: Add cell variable prop_val_args{:} when calling image or imagesc.
Populate prop_val_args with {"parent", hparent} when "parent" argument given
to imshow. Remove code commented out in 2015/05/1 which has not caused any
problems. Add warning that arguments "border" and "reduce" are not supported.
author | Rik <rik@octave.org> |
---|---|
date | Sun, 05 Jul 2015 13:55:56 -0700 |
parents | 9fc020886ae9 |
children |
rev | line source |
---|---|
19898
4197fc428c7d
maint: Update copyright notices for 2015.
John W. Eaton <jwe@octave.org>
parents:
17745
diff
changeset
|
1 ## Copyright (C) 1995-2015 Kurt Hornik |
3426 | 2 ## |
3922 | 3 ## This file is part of Octave. |
4 ## | |
5 ## Octave is free software; you can redistribute it and/or modify it | |
6 ## under the terms of the GNU General Public License as published by | |
7016 | 7 ## the Free Software Foundation; either version 3 of the License, or (at |
8 ## your option) any later version. | |
3426 | 9 ## |
3922 | 10 ## Octave is distributed in the hope that it will be useful, but |
2538 | 11 ## WITHOUT ANY WARRANTY; without even the implied warranty of |
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
3426 | 13 ## General Public License for more details. |
14 ## | |
2538 | 15 ## You should have received a copy of the GNU General Public License |
7016 | 16 ## along with Octave; see the file COPYING. If not, see |
17 ## <http://www.gnu.org/licenses/>. | |
2538 | 18 |
3321 | 19 ## -*- texinfo -*- |
20 ## @deftypefn {Mapping Function} {} bincoeff (@var{n}, @var{k}) | |
21 ## Return the binomial coefficient of @var{n} and @var{k}, defined as | |
22 ## @tex | |
23 ## $$ | |
24 ## {n \choose k} = {n (n-1) (n-2) \cdots (n-k+1) \over k!} | |
25 ## $$ | |
26 ## @end tex | |
8517
81d6ab3ac93c
Allow documentation tobe built for other formats than tex and info
sh@sh-laptop
parents:
8435
diff
changeset
|
27 ## @ifnottex |
3426 | 28 ## |
3321 | 29 ## @example |
30 ## @group | |
31 ## / \ | |
9051
1bf0ce0930be
Grammar check TexInfo in all .m files
Rik <rdrider0-list@yahoo.com>
parents:
8920
diff
changeset
|
32 ## | n | n (n-1) (n-2) @dots{} (n-k+1) |
3321 | 33 ## | | = ------------------------- |
34 ## | k | k! | |
35 ## \ / | |
36 ## @end group | |
37 ## @end example | |
10821
693e22af08ae
Grammarcheck documentation of m-files
Rik <octave@nomad.inbox5.com>
parents:
10549
diff
changeset
|
38 ## |
8517
81d6ab3ac93c
Allow documentation tobe built for other formats than tex and info
sh@sh-laptop
parents:
8435
diff
changeset
|
39 ## @end ifnottex |
10821
693e22af08ae
Grammarcheck documentation of m-files
Rik <octave@nomad.inbox5.com>
parents:
10549
diff
changeset
|
40 ## For example: |
3426 | 41 ## |
3321 | 42 ## @example |
43 ## @group | |
44 ## bincoeff (5, 2) | |
14327
4d917a6a858b
doc: Use Octave coding conventions in @example blocks of docstrings.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
45 ## @result{} 10 |
3321 | 46 ## @end group |
47 ## @end example | |
8435
69e27978114a
bincoeff.m: make reference to nchoosek
Francesco Potortì <pot@gnu.org>
parents:
7385
diff
changeset
|
48 ## |
69e27978114a
bincoeff.m: make reference to nchoosek
Francesco Potortì <pot@gnu.org>
parents:
7385
diff
changeset
|
49 ## In most cases, the @code{nchoosek} function is faster for small |
69e27978114a
bincoeff.m: make reference to nchoosek
Francesco Potortì <pot@gnu.org>
parents:
7385
diff
changeset
|
50 ## scalar integer arguments. It also warns about loss of precision for |
69e27978114a
bincoeff.m: make reference to nchoosek
Francesco Potortì <pot@gnu.org>
parents:
7385
diff
changeset
|
51 ## big arguments. |
69e27978114a
bincoeff.m: make reference to nchoosek
Francesco Potortì <pot@gnu.org>
parents:
7385
diff
changeset
|
52 ## |
69e27978114a
bincoeff.m: make reference to nchoosek
Francesco Potortì <pot@gnu.org>
parents:
7385
diff
changeset
|
53 ## @seealso{nchoosek} |
3321 | 54 ## @end deftypefn |
2538 | 55 |
5428 | 56 ## Author: KH <Kurt.Hornik@wu-wien.ac.at> |
2538 | 57 ## Created: 8 October 1994 |
58 ## Adapted-By: jwe | |
59 | |
60 function b = bincoeff (n, k) | |
3426 | 61 |
2538 | 62 if (nargin != 2) |
6046 | 63 print_usage (); |
2538 | 64 endif |
3426 | 65 |
2538 | 66 [retval, n, k] = common_size (n, k); |
67 if (retval > 0) | |
11472
1740012184f9
Use uppercase for variable names in error() strings to match Info documentation. Only m-files done.
Rik <octave@nomad.inbox5.com>
parents:
10821
diff
changeset
|
68 error ("bincoeff: N and K must be of common size or scalars"); |
2538 | 69 endif |
3426 | 70 |
13169
078729410a0d
bincoeff.m: 15% speed improvement and better input validation
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
71 if (iscomplex (n) || iscomplex (k)) |
078729410a0d
bincoeff.m: 15% speed improvement and better input validation
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
72 error ("bincoeff: N and K must not be complex"); |
078729410a0d
bincoeff.m: 15% speed improvement and better input validation
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
73 endif |
3426 | 74 |
13169
078729410a0d
bincoeff.m: 15% speed improvement and better input validation
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
75 b = zeros (size (n)); |
11587
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
76 |
13169
078729410a0d
bincoeff.m: 15% speed improvement and better input validation
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
77 ok = (k >= 0) & (k == fix (k)) & (! isnan (n)); |
078729410a0d
bincoeff.m: 15% speed improvement and better input validation
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
78 b(! ok) = NaN; |
2538 | 79 |
13169
078729410a0d
bincoeff.m: 15% speed improvement and better input validation
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
80 n_int = (n == fix (n)); |
078729410a0d
bincoeff.m: 15% speed improvement and better input validation
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
81 idx = n_int & (n < 0) & ok; |
078729410a0d
bincoeff.m: 15% speed improvement and better input validation
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
82 b(idx) = (-1) .^ k(idx) .* exp (gammaln (abs (n(idx)) + k(idx)) |
078729410a0d
bincoeff.m: 15% speed improvement and better input validation
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
83 - gammaln (k(idx) + 1) |
078729410a0d
bincoeff.m: 15% speed improvement and better input validation
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
84 - gammaln (abs (n(idx)))); |
3426 | 85 |
13169
078729410a0d
bincoeff.m: 15% speed improvement and better input validation
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
86 idx = (n >= k) & ok; |
078729410a0d
bincoeff.m: 15% speed improvement and better input validation
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
87 b(idx) = exp (gammaln (n(idx) + 1) |
078729410a0d
bincoeff.m: 15% speed improvement and better input validation
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
88 - gammaln (k(idx) + 1) |
078729410a0d
bincoeff.m: 15% speed improvement and better input validation
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
89 - gammaln (n(idx) - k(idx) + 1)); |
6902 | 90 |
13169
078729410a0d
bincoeff.m: 15% speed improvement and better input validation
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
91 idx = (! n_int) & (n < k) & ok; |
078729410a0d
bincoeff.m: 15% speed improvement and better input validation
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
92 b(idx) = (1/pi) * exp (gammaln (n(idx) + 1) |
078729410a0d
bincoeff.m: 15% speed improvement and better input validation
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
93 - gammaln (k(idx) + 1) |
078729410a0d
bincoeff.m: 15% speed improvement and better input validation
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
94 + gammaln (k(idx) - n(idx)) |
078729410a0d
bincoeff.m: 15% speed improvement and better input validation
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
95 + log (sin (pi * (n(idx) - k(idx) + 1)))); |
6902 | 96 |
97 ## Clean up rounding errors. | |
13169
078729410a0d
bincoeff.m: 15% speed improvement and better input validation
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
98 b(n_int) = round (b(n_int)); |
6902 | 99 |
13169
078729410a0d
bincoeff.m: 15% speed improvement and better input validation
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
100 idx = ! n_int; |
078729410a0d
bincoeff.m: 15% speed improvement and better input validation
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
101 b(idx) = real (b(idx)); |
6902 | 102 |
2538 | 103 endfunction |
104 | |
13169
078729410a0d
bincoeff.m: 15% speed improvement and better input validation
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
105 |
14363
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14327
diff
changeset
|
106 %!assert (bincoeff (4, 2), 6) |
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14327
diff
changeset
|
107 %!assert (bincoeff (2, 4), 0) |
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14327
diff
changeset
|
108 %!assert (bincoeff (-4, 2), 10) |
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14327
diff
changeset
|
109 %!assert (bincoeff (5, 2), 10) |
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14327
diff
changeset
|
110 %!assert (bincoeff (50, 6), 15890700) |
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14327
diff
changeset
|
111 %!assert (bincoeff (0.4, 2), -.12, 8*eps) |
7385 | 112 |
14363
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14327
diff
changeset
|
113 %!assert (bincoeff ([4 NaN 4], [-1, 2, 2.5]), NaN (1, 3)) |
7385 | 114 |
20038
9fc020886ae9
maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19898
diff
changeset
|
115 ## Test input validation |
14363
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14327
diff
changeset
|
116 %!error bincoeff () |
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14327
diff
changeset
|
117 %!error bincoeff (1, 2, 3) |
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14327
diff
changeset
|
118 %!error bincoeff (ones (3),ones (2)) |
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14327
diff
changeset
|
119 %!error bincoeff (ones (2),ones (3)) |
7385 | 120 |