Mercurial > hg > octave-nkf
annotate scripts/linear-algebra/rank.m @ 20815:a260a6acb70f
fix test failures introduced by a22d8a2eb0e5
* scripts/ode/private/integrate_adaptive.m: fix stepping backwards, fix
invocation of OutputFcn, fix text of some error messages
* scripts/ode/private/integrate_const.m: remove use of option OutputSave
* scripts/ode/private/integrate_n_steps.m: remove use of option OutputSave
author | Carlo de Falco <carlo.defalco@polimi.it> |
---|---|
date | Sun, 11 Oct 2015 23:09:01 +0200 |
parents | 03b9d17a2d95 |
children |
rev | line source |
---|---|
19898
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 | 2 ## |
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. | |
2313 | 9 ## |
10 ## Octave is distributed in the hope that it will be useful, but | |
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
13 ## General Public License for more details. | |
14 ## | |
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/>. | |
245 | 18 |
3372 | 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 | 22 ## Compute the rank of matrix @var{A}, using the singular value decomposition. |
23 ## | |
20370
03b9d17a2d95
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19898
diff
changeset
|
24 ## The rank is taken to be the number of singular values of @var{A} that are |
03b9d17a2d95
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19898
diff
changeset
|
25 ## greater than the specified tolerance @var{tol}. If the second argument is |
03b9d17a2d95
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19898
diff
changeset
|
26 ## omitted, it is taken to be |
3426 | 27 ## |
3372 | 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 | 30 ## @end example |
3426 | 31 ## |
3372 | 32 ## @noindent |
3600 | 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 | 35 ## |
20370
03b9d17a2d95
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19898
diff
changeset
|
36 ## The rank of a matrix is the number of linearly independent rows or columns |
03b9d17a2d95
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19898
diff
changeset
|
37 ## and determines how many particular solutions exist to a system of equations. |
03b9d17a2d95
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19898
diff
changeset
|
38 ## Use @code{null} for finding the remaining homogenous solutions. |
16952 | 39 ## |
40 ## Example: | |
41 ## | |
42 ## @example | |
43 ## @group | |
44 ## x = [1 2 3 | |
45 ## 4 5 6 | |
46 ## 7 8 9]; | |
47 ## rank (x) | |
48 ## @result{} 2 | |
49 ## @end group | |
50 ## @end example | |
51 ## | |
52 ## @noindent | |
20370
03b9d17a2d95
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19898
diff
changeset
|
53 ## The number of linearly independent rows is only 2 because the final row is a |
03b9d17a2d95
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19898
diff
changeset
|
54 ## linear combination of -1*row1 + 2*row2. |
16952 | 55 ## |
56 ## @seealso{null, sprank, svd} | |
3372 | 57 ## @end deftypefn |
4 | 58 |
2314 | 59 ## Author: jwe |
60 | |
2311 | 61 function retval = rank (A, tol) |
4 | 62 |
63 if (nargin == 1) | |
64 sigma = svd (A); | |
4706 | 65 if (isempty (sigma)) |
66 tolerance = 0; | |
67 else | |
7795
df9519e9990c
Handle single precision eps values
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
68 if (isa (A, "single")) |
10549 | 69 tolerance = max (size (A)) * sigma (1) * eps ("single"); |
7795
df9519e9990c
Handle single precision eps values
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
70 else |
10549 | 71 tolerance = max (size (A)) * sigma (1) * eps; |
7795
df9519e9990c
Handle single precision eps values
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
72 endif |
4706 | 73 endif |
4 | 74 elseif (nargin == 2) |
262 | 75 sigma = svd (A); |
4 | 76 tolerance = tol; |
77 else | |
6046 | 78 print_usage (); |
4 | 79 endif |
4706 | 80 |
4 | 81 retval = sum (sigma > tolerance); |
82 | |
83 endfunction | |
12813
8c4605b4d0c8
codesprint: Wrote 6 tests for rank.m
David Wells <drwells@vt.edu>
parents:
12584
diff
changeset
|
84 |
14363
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
85 |
12813
8c4605b4d0c8
codesprint: Wrote 6 tests for rank.m
David Wells <drwells@vt.edu>
parents:
12584
diff
changeset
|
86 %!test |
13141
e81ddf9cacd5
maint: untabify and remove trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
12813
diff
changeset
|
87 %! 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
|
88 %! 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
|
89 %! 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
|
90 %! 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
|
91 %! 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
|
92 %! 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
|
93 %! 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
|
94 %! assert (rank (A), 4); |
12813
8c4605b4d0c8
codesprint: Wrote 6 tests for rank.m
David Wells <drwells@vt.edu>
parents:
12584
diff
changeset
|
95 |
8c4605b4d0c8
codesprint: Wrote 6 tests for rank.m
David Wells <drwells@vt.edu>
parents:
12584
diff
changeset
|
96 %!test |
13141
e81ddf9cacd5
maint: untabify and remove trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
12813
diff
changeset
|
97 %! 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
|
98 %! 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
|
99 %! 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
|
100 %! 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
|
101 %! 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
|
102 %! 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
|
103 %! 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
|
104 %! assert (rank (A), 4); |
12813
8c4605b4d0c8
codesprint: Wrote 6 tests for rank.m
David Wells <drwells@vt.edu>
parents:
12584
diff
changeset
|
105 |
8c4605b4d0c8
codesprint: Wrote 6 tests for rank.m
David Wells <drwells@vt.edu>
parents:
12584
diff
changeset
|
106 %!test |
13141
e81ddf9cacd5
maint: untabify and remove trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
12813
diff
changeset
|
107 %! 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
|
108 %! 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
|
109 %! 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
|
110 %! 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
|
111 %! 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
|
112 %! 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
|
113 %! 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
|
114 %! assert (rank (A), 3); |
12813
8c4605b4d0c8
codesprint: Wrote 6 tests for rank.m
David Wells <drwells@vt.edu>
parents:
12584
diff
changeset
|
115 |
8c4605b4d0c8
codesprint: Wrote 6 tests for rank.m
David Wells <drwells@vt.edu>
parents:
12584
diff
changeset
|
116 %!test |
13141
e81ddf9cacd5
maint: untabify and remove trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
12813
diff
changeset
|
117 %! 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
|
118 %! 4 5 6 7 8 9 12; |
8c4605b4d0c8
codesprint: Wrote 6 tests for rank.m
David Wells <drwells@vt.edu>
parents:
12584
diff
changeset
|
119 %! 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
|
120 %! 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
|
121 %! 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
|
122 %! 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
|
123 %! 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
|
124 %! assert (rank (A), 3); |
12813
8c4605b4d0c8
codesprint: Wrote 6 tests for rank.m
David Wells <drwells@vt.edu>
parents:
12584
diff
changeset
|
125 |
8c4605b4d0c8
codesprint: Wrote 6 tests for rank.m
David Wells <drwells@vt.edu>
parents:
12584
diff
changeset
|
126 %!test |
14363
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
127 %! A = eye (100); |
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
128 %! assert (rank (A), 100); |
12813
8c4605b4d0c8
codesprint: Wrote 6 tests for rank.m
David Wells <drwells@vt.edu>
parents:
12584
diff
changeset
|
129 |
16952 | 130 %!assert (rank ([]), 0) |
131 %!assert (rank ([1:9]), 1) | |
132 %!assert (rank ([1:9]'), 1) | |
133 | |
12813
8c4605b4d0c8
codesprint: Wrote 6 tests for rank.m
David Wells <drwells@vt.edu>
parents:
12584
diff
changeset
|
134 %!test |
8c4605b4d0c8
codesprint: Wrote 6 tests for rank.m
David Wells <drwells@vt.edu>
parents:
12584
diff
changeset
|
135 %! 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
|
136 %! assert (rank (A), 3); |
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
137 %! 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
|
138 %! 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
|
139 %! 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
|
140 |