annotate libinterp/corefcn/rcond.cc @ 20819:f428cbe7576f

eliminate unnecessary uses of nargin * __dsearchn__.cc, betainc.cc, bsxfun.cc, data.cc, debug.cc, det.cc, dot.cc, error.cc, file-io.cc, givens.cc, graphics.cc, hess.cc, hex2num.cc, input.cc, inv.cc, mgorth.cc, ordschur.cc, pr-output.cc, profiler.cc, rcond.cc, regexp.cc, sqrtm.cc, sub2ind.cc, sylvester.cc, syscalls.cc, sysdep.cc, tsearch.cc, urlwrite.cc, utils.cc, variables.cc: Don't use nargin variable unless it is used more than once.
author John W. Eaton <jwe@octave.org>
date Mon, 07 Dec 2015 13:54:01 -0500
parents 8bb38ba1bad6
children 1142cf6abc0d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
1 /*
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
2
19697
4197fc428c7d maint: Update copyright notices for 2015.
John W. Eaton <jwe@octave.org>
parents: 17787
diff changeset
3 Copyright (C) 2008-2015 David Bateman
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
4
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
5 This file is part of Octave.
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
6
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
7 Octave is free software; you can redistribute it and/or modify it
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
9 Free Software Foundation; either version 3 of the License, or (at your
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
10 option) any later version.
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
11
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
12 Octave is distributed in the hope that it will be useful, but WITHOUT
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
15 for more details.
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
16
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
18 along with Octave; see the file COPYING. If not, see
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
19 <http://www.gnu.org/licenses/>.
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
20
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
21 */
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
22
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
23 #ifdef HAVE_CONFIG_H
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
24 #include <config.h>
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
25 #endif
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
26
15039
e753177cde93 maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents: 14501
diff changeset
27 #include "defun.h"
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
28 #include "error.h"
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
29 #include "gripes.h"
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
30 #include "oct-obj.h"
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
31 #include "utils.h"
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
32
15039
e753177cde93 maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents: 14501
diff changeset
33 DEFUN (rcond, args, ,
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
34 "-*- texinfo -*-\n\
15039
e753177cde93 maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents: 14501
diff changeset
35 @deftypefn {Built-in Function} {@var{c} =} rcond (@var{A})\n\
11553
01f703952eff Improve docstrings for functions in DLD-FUNCTIONS directory.
Rik <octave@nomad.inbox5.com>
parents: 11523
diff changeset
36 Compute the 1-norm estimate of the reciprocal condition number as returned\n\
20172
4f45eaf83908 doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19697
diff changeset
37 by @sc{lapack}.\n\
4f45eaf83908 doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19697
diff changeset
38 \n\
4f45eaf83908 doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19697
diff changeset
39 If the matrix is well-conditioned then @var{c} will be near 1 and if the\n\
4f45eaf83908 doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19697
diff changeset
40 matrix is poorly conditioned it will be close to 0.\n\
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
41 \n\
11553
01f703952eff Improve docstrings for functions in DLD-FUNCTIONS directory.
Rik <octave@nomad.inbox5.com>
parents: 11523
diff changeset
42 The matrix @var{A} must not be sparse. If the matrix is sparse then\n\
01f703952eff Improve docstrings for functions in DLD-FUNCTIONS directory.
Rik <octave@nomad.inbox5.com>
parents: 11523
diff changeset
43 @code{condest (@var{A})} or @code{rcond (full (@var{A}))} should be used\n\
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
44 instead.\n\
11572
7d6d8c1e471f Grammarcheck Texinfo for files in src directory.
Rik <octave@nomad.inbox5.com>
parents: 11553
diff changeset
45 @seealso{cond, condest}\n\
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
46 @end deftypefn")
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
47 {
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
48 octave_value retval;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
49
20819
f428cbe7576f eliminate unnecessary uses of nargin
John W. Eaton <jwe@octave.org>
parents: 20802
diff changeset
50 if (args.length () != 1)
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
51 print_usage ();
20802
8bb38ba1bad6 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20172
diff changeset
52
8bb38ba1bad6 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20172
diff changeset
53 if (args(0).is_sparse_type ())
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
54 error ("rcond: for sparse matrices use 'rcond (full (a))' or 'condest (a)' instead");
7797
f42c6f8d6d8e Extend rcond function to single precision types
David Bateman <dbateman@free.fr>
parents: 7788
diff changeset
55 else if (args(0).is_single_type ())
f42c6f8d6d8e Extend rcond function to single precision types
David Bateman <dbateman@free.fr>
parents: 7788
diff changeset
56 {
f42c6f8d6d8e Extend rcond function to single precision types
David Bateman <dbateman@free.fr>
parents: 7788
diff changeset
57 if (args(0).is_complex_type ())
10154
40dfc0c99116 DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents: 9245
diff changeset
58 {
40dfc0c99116 DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents: 9245
diff changeset
59 FloatComplexMatrix m = args(0).float_complex_matrix_value ();
40dfc0c99116 DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents: 9245
diff changeset
60 MatrixType mattyp;
40dfc0c99116 DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents: 9245
diff changeset
61 retval = m.rcond (mattyp);
40dfc0c99116 DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents: 9245
diff changeset
62 args(0).matrix_type (mattyp);
40dfc0c99116 DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents: 9245
diff changeset
63 }
7797
f42c6f8d6d8e Extend rcond function to single precision types
David Bateman <dbateman@free.fr>
parents: 7788
diff changeset
64 else
10154
40dfc0c99116 DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents: 9245
diff changeset
65 {
40dfc0c99116 DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents: 9245
diff changeset
66 FloatMatrix m = args(0).float_matrix_value ();
40dfc0c99116 DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents: 9245
diff changeset
67 MatrixType mattyp;
40dfc0c99116 DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents: 9245
diff changeset
68 retval = m.rcond (mattyp);
40dfc0c99116 DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents: 9245
diff changeset
69 args(0).matrix_type (mattyp);
40dfc0c99116 DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents: 9245
diff changeset
70 }
7797
f42c6f8d6d8e Extend rcond function to single precision types
David Bateman <dbateman@free.fr>
parents: 7788
diff changeset
71 }
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
72 else if (args(0).is_complex_type ())
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
73 {
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
74 ComplexMatrix m = args(0).complex_matrix_value ();
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
75 MatrixType mattyp;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
76 retval = m.rcond (mattyp);
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
77 args(0).matrix_type (mattyp);
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
78 }
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
79 else
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
80 {
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
81 Matrix m = args(0).matrix_value ();
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
82 MatrixType mattyp;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
83 retval = m.rcond (mattyp);
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
84 args(0).matrix_type (mattyp);
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
85 }
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
86
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
87 return retval;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
88 }
12791
610a4e780a19 codesprint: write 4 test for rcond
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11572
diff changeset
89
610a4e780a19 codesprint: write 4 test for rcond
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11572
diff changeset
90 /*
14501
60e5cf354d80 Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
91 %!assert (rcond (eye (2)), 1)
60e5cf354d80 Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
92 %!assert (rcond (ones (2)), 0)
60e5cf354d80 Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
93 %!assert (rcond ([1 1; 2 1]), 1/9)
60e5cf354d80 Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
94 %!assert (rcond (magic (4)), 0, eps)
12791
610a4e780a19 codesprint: write 4 test for rcond
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11572
diff changeset
95
15382
197774b411ec rcond: use new copy of data for full factorization if positive definite cholesky factorization fails (bug #37336)
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
96 %!shared x, sx
197774b411ec rcond: use new copy of data for full factorization if positive definite cholesky factorization fails (bug #37336)
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
97 %! x = [-5.25, -2.25; -2.25, 1] * eps () + ones (2) / 2;
197774b411ec rcond: use new copy of data for full factorization if positive definite cholesky factorization fails (bug #37336)
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
98 %! sx = [-5.25, -2.25; -2.25, 1] * eps ("single") + ones (2) / 2;
197774b411ec rcond: use new copy of data for full factorization if positive definite cholesky factorization fails (bug #37336)
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
99 %!assert (rcond (x) < eps ());
197774b411ec rcond: use new copy of data for full factorization if positive definite cholesky factorization fails (bug #37336)
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
100 %!assert (rcond (sx) < eps ('single'));
197774b411ec rcond: use new copy of data for full factorization if positive definite cholesky factorization fails (bug #37336)
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
101 %!assert (rcond (x*i) < eps ());
197774b411ec rcond: use new copy of data for full factorization if positive definite cholesky factorization fails (bug #37336)
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
102 %!assert (rcond (sx*i) < eps ('single'));
197774b411ec rcond: use new copy of data for full factorization if positive definite cholesky factorization fails (bug #37336)
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
103
12791
610a4e780a19 codesprint: write 4 test for rcond
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11572
diff changeset
104 */