Mercurial > hg > octave-lyh
comparison scripts/control/is_controllable.m @ 2303:5cffc4b8de57
[project @ 1996-06-24 09:15:24 by jwe]
author | jwe |
---|---|
date | Mon, 24 Jun 1996 09:15:24 +0000 |
parents | 5d29638dd524 |
children | 2b5788792cad |
comparison
equal
deleted
inserted
replaced
2302:470c856bf55a | 2303:5cffc4b8de57 |
---|---|
1 # Copyright (C) 1996 John W. Eaton | 1 ### Copyright (C) 1996 John W. Eaton |
2 # | 2 ### |
3 # This file is part of Octave. | 3 ### This file is part of Octave. |
4 # | 4 ### |
5 # Octave is free software; you can redistribute it and/or modify it | 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 the | 6 ### under the terms of the GNU General Public License as published by |
7 # Free Software Foundation; either version 2, or (at your option) any | 7 ### the Free Software Foundation; either version 2, or (at your option) |
8 # later version. | 8 ### any later version. |
9 # | 9 ### |
10 # Octave is distributed in the hope that it will be useful, but WITHOUT | 10 ### Octave is distributed in the hope that it will be useful, but |
11 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | 11 ### WITHOUT ANY WARRANTY; without even the implied warranty of |
12 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | 12 ### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
13 # for more details. | 13 ### General Public License for more details. |
14 # | 14 ### |
15 # You should have received a copy of the GNU General Public License | 15 ### You should have received a copy of the GNU General Public License |
16 # along with Octave; see the file COPYING. If not, write to the Free | 16 ### along with Octave; see the file COPYING. If not, write to the Free |
17 # Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | 17 ### Software Foundation, 59 Temple Place - Suite 330, Boston, MA |
18 ### 02111-1307, USA. | |
18 | 19 |
19 function retval = is_controllable (a, b, tol) | 20 function retval = is_controllable (a, b, tol) |
20 | 21 |
21 # Usage: is_controllable (a, b {,tol}) | 22 ## Usage: is_controllable (a, b {,tol}) |
22 # | 23 ## |
23 # Returns 1 if the pair (a, b) is controllable, or 0 if not. | 24 ## Returns 1 if the pair (a, b) is controllable, or 0 if not. |
24 # | 25 ## |
25 # See also: size, rows, columns, length, is_matrix, is_scalar, is_vector | 26 ## See also: size, rows, columns, length, is_matrix, is_scalar, is_vector |
26 # | 27 ## |
27 # This should really use the method below, but I'm being lazy for now: | 28 ## This should really use the method below, but I'm being lazy for now: |
28 # | 29 ## |
29 # Controllability is determined by applying Arnoldi iteration with | 30 ## Controllability is determined by applying Arnoldi iteration with |
30 # complete re-orthogonalization to obtain an orthogonal basis of the | 31 ## complete re-orthogonalization to obtain an orthogonal basis of the |
31 # Krylov subspace. | 32 ## Krylov subspace. |
32 # | 33 ## |
33 # (FIX ME... The Krylov subspace approach is not done yet!) | 34 ## (FIX ME... The Krylov subspace approach is not done yet!) |
34 # n-1 | 35 ## n-1 |
35 # span ([b,a*b,...,a^ b]). | 36 ## span ([b,a*b,...,a^ b]). |
36 # | 37 ## |
37 # tol is a roundoff paramter, set to 2*eps if omitted. | 38 ## tol is a roundoff paramter, set to 2*eps if omitted. |
38 | 39 |
39 # Written by A. S. Hodel (scotte@eng.auburn.edu) August, 1993. | 40 ## Written by A. S. Hodel (scotte@eng.auburn.edu) August, 1993. |
40 | 41 |
41 if (nargin == 2 || nargin == 3) | 42 if (nargin == 2 || nargin == 3) |
42 | 43 |
43 n = is_square (a); | 44 n = is_square (a); |
44 [nr, nc] = size (b); | 45 [nr, nc] = size (b); |
52 for ii = 1:(n-1) | 53 for ii = 1:(n-1) |
53 tmp = a * tmp; | 54 tmp = a * tmp; |
54 m = [m, tmp]; | 55 m = [m, tmp]; |
55 endfor | 56 endfor |
56 | 57 |
57 # If n is of any significant size, m will be low rank, so be careful! | 58 ## If n is of any significant size, m will be low rank, so be careful! |
58 | 59 |
59 if (nargin == 3) | 60 if (nargin == 3) |
60 if (is_scalar (tol)) | 61 if (is_scalar (tol)) |
61 retval = (rank (m, tol) == n); | 62 retval = (rank (m, tol) == n); |
62 else | 63 else |