Mercurial > hg > octave-nkf
diff scripts/control/system/is_observable.m @ 3441:36ae9880c594
[project @ 2000-01-14 22:03:32 by jwe]
author | jwe |
---|---|
date | Fri, 14 Jan 2000 22:05:57 +0000 |
parents | |
children | 7923abdeb4e5 |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/scripts/control/system/is_observable.m @@ -0,0 +1,60 @@ +## Copyright (C) 1993, 1994, 1995 Auburn University. All rights reserved. +## +## This file is part of Octave. +## +## Octave is free software; you can redistribute it and/or modify it +## under the terms of the GNU General Public License as published by the +## Free Software Foundation; either version 2, or (at your option) any +## later version. +## +## Octave is distributed in the hope that it will be useful, but WITHOUT +## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with Octave; see the file COPYING. If not, write to the Free +## Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. + +## -*- texinfo -*- +## @deftypefn {Function File} {[@var{retval},@var{U}] =} is_observable (@var{a}, @var{c}@{,@var{tol}@}) +## @deftypefnx {Function File} {[@var{retval},@var{U}] =} is_observable (@var{sys}@{, @var{tol}@}) +## Logical check for system observability. +## +## Default: tol = 10*norm(a,'fro')*eps +## +## Returns 1 if the system @var{sys} or the pair (@var{a},@var{c}) is +## observable, 0 if not. +## +## @strong{See} @code{is_controllable} for detailed description of arguments +## and default values. +## @end deftypefn +## @seealso{size, rows, columns, length, is_matrix, is_scalar, and is_vector} + +## Author: A. S. Hodel <a.s.hodel@eng.auburn.edu> +## Created: August 1993 +## Updated by John Ingram (ingraje@eng.auburn.edu) July 1996. + +function [retval, U] = is_observable (a, c, tol) + + if( nargin < 1) + usage("[retval,U] = is_observable(a , c {, tol})"); + elseif(is_struct(a)) + ## system form + if(nargin == 2) + tol = c; + elseif(nargin > 2) + usage("[retval,U] = is_observable(sys {, tol})"); + endif + [a,b,c] = sys2ss(a); + elseif(nargin > 3) + usage("[retval,U] = is_observable(a , c {, tol})"); + endif + if(exist("tol")) + [retval,U] = is_controllable (a', c', tol); + else + [retval,U] = is_controllable (a', c'); + endif + +endfunction +