From: <par...@us...> - 2011-10-17 12:07:35
|
Revision: 8760 http://octave.svn.sourceforge.net/octave/?rev=8760&view=rev Author: paramaniac Date: 2011-10-17 12:07:25 +0000 (Mon, 17 Oct 2011) Log Message: ----------- control: return number of controllable/observable states, improve doc Modified Paths: -------------- trunk/octave-forge/main/control/inst/isctrb.m trunk/octave-forge/main/control/inst/isobsv.m Modified: trunk/octave-forge/main/control/inst/isctrb.m =================================================================== --- trunk/octave-forge/main/control/inst/isctrb.m 2011-10-17 04:18:56 UTC (rev 8759) +++ trunk/octave-forge/main/control/inst/isctrb.m 2011-10-17 12:07:25 UTC (rev 8760) @@ -16,20 +16,20 @@ ## along with LTI Syncope. If not, see <http://www.gnu.org/licenses/>. ## -*- texinfo -*- -## @deftypefn {Function File} {@var{bool} =} isctrb (@var{sys}) -## @deftypefnx {Function File} {@var{bool} =} isctrb (@var{sys}, @var{tol}) -## @deftypefnx {Function File} {@var{bool} =} isctrb (@var{a}, @var{b}) -## @deftypefnx {Function File} {@var{bool} =} isctrb (@var{a}, @var{b}, @var{e}) -## @deftypefnx {Function File} {@var{bool} =} isctrb (@var{a}, @var{b}, @var{[]}, @var{tol}) -## @deftypefnx {Function File} {@var{bool} =} isctrb (@var{a}, @var{b}, @var{e}, @var{tol}) +## @deftypefn {Function File} {[@var{bool}, @var{ncon}] =} isctrb (@var{sys}) +## @deftypefnx {Function File} {[@var{bool}, @var{ncon}] =} isctrb (@var{sys}, @var{tol}) +## @deftypefnx {Function File} {[@var{bool}, @var{ncon}] =} isctrb (@var{a}, @var{b}) +## @deftypefnx {Function File} {[@var{bool}, @var{ncon}] =} isctrb (@var{a}, @var{b}, @var{e}) +## @deftypefnx {Function File} {[@var{bool}, @var{ncon}] =} isctrb (@var{a}, @var{b}, @var{[]}, @var{tol}) +## @deftypefnx {Function File} {[@var{bool}, @var{ncon}] =} isctrb (@var{a}, @var{b}, @var{e}, @var{tol}) ## Logical check for system controllability. -## Uses SLICOT AB01OD and TG01HD by courtesy of -## @uref{http://www.slicot.org, NICONET e.V.} +## For numerical reasons, @code{isctrb (sys)} +## should be used instead of @code{rank (ctrb (sys))}. ## ## @strong{Inputs} ## @table @var ## @item sys -## LTI model. +## LTI model. Descriptor state-space models are possible. ## @item a ## State transition matrix. ## @item b @@ -46,16 +46,22 @@ ## System is not controllable. ## @item bool = 1 ## System is controllable. +## @item ncon +## Number of controllable states. ## @end table ## +## @strong{Algorithm}@* +## Uses SLICOT AB01OD and TG01HD by courtesy of +## @uref{http://www.slicot.org, NICONET e.V.} +## ## @seealso{isobsv} ## @end deftypefn ## Author: Lukas Reichlin <luk...@gm...> ## Created: October 2009 -## Version: 0.3 +## Version: 0.4 -function bool = isctrb (a, b = [], e = [], tol = []) +function [bool, ncont] = isctrb (a, b = [], e = [], tol = []) if (nargin < 1 || nargin > 4) print_usage (); Modified: trunk/octave-forge/main/control/inst/isobsv.m =================================================================== --- trunk/octave-forge/main/control/inst/isobsv.m 2011-10-17 04:18:56 UTC (rev 8759) +++ trunk/octave-forge/main/control/inst/isobsv.m 2011-10-17 12:07:25 UTC (rev 8760) @@ -16,20 +16,20 @@ ## along with LTI Syncope. If not, see <http://www.gnu.org/licenses/>. ## -*- texinfo -*- -## @deftypefn {Function File} {@var{bool} =} isobsv (@var{sys}) -## @deftypefnx {Function File} {@var{bool} =} isobsv (@var{sys}, @var{tol}) -## @deftypefnx {Function File} {@var{bool} =} isobsv (@var{a}, @var{c}) -## @deftypefnx {Function File} {@var{bool} =} isobsv (@var{a}, @var{c}, @var{e}) -## @deftypefnx {Function File} {@var{bool} =} isobsv (@var{a}, @var{c}, @var{[]}, @var{tol}) -## @deftypefnx {Function File} {@var{bool} =} isobsv (@var{a}, @var{c}, @var{e}, @var{tol}) +## @deftypefn {Function File} {[@var{bool}, @var{nobs}] =} isobsv (@var{sys}) +## @deftypefnx {Function File} {[@var{bool}, @var{nobs}] =} isobsv (@var{sys}, @var{tol}) +## @deftypefnx {Function File} {[@var{bool}, @var{nobs}] =} isobsv (@var{a}, @var{c}) +## @deftypefnx {Function File} {[@var{bool}, @var{nobs}] =} isobsv (@var{a}, @var{c}, @var{e}) +## @deftypefnx {Function File} {[@var{bool}, @var{nobs}] =} isobsv (@var{a}, @var{c}, @var{[]}, @var{tol}) +## @deftypefnx {Function File} {[@var{bool}, @var{nobs}] =} isobsv (@var{a}, @var{c}, @var{e}, @var{tol}) ## Logical check for system observability. -## Uses SLICOT AB01OD and TG01HD by courtesy of -## @uref{http://www.slicot.org, NICONET e.V.} +## For numerical reasons, @code{isobsv (sys)} +## should be used instead of @code{rank (obsv (sys))}. ## ## @strong{Inputs} ## @table @var ## @item sys -## LTI model. +## LTI model. Descriptor state-space models are possible. ## @item a ## State transition matrix. ## @item c @@ -46,28 +46,34 @@ ## System is not observable. ## @item bool = 1 ## System is observable. +## @item nobs +## Number of observable states. ## @end table ## +## @strong{Algorithm}@* +## Uses SLICOT AB01OD and TG01HD by courtesy of +## @uref{http://www.slicot.org, NICONET e.V.} +## ## @seealso{isctrb} ## @end deftypefn ## Author: Lukas Reichlin <luk...@gm...> ## Created: October 2009 -## Version: 0.3 +## Version: 0.4 -function bool = isobsv (a, c = [], e = [], tol = []) +function [bool, nobs] = isobsv (a, c = [], e = [], tol = []) if (nargin == 0) print_usage (); - elseif (isa (a, "lti")) # isobsv (sys), isobsv (sys, tol) + elseif (isa (a, "lti")) # isobsv (sys), isobsv (sys, tol) if (nargin > 2) print_usage (); endif - bool = isctrb (a.', c); # transpose is overloaded + [bool, nobs] = isctrb (a.', c); # transpose is overloaded elseif (nargin < 2 || nargin > 4) print_usage (); - else # isobsv (a, c), isobsv (a, c, e), ... - bool = isctrb (a.', c.', e.', tol); + else # isobsv (a, c), isobsv (a, c, e), ... + [bool, nobs] = isctrb (a.', c.', e.', tol); endif endfunction This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |