X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?p=CreaPhase.git;a=blobdiff_plain;f=octave_packages%2Fcontrol-2.3.52%2Fisdetectable.m;fp=octave_packages%2Fcontrol-2.3.52%2Fisdetectable.m;h=727b8ec42c76066ad58987434665c258417233eb;hp=0000000000000000000000000000000000000000;hb=c880e8788dfc484bf23ce13fa2787f2c6bca4863;hpb=1705066eceaaea976f010f669ce8e972f3734b05 diff --git a/octave_packages/control-2.3.52/isdetectable.m b/octave_packages/control-2.3.52/isdetectable.m new file mode 100644 index 0000000..727b8ec --- /dev/null +++ b/octave_packages/control-2.3.52/isdetectable.m @@ -0,0 +1,87 @@ +## Copyright (C) 2009, 2010 Lukas F. Reichlin +## +## This file is part of LTI Syncope. +## +## LTI Syncope 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 3 of the License, or +## (at your option) any later version. +## +## LTI Syncope 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 LTI Syncope. If not, see . + +## -*- texinfo -*- +## @deftypefn {Function File} {@var{bool} =} isdetectable (@var{sys}) +## @deftypefnx {Function File} {@var{bool} =} isdetectable (@var{sys}, @var{tol}) +## @deftypefnx {Function File} {@var{bool} =} isdetectable (@var{a}, @var{c}) +## @deftypefnx {Function File} {@var{bool} =} isdetectable (@var{a}, @var{c}, @var{e}) +## @deftypefnx {Function File} {@var{bool} =} isdetectable (@var{a}, @var{c}, @var{[]}, @var{tol}) +## @deftypefnx {Function File} {@var{bool} =} isdetectable (@var{a}, @var{c}, @var{e}, @var{tol}) +## @deftypefnx {Function File} {@var{bool} =} isdetectable (@var{a}, @var{c}, @var{[]}, @var{[]}, @var{dflg}) +## @deftypefnx {Function File} {@var{bool} =} isdetectable (@var{a}, @var{c}, @var{e}, @var{[]}, @var{dflg}) +## @deftypefnx {Function File} {@var{bool} =} isdetectable (@var{a}, @var{c}, @var{[]}, @var{tol}, @var{dflg}) +## @deftypefnx {Function File} {@var{bool} =} isdetectable (@var{a}, @var{c}, @var{e}, @var{tol}, @var{dflg}) +## Logical test for system detectability. +## All unstable modes must be observable or all unobservable states must be stable. +## +## @strong{Inputs} +## @table @var +## @item sys +## LTI system. +## @item a +## State transition matrix. +## @item c +## Measurement matrix. +## @item e +## Descriptor matrix. +## If @var{e} is empty @code{[]} or not specified, an identity matrix is assumed. +## @item tol +## Optional tolerance for stability. Default value is 0. +## @item dflg = 0 +## Matrices (@var{a}, @var{c}) are part of a continuous-time system. Default Value. +## @item dflg = 1 +## Matrices (@var{a}, @var{c}) are part of a discrete-time system. +## @end table +## +## @strong{Outputs} +## @table @var +## @item bool = 0 +## System is not detectable. +## @item bool = 1 +## System is detectable. +## @end table +## +## +## @strong{Algorithm}@* +## Uses SLICOT AB01OD and TG01HD by courtesy of +## @uref{http://www.slicot.org, NICONET e.V.} +## See @command{isstabilizable} for description of computational method. +## @seealso{isstabilizable, isstable, isctrb, isobsv} +## @end deftypefn + +## Author: Lukas Reichlin +## Created: October 2009 +## Version: 0.3 + +function bool = isdetectable (a, c = [], e = [], tol = [], dflg = 0) + + if (nargin == 0) + print_usage (); + elseif (isa (a, "lti")) # isdetectable (sys), isdetectable (sys, tol) + if (nargin > 2) + print_usage (); + endif + bool = isstabilizable (a.', c); # transpose is overloaded + elseif (nargin < 2 || nargin > 5) + print_usage (); + else # isdetectable (a, c, ...) + bool = isstabilizable (a.', c.', e.', tol, dflg); # arguments checked inside + endif + +endfunction +