annotate libinterp/corefcn/rcond.cc @ 20616:fd0efcdb3718

use new string_value method to handle value extraction errors * dirfns.cc, file-io.cc, gammainc.cc, help.cc, load-path.cc, octave-link.cc, qz.cc, regexp.cc, strfns.cc, syscalls.cc, time.cc, variables.cc: Use new string_value method.
author John W. Eaton <jwe@octave.org>
date Thu, 08 Oct 2015 19:00:51 -0400
parents 4f45eaf83908
children
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
19731
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\
20207
4f45eaf83908 doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19731
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: 19731
diff changeset
38 \n\
4f45eaf83908 doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19731
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: 19731
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
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
50 int nargin = args.length ();
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
51
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
52 if (nargin != 1)
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
53 print_usage ();
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
54 else if (args(0).is_sparse_type ())
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents:
diff changeset
55 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
56 else if (args(0).is_single_type ())
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;
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 (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
101 %!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
102 %!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
103 %!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
104
12791
610a4e780a19 codesprint: write 4 test for rcond
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11572
diff changeset
105 */