annotate libinterp/corefcn/rcond.cc @ 21317:a4faec57f4c8

maint: remove semicolon after %!assert tests to follow Octave conventions. * testfun.txi: Remove semicolons from examples in manual and update remaider of text to reflect changes. * bsxfun.cc, cellfun.cc, data.cc, hash.cc, lu.cc, nproc.cc, rcond.cc, regexp.cc, sparse-xpow.cc, strfns.cc, symtab.cc, time.cc, variables.cc, ov-class.cc, ov-cx-diag.cc, ov-struct.cc, ov.cc, oct-parse.in.yy, pt-mat.cc, CMatrix.cc, oct-inttypes.cc, md5sum.m, blkdiag.m, cell2mat.m, interp1.m, interp2.m, interpft.m, num2str.m, repmat.m, ntsc2rgb.m, expm.m, inputname.m, polyvalm.m, blackman.m, hamming.m, hanning.m, eigs.m, median.m, binopdf.m, strsplit.m, strtok.m, assert.m, example.m, datevec.m, bug-38565.tst, build-sparse-tests.sh, classdef.tst, classes.tst, diag-perm.tst, index.tst, io.tst, logical-index.tst, nest.tst, parser.tst, prefer.tst, struct.tst: maint: remove semicolon after %!assert tests to follow Octave conventions.
author Rik <rik@octave.org>
date Sun, 21 Feb 2016 08:10:36 -0800
parents 40de9f8f23a6
children aba2e6293dd8
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
21301
40de9f8f23a6 Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents: 21200
diff changeset
24 # include "config.h"
7788
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"
21100
e39e05d90788 Switch gripe_XXX to either err_XXX or warn_XXX naming scheme.
Rik <rik@octave.org>
parents: 20940
diff changeset
29 #include "errwarn.h"
20940
48b2ad5ee801 maint: Rename oct-obj.[cc|h] to ovl.[cc|h] for clarity.
Rik <rik@octave.org>
parents: 20939
diff changeset
30 #include "ovl.h"
7788
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\
20853
1142cf6abc0d 2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents: 20819
diff changeset
35 @deftypefn {} {@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 {
20819
f428cbe7576f eliminate unnecessary uses of nargin
John W. Eaton <jwe@octave.org>
parents: 20802
diff changeset
48 if (args.length () != 1)
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
49 print_usage ();
20802
8bb38ba1bad6 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20172
diff changeset
50
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
51 octave_value retval;
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
52
20802
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");
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
55
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
56 if (args(0).is_single_type ())
7797
f42c6f8d6d8e Extend rcond function to single precision types
David Bateman <dbateman@free.fr>
parents: 7788
diff changeset
57 {
f42c6f8d6d8e Extend rcond function to single precision types
David Bateman <dbateman@free.fr>
parents: 7788
diff changeset
58 if (args(0).is_complex_type ())
10154
40dfc0c99116 DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents: 9245
diff changeset
59 {
40dfc0c99116 DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents: 9245
diff changeset
60 FloatComplexMatrix m = args(0).float_complex_matrix_value ();
40dfc0c99116 DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents: 9245
diff changeset
61 MatrixType mattyp;
40dfc0c99116 DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents: 9245
diff changeset
62 retval = m.rcond (mattyp);
40dfc0c99116 DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents: 9245
diff changeset
63 args(0).matrix_type (mattyp);
40dfc0c99116 DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents: 9245
diff changeset
64 }
7797
f42c6f8d6d8e Extend rcond function to single precision types
David Bateman <dbateman@free.fr>
parents: 7788
diff changeset
65 else
10154
40dfc0c99116 DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents: 9245
diff changeset
66 {
40dfc0c99116 DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents: 9245
diff changeset
67 FloatMatrix m = args(0).float_matrix_value ();
40dfc0c99116 DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents: 9245
diff changeset
68 MatrixType mattyp;
40dfc0c99116 DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents: 9245
diff changeset
69 retval = m.rcond (mattyp);
40dfc0c99116 DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents: 9245
diff changeset
70 args(0).matrix_type (mattyp);
40dfc0c99116 DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents: 9245
diff changeset
71 }
7797
f42c6f8d6d8e Extend rcond function to single precision types
David Bateman <dbateman@free.fr>
parents: 7788
diff changeset
72 }
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
73 else if (args(0).is_complex_type ())
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
74 {
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
75 ComplexMatrix m = args(0).complex_matrix_value ();
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
76 MatrixType mattyp;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
77 retval = m.rcond (mattyp);
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
78 args(0).matrix_type (mattyp);
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
79 }
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
80 else
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
81 {
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
82 Matrix m = args(0).matrix_value ();
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
83 MatrixType mattyp;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
84 retval = m.rcond (mattyp);
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
85 args(0).matrix_type (mattyp);
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
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
88 return retval;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
89 }
12791
610a4e780a19 codesprint: write 4 test for rcond
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11572
diff changeset
90
610a4e780a19 codesprint: write 4 test for rcond
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11572
diff changeset
91 /*
14501
60e5cf354d80 Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
92 %!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
93 %!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
94 %!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
95 %!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
96
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
97 %!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
98 %! 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
99 %! sx = [-5.25, -2.25; -2.25, 1] * eps ("single") + ones (2) / 2;
21317
a4faec57f4c8 maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents: 21301
diff changeset
100 %!assert (rcond (x) < eps ())
a4faec57f4c8 maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents: 21301
diff changeset
101 %!assert (rcond (sx) < eps ('single'))
a4faec57f4c8 maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents: 21301
diff changeset
102 %!assert (rcond (x*i) < eps ())
a4faec57f4c8 maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents: 21301
diff changeset
103 %!assert (rcond (sx*i) < eps ('single'))
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
104
12791
610a4e780a19 codesprint: write 4 test for rcond
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11572
diff changeset
105 */