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