From: <par...@us...> - 2010-09-25 19:35:03
|
Revision: 7771 http://octave.svn.sourceforge.net/octave/?rev=7771&view=rev Author: paramaniac Date: 2010-09-25 19:34:57 +0000 (Sat, 25 Sep 2010) Log Message: ----------- control: support descriptor models 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 2010-09-25 19:09:09 UTC (rev 7770) +++ trunk/octave-forge/main/control/inst/isctrb.m 2010-09-25 19:34:57 UTC (rev 7771) @@ -16,12 +16,14 @@ ## along with this program. If not, see <http://www.gnu.org/licenses/>. ## -*- texinfo -*- -## @deftypefn {Function File} {[@var{bool}, @var{u}] =} isctrb (@var{sys}) -## @deftypefnx {Function File} {[@var{bool}, @var{u}] =} isctrb (@var{sys}, @var{tol}) -## @deftypefnx {Function File} {[@var{bool}, @var{u}] =} isctrb (@var{a}, @var{b}) -## @deftypefnx {Function File} {[@var{bool}, @var{u}] =} isctrb (@var{a}, @var{b}, @var{tol}) +## @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}) ## Logical check for system controllability. -## Uses SLICOT AB01OD by courtesy of NICONET e.V. +## Uses SLICOT AB01OD and TG01HD by courtesy of NICONET e.V. ## <http://www.slicot.org> ## ## @strong{Inputs} @@ -32,8 +34,10 @@ ## State transition matrix. ## @item b ## Input matrix. +## @item e +## Descriptor matrix. ## @item tol -## Optional roundoff parameter. Default value is zero. +## Optional roundoff parameter. Default value is 0. ## @end table ## ## @strong{Outputs} @@ -42,8 +46,6 @@ ## System is not controllable. ## @item bool = 1 ## System is controllable. -## @item u -## An orthogonal basis of the controllable subspace. ## @end table ## ## @seealso{isobsv} @@ -51,23 +53,26 @@ ## Author: Lukas Reichlin <luk...@gm...> ## Created: October 2009 -## Version: 0.2.1 +## Version: 0.3 -function [bool, u] = isctrb (a, b = [], tol = []) +function bool = isctrb (a, b = [], e = [], tol = []) - if (nargin < 1 || nargin > 3) + if (nargin < 1 || nargin > 4) print_usage (); elseif (isa (a, "lti")) # isctrb (sys), isctrb (sys, tol) if (nargin > 2) print_usage (); endif tol = b; - [a, b] = ssdata (a); + [a, b, c, d, e] = dssdata (a, []); elseif (nargin < 2) # isctrb (a, b), isctrb (a, b, tol) print_usage (); elseif (! is_real_square_matrix (a) || ! is_real_matrix (b) || rows (a) != rows (b)) error ("isctrb: a(%dx%d), b(%dx%d) not conformal", rows (a), columns (a), rows (b), columns (b)); + elseif (! isempty (e) && (! is_real_square_matrix (e) || ! size_equal (e, a))) + error ("isctrb: a(%dx%d), e(%dx%d) not conformal", + rows (a), columns (a), rows (e), columns (e)); endif if (isempty (tol)) @@ -76,10 +81,12 @@ error ("isctrb: tol must be a real scalar"); endif - [ac, bc, u, ncont] = slab01od (a, b, tol); + if (isempty (e)) + [ac, bc, u, ncont] = slab01od (a, b, tol); + else + [ac, ec, bc, cc, q, z, ncont] = sltg01hd (a, e, b, zeros (1, columns (a)), tol); + endif - u = u(:, 1:ncont); - bool = (ncont == rows (a)); endfunction Modified: trunk/octave-forge/main/control/inst/isobsv.m =================================================================== --- trunk/octave-forge/main/control/inst/isobsv.m 2010-09-25 19:09:09 UTC (rev 7770) +++ trunk/octave-forge/main/control/inst/isobsv.m 2010-09-25 19:34:57 UTC (rev 7771) @@ -16,12 +16,14 @@ ## along with this program. If not, see <http://www.gnu.org/licenses/>. ## -*- texinfo -*- -## @deftypefn {Function File} {[@var{bool}, @var{u}] =} isobsv (@var{sys}) -## @deftypefnx {Function File} {[@var{bool}, @var{u}] =} isobsv (@var{sys}, @var{tol}) -## @deftypefnx {Function File} {[@var{bool}, @var{u}] =} isobsv (@var{a}, @var{c}) -## @deftypefnx {Function File} {[@var{bool}, @var{u}] =} isobsv (@var{a}, @var{c}, @var{tol}) +## @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}) ## Logical check for system observability. -## Uses SLICOT AB01OD by courtesy of NICONET e.V. +## Uses SLICOT AB01OD and TG01HD by courtesy of NICONET e.V. ## <http://www.slicot.org> ## ## @strong{Inputs} @@ -32,8 +34,10 @@ ## State transition matrix. ## @item c ## Measurement matrix. +## @item e +## Descriptor matrix. ## @item tol -## Optional roundoff parameter. Default value is zero. +## Optional roundoff parameter. Default value is 0. ## @end table ## ## @strong{Outputs} @@ -42,8 +46,6 @@ ## System is not observable. ## @item bool = 1 ## System is observable. -## @item u -## An orthogonal basis of the observable subspace. ## @end table ## ## @seealso{isctrb} @@ -53,19 +55,19 @@ ## Created: October 2009 ## Version: 0.3 -function [bool, u] = isobsv (a, c = [], tol = []) +function bool = 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, u] = isctrb (a.', c); # transpose is overloaded - elseif (nargin < 2 || nargin > 3) + bool = isctrb (a.', c); # transpose is overloaded + elseif (nargin < 2 || nargin > 4) print_usage (); - else # isobsv (a, c), isobsv (a, c, tol) - [bool, u] = isctrb (a.', c.', tol); + else # isobsv (a, c), isobsv (a, c, e), ... + bool = 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. |