annotate scripts/linear-algebra/rank.m @ 20170:af2b7695f1c4 draft default tip @

gallery.m: clean and vectorize part of qmult. * scripts/special-matrix/gallery.m: make qmult() follow Octave guidelines, vectorize last for loop in qmult().
author Antonio Pino Robles <data.script93@gmail.com>
date Thu, 28 May 2015 18:32:47 +0200
parents 4197fc428c7d
children 03b9d17a2d95
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
19697
4197fc428c7d maint: Update copyright notices for 2015.
John W. Eaton <jwe@octave.org>
parents: 17744
diff changeset
1 ## Copyright (C) 1993-2015 John W. Eaton
2313
5ca126254d15 [project @ 1996-07-11 21:25:22 by jwe]
jwe
parents: 2311
diff changeset
2 ##
5ca126254d15 [project @ 1996-07-11 21:25:22 by jwe]
jwe
parents: 2311
diff changeset
3 ## This file is part of Octave.
5ca126254d15 [project @ 1996-07-11 21:25:22 by jwe]
jwe
parents: 2311
diff changeset
4 ##
5ca126254d15 [project @ 1996-07-11 21:25:22 by jwe]
jwe
parents: 2311
diff changeset
5 ## Octave is free software; you can redistribute it and/or modify it
5ca126254d15 [project @ 1996-07-11 21:25:22 by jwe]
jwe
parents: 2311
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: 6046
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: 6046
diff changeset
8 ## your option) any later version.
2313
5ca126254d15 [project @ 1996-07-11 21:25:22 by jwe]
jwe
parents: 2311
diff changeset
9 ##
5ca126254d15 [project @ 1996-07-11 21:25:22 by jwe]
jwe
parents: 2311
diff changeset
10 ## Octave is distributed in the hope that it will be useful, but
5ca126254d15 [project @ 1996-07-11 21:25:22 by jwe]
jwe
parents: 2311
diff changeset
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of
5ca126254d15 [project @ 1996-07-11 21:25:22 by jwe]
jwe
parents: 2311
diff changeset
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5ca126254d15 [project @ 1996-07-11 21:25:22 by jwe]
jwe
parents: 2311
diff changeset
13 ## General Public License for more details.
5ca126254d15 [project @ 1996-07-11 21:25:22 by jwe]
jwe
parents: 2311
diff changeset
14 ##
5ca126254d15 [project @ 1996-07-11 21:25:22 by jwe]
jwe
parents: 2311
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: 6046
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: 6046
diff changeset
17 ## <http://www.gnu.org/licenses/>.
245
16a24e76d6e0 [project @ 1993-12-03 02:00:15 by jwe]
jwe
parents: 4
diff changeset
18
3372
f16c2ce14886 [project @ 1999-11-23 19:07:09 by jwe]
jwe
parents: 2847
diff changeset
19 ## -*- texinfo -*-
12584
7ef7e20057fa Improve documentation strings in Linear Algebra chapter.
Rik <octave@nomad.inbox5.com>
parents: 11523
diff changeset
20 ## @deftypefn {Function File} {} rank (@var{A})
7ef7e20057fa Improve documentation strings in Linear Algebra chapter.
Rik <octave@nomad.inbox5.com>
parents: 11523
diff changeset
21 ## @deftypefnx {Function File} {} rank (@var{A}, @var{tol})
16952
3c20fb2aa419 doc: Add example to rank docstring.
Rik <rik@octave.org>
parents: 14363
diff changeset
22 ## Compute the rank of matrix @var{A}, using the singular value decomposition.
3c20fb2aa419 doc: Add example to rank docstring.
Rik <rik@octave.org>
parents: 14363
diff changeset
23 ##
11470
eb9e0b597d61 Use common names for variables in documentation and code for a few more m-script files.
Rik <octave@nomad.inbox5.com>
parents: 10549
diff changeset
24 ## The rank is taken to be the number of singular values of @var{A} that
3372
f16c2ce14886 [project @ 1999-11-23 19:07:09 by jwe]
jwe
parents: 2847
diff changeset
25 ## are greater than the specified tolerance @var{tol}. If the second
f16c2ce14886 [project @ 1999-11-23 19:07:09 by jwe]
jwe
parents: 2847
diff changeset
26 ## argument is omitted, it is taken to be
3426
f8dde1807dee [project @ 2000-01-13 08:40:00 by jwe]
jwe
parents: 3372
diff changeset
27 ##
3372
f16c2ce14886 [project @ 1999-11-23 19:07:09 by jwe]
jwe
parents: 2847
diff changeset
28 ## @example
11470
eb9e0b597d61 Use common names for variables in documentation and code for a few more m-script files.
Rik <octave@nomad.inbox5.com>
parents: 10549
diff changeset
29 ## tol = max (size (@var{A})) * sigma(1) * eps;
3372
f16c2ce14886 [project @ 1999-11-23 19:07:09 by jwe]
jwe
parents: 2847
diff changeset
30 ## @end example
3426
f8dde1807dee [project @ 2000-01-13 08:40:00 by jwe]
jwe
parents: 3372
diff changeset
31 ##
3372
f16c2ce14886 [project @ 1999-11-23 19:07:09 by jwe]
jwe
parents: 2847
diff changeset
32 ## @noindent
3600
c11d138d654a [project @ 2000-02-24 03:55:32 by jwe]
jwe
parents: 3426
diff changeset
33 ## where @code{eps} is machine precision and @code{sigma(1)} is the largest
11470
eb9e0b597d61 Use common names for variables in documentation and code for a few more m-script files.
Rik <octave@nomad.inbox5.com>
parents: 10549
diff changeset
34 ## singular value of @var{A}.
16952
3c20fb2aa419 doc: Add example to rank docstring.
Rik <rik@octave.org>
parents: 14363
diff changeset
35 ##
3c20fb2aa419 doc: Add example to rank docstring.
Rik <rik@octave.org>
parents: 14363
diff changeset
36 ## The rank of a matrix is the number of linearly independent rows or
3c20fb2aa419 doc: Add example to rank docstring.
Rik <rik@octave.org>
parents: 14363
diff changeset
37 ## columns and determines how many particular solutions exist to a system
3c20fb2aa419 doc: Add example to rank docstring.
Rik <rik@octave.org>
parents: 14363
diff changeset
38 ## of equations. Use @code{null} for finding the remaining homogenous
3c20fb2aa419 doc: Add example to rank docstring.
Rik <rik@octave.org>
parents: 14363
diff changeset
39 ## solutions.
3c20fb2aa419 doc: Add example to rank docstring.
Rik <rik@octave.org>
parents: 14363
diff changeset
40 ##
3c20fb2aa419 doc: Add example to rank docstring.
Rik <rik@octave.org>
parents: 14363
diff changeset
41 ## Example:
3c20fb2aa419 doc: Add example to rank docstring.
Rik <rik@octave.org>
parents: 14363
diff changeset
42 ##
3c20fb2aa419 doc: Add example to rank docstring.
Rik <rik@octave.org>
parents: 14363
diff changeset
43 ## @example
3c20fb2aa419 doc: Add example to rank docstring.
Rik <rik@octave.org>
parents: 14363
diff changeset
44 ## @group
3c20fb2aa419 doc: Add example to rank docstring.
Rik <rik@octave.org>
parents: 14363
diff changeset
45 ## x = [1 2 3
3c20fb2aa419 doc: Add example to rank docstring.
Rik <rik@octave.org>
parents: 14363
diff changeset
46 ## 4 5 6
3c20fb2aa419 doc: Add example to rank docstring.
Rik <rik@octave.org>
parents: 14363
diff changeset
47 ## 7 8 9];
3c20fb2aa419 doc: Add example to rank docstring.
Rik <rik@octave.org>
parents: 14363
diff changeset
48 ## rank (x)
3c20fb2aa419 doc: Add example to rank docstring.
Rik <rik@octave.org>
parents: 14363
diff changeset
49 ## @result{} 2
3c20fb2aa419 doc: Add example to rank docstring.
Rik <rik@octave.org>
parents: 14363
diff changeset
50 ## @end group
3c20fb2aa419 doc: Add example to rank docstring.
Rik <rik@octave.org>
parents: 14363
diff changeset
51 ## @end example
3c20fb2aa419 doc: Add example to rank docstring.
Rik <rik@octave.org>
parents: 14363
diff changeset
52 ##
3c20fb2aa419 doc: Add example to rank docstring.
Rik <rik@octave.org>
parents: 14363
diff changeset
53 ## @noindent
3c20fb2aa419 doc: Add example to rank docstring.
Rik <rik@octave.org>
parents: 14363
diff changeset
54 ## The number of linearly independent rows is only 2 because the final row
3c20fb2aa419 doc: Add example to rank docstring.
Rik <rik@octave.org>
parents: 14363
diff changeset
55 ## is a linear combination of -1*row1 + 2*row2.
3c20fb2aa419 doc: Add example to rank docstring.
Rik <rik@octave.org>
parents: 14363
diff changeset
56 ##
3c20fb2aa419 doc: Add example to rank docstring.
Rik <rik@octave.org>
parents: 14363
diff changeset
57 ## @seealso{null, sprank, svd}
3372
f16c2ce14886 [project @ 1999-11-23 19:07:09 by jwe]
jwe
parents: 2847
diff changeset
58 ## @end deftypefn
4
b4df021f796c [project @ 1993-08-08 01:26:08 by jwe]
jwe
parents:
diff changeset
59
2314
949ab8eba8bc [project @ 1996-07-12 03:58:02 by jwe]
jwe
parents: 2313
diff changeset
60 ## Author: jwe
949ab8eba8bc [project @ 1996-07-12 03:58:02 by jwe]
jwe
parents: 2313
diff changeset
61
2311
2b5788792cad [project @ 1996-07-11 20:18:38 by jwe]
jwe
parents: 2303
diff changeset
62 function retval = rank (A, tol)
4
b4df021f796c [project @ 1993-08-08 01:26:08 by jwe]
jwe
parents:
diff changeset
63
b4df021f796c [project @ 1993-08-08 01:26:08 by jwe]
jwe
parents:
diff changeset
64 if (nargin == 1)
b4df021f796c [project @ 1993-08-08 01:26:08 by jwe]
jwe
parents:
diff changeset
65 sigma = svd (A);
4706
2c73119a576a [project @ 2004-01-22 04:36:54 by jwe]
jwe
parents: 3600
diff changeset
66 if (isempty (sigma))
2c73119a576a [project @ 2004-01-22 04:36:54 by jwe]
jwe
parents: 3600
diff changeset
67 tolerance = 0;
2c73119a576a [project @ 2004-01-22 04:36:54 by jwe]
jwe
parents: 3600
diff changeset
68 else
7795
df9519e9990c Handle single precision eps values
David Bateman <dbateman@free.fr>
parents: 7017
diff changeset
69 if (isa (A, "single"))
10549
95c3e38098bf Untabify .m scripts
Rik <code@nomad.inbox5.com>
parents: 9245
diff changeset
70 tolerance = max (size (A)) * sigma (1) * eps ("single");
7795
df9519e9990c Handle single precision eps values
David Bateman <dbateman@free.fr>
parents: 7017
diff changeset
71 else
10549
95c3e38098bf Untabify .m scripts
Rik <code@nomad.inbox5.com>
parents: 9245
diff changeset
72 tolerance = max (size (A)) * sigma (1) * eps;
7795
df9519e9990c Handle single precision eps values
David Bateman <dbateman@free.fr>
parents: 7017
diff changeset
73 endif
4706
2c73119a576a [project @ 2004-01-22 04:36:54 by jwe]
jwe
parents: 3600
diff changeset
74 endif
4
b4df021f796c [project @ 1993-08-08 01:26:08 by jwe]
jwe
parents:
diff changeset
75 elseif (nargin == 2)
262
5f18dd3a9b61 [project @ 1993-12-29 08:55:02 by jwe]
jwe
parents: 245
diff changeset
76 sigma = svd (A);
4
b4df021f796c [project @ 1993-08-08 01:26:08 by jwe]
jwe
parents:
diff changeset
77 tolerance = tol;
b4df021f796c [project @ 1993-08-08 01:26:08 by jwe]
jwe
parents:
diff changeset
78 else
6046
34f96dd5441b [project @ 2006-10-10 16:10:25 by jwe]
jwe
parents: 5307
diff changeset
79 print_usage ();
4
b4df021f796c [project @ 1993-08-08 01:26:08 by jwe]
jwe
parents:
diff changeset
80 endif
4706
2c73119a576a [project @ 2004-01-22 04:36:54 by jwe]
jwe
parents: 3600
diff changeset
81
4
b4df021f796c [project @ 1993-08-08 01:26:08 by jwe]
jwe
parents:
diff changeset
82 retval = sum (sigma > tolerance);
b4df021f796c [project @ 1993-08-08 01:26:08 by jwe]
jwe
parents:
diff changeset
83
b4df021f796c [project @ 1993-08-08 01:26:08 by jwe]
jwe
parents:
diff changeset
84 endfunction
12813
8c4605b4d0c8 codesprint: Wrote 6 tests for rank.m
David Wells <drwells@vt.edu>
parents: 12584
diff changeset
85
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
86
12813
8c4605b4d0c8 codesprint: Wrote 6 tests for rank.m
David Wells <drwells@vt.edu>
parents: 12584
diff changeset
87 %!test
13141
e81ddf9cacd5 maint: untabify and remove trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 12813
diff changeset
88 %! A = [1 2 3 4 5 6 7;
e81ddf9cacd5 maint: untabify and remove trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 12813
diff changeset
89 %! 4 5 6 7 8 9 12;
e81ddf9cacd5 maint: untabify and remove trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 12813
diff changeset
90 %! 1 2 3.1 4 5 6 7;
e81ddf9cacd5 maint: untabify and remove trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 12813
diff changeset
91 %! 2 3 4 5 6 7 8;
e81ddf9cacd5 maint: untabify and remove trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 12813
diff changeset
92 %! 3 4 5 6 7 8 9;
e81ddf9cacd5 maint: untabify and remove trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 12813
diff changeset
93 %! 4 5 6 7 8 9 10;
12813
8c4605b4d0c8 codesprint: Wrote 6 tests for rank.m
David Wells <drwells@vt.edu>
parents: 12584
diff changeset
94 %! 5 6 7 8 9 10 11];
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
95 %! assert (rank (A), 4);
12813
8c4605b4d0c8 codesprint: Wrote 6 tests for rank.m
David Wells <drwells@vt.edu>
parents: 12584
diff changeset
96
8c4605b4d0c8 codesprint: Wrote 6 tests for rank.m
David Wells <drwells@vt.edu>
parents: 12584
diff changeset
97 %!test
13141
e81ddf9cacd5 maint: untabify and remove trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 12813
diff changeset
98 %! A = [1 2 3 4 5 6 7;
e81ddf9cacd5 maint: untabify and remove trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 12813
diff changeset
99 %! 4 5 6 7 8 9 12;
e81ddf9cacd5 maint: untabify and remove trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 12813
diff changeset
100 %! 1 2 3.0000001 4 5 6 7;
e81ddf9cacd5 maint: untabify and remove trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 12813
diff changeset
101 %! 4 5 6 7 8 9 12.00001;
e81ddf9cacd5 maint: untabify and remove trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 12813
diff changeset
102 %! 3 4 5 6 7 8 9;
e81ddf9cacd5 maint: untabify and remove trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 12813
diff changeset
103 %! 4 5 6 7 8 9 10;
12813
8c4605b4d0c8 codesprint: Wrote 6 tests for rank.m
David Wells <drwells@vt.edu>
parents: 12584
diff changeset
104 %! 5 6 7 8 9 10 11];
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
105 %! assert (rank (A), 4);
12813
8c4605b4d0c8 codesprint: Wrote 6 tests for rank.m
David Wells <drwells@vt.edu>
parents: 12584
diff changeset
106
8c4605b4d0c8 codesprint: Wrote 6 tests for rank.m
David Wells <drwells@vt.edu>
parents: 12584
diff changeset
107 %!test
13141
e81ddf9cacd5 maint: untabify and remove trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 12813
diff changeset
108 %! A = [1 2 3 4 5 6 7;
e81ddf9cacd5 maint: untabify and remove trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 12813
diff changeset
109 %! 4 5 6 7 8 9 12;
e81ddf9cacd5 maint: untabify and remove trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 12813
diff changeset
110 %! 1 2 3 4 5 6 7;
e81ddf9cacd5 maint: untabify and remove trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 12813
diff changeset
111 %! 4 5 6 7 8 9 12.00001;
12813
8c4605b4d0c8 codesprint: Wrote 6 tests for rank.m
David Wells <drwells@vt.edu>
parents: 12584
diff changeset
112 %! 3 4 5 6 7 8 9;
13141
e81ddf9cacd5 maint: untabify and remove trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 12813
diff changeset
113 %! 4 5 6 7 8 9 10;
12813
8c4605b4d0c8 codesprint: Wrote 6 tests for rank.m
David Wells <drwells@vt.edu>
parents: 12584
diff changeset
114 %! 5 6 7 8 9 10 11];
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
115 %! assert (rank (A), 3);
12813
8c4605b4d0c8 codesprint: Wrote 6 tests for rank.m
David Wells <drwells@vt.edu>
parents: 12584
diff changeset
116
8c4605b4d0c8 codesprint: Wrote 6 tests for rank.m
David Wells <drwells@vt.edu>
parents: 12584
diff changeset
117 %!test
13141
e81ddf9cacd5 maint: untabify and remove trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 12813
diff changeset
118 %! A = [1 2 3 4 5 6 7;
12813
8c4605b4d0c8 codesprint: Wrote 6 tests for rank.m
David Wells <drwells@vt.edu>
parents: 12584
diff changeset
119 %! 4 5 6 7 8 9 12;
8c4605b4d0c8 codesprint: Wrote 6 tests for rank.m
David Wells <drwells@vt.edu>
parents: 12584
diff changeset
120 %! 1 2 3 4 5 6 7;
13141
e81ddf9cacd5 maint: untabify and remove trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 12813
diff changeset
121 %! 4 5 6 7 8 9 12;
e81ddf9cacd5 maint: untabify and remove trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 12813
diff changeset
122 %! 3 4 5 6 7 8 9;
e81ddf9cacd5 maint: untabify and remove trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 12813
diff changeset
123 %! 4 5 6 7 8 9 10;
12813
8c4605b4d0c8 codesprint: Wrote 6 tests for rank.m
David Wells <drwells@vt.edu>
parents: 12584
diff changeset
124 %! 5 6 7 8 9 10 11];
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
125 %! assert (rank (A), 3);
12813
8c4605b4d0c8 codesprint: Wrote 6 tests for rank.m
David Wells <drwells@vt.edu>
parents: 12584
diff changeset
126
8c4605b4d0c8 codesprint: Wrote 6 tests for rank.m
David Wells <drwells@vt.edu>
parents: 12584
diff changeset
127 %!test
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
128 %! A = eye (100);
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
129 %! assert (rank (A), 100);
12813
8c4605b4d0c8 codesprint: Wrote 6 tests for rank.m
David Wells <drwells@vt.edu>
parents: 12584
diff changeset
130
16952
3c20fb2aa419 doc: Add example to rank docstring.
Rik <rik@octave.org>
parents: 14363
diff changeset
131 %!assert (rank ([]), 0)
3c20fb2aa419 doc: Add example to rank docstring.
Rik <rik@octave.org>
parents: 14363
diff changeset
132 %!assert (rank ([1:9]), 1)
3c20fb2aa419 doc: Add example to rank docstring.
Rik <rik@octave.org>
parents: 14363
diff changeset
133 %!assert (rank ([1:9]'), 1)
3c20fb2aa419 doc: Add example to rank docstring.
Rik <rik@octave.org>
parents: 14363
diff changeset
134
12813
8c4605b4d0c8 codesprint: Wrote 6 tests for rank.m
David Wells <drwells@vt.edu>
parents: 12584
diff changeset
135 %!test
8c4605b4d0c8 codesprint: Wrote 6 tests for rank.m
David Wells <drwells@vt.edu>
parents: 12584
diff changeset
136 %! A = [1, 2, 3; 1, 2.001, 3; 1, 2, 3.0000001];
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
137 %! assert (rank (A), 3);
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
138 %! assert (rank (A,0.0009), 1);
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
139 %! assert (rank (A,0.0006), 2);
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
140 %! assert (rank (A,0.00000002), 3);
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
141