From: <par...@us...> - 2010-10-01 22:27:39
|
Revision: 7791 http://octave.svn.sourceforge.net/octave/?rev=7791&view=rev Author: paramaniac Date: 2010-10-01 22:27:33 +0000 (Fri, 01 Oct 2010) Log Message: ----------- control: add support for descriptor state-space models Modified Paths: -------------- trunk/octave-forge/main/control/inst/dlqr.m trunk/octave-forge/main/control/inst/lqr.m Modified: trunk/octave-forge/main/control/inst/dlqr.m =================================================================== --- trunk/octave-forge/main/control/inst/dlqr.m 2010-10-01 22:16:52 UTC (rev 7790) +++ trunk/octave-forge/main/control/inst/dlqr.m 2010-10-01 22:27:33 UTC (rev 7791) @@ -1,4 +1,4 @@ -## Copyright (C) 2009 Lukas F. Reichlin +## Copyright (C) 2009 - 2010 Lukas F. Reichlin ## ## This file is part of LTI Syncope. ## @@ -20,6 +20,8 @@ ## @deftypefnx {Function File} {[@var{g}, @var{x}, @var{l}] =} dlqr (@var{sys}, @var{q}, @var{r}, @var{s}) ## @deftypefnx {Function File} {[@var{g}, @var{x}, @var{l}] =} dlqr (@var{a}, @var{b}, @var{q}, @var{r}) ## @deftypefnx {Function File} {[@var{g}, @var{x}, @var{l}] =} dlqr (@var{a}, @var{b}, @var{q}, @var{r}, @var{s}) +## @deftypefnx {Function File} {[@var{g}, @var{x}, @var{l}] =} dlqr (@var{a}, @var{b}, @var{q}, @var{r}, @var{[]}, @var{e}) +## @deftypefnx {Function File} {[@var{g}, @var{x}, @var{l}] =} dlqr (@var{a}, @var{b}, @var{q}, @var{r}, @var{s}, @var{e}) ## Linear-quadratic regulator for discrete-time systems. ## ## @strong{Inputs} @@ -36,6 +38,8 @@ ## Input weighting matrix. ## @item s ## Optional cross term matrix. If @var{s} is not specified, a zero matrix is assumed. +## @item e +## Optional descriptor matrix. If @var{e} is not specified, an identity matrix is assumed. ## @end table ## ## @strong{Outputs} @@ -64,11 +68,11 @@ ## Author: Lukas Reichlin <luk...@gm...> ## Created: November 2009 -## Version: 0.1 +## Version: 0.2 -function [g, x, l] = dlqr (a, b, q, r = [], s = []) +function [g, x, l] = dlqr (a, b, q, r = [], s = [], e = []) - if (nargin < 3 || nargin > 5) + if (nargin < 3 || nargin > 6) print_usage (); endif @@ -76,7 +80,7 @@ s = r; r = q; q = b; - [a, b, c, d, tsam] = ssdata (a); + [a, b, c, d, e, tsam] = dssdata (a, []); elseif (nargin < 4) print_usage (); else @@ -84,9 +88,9 @@ endif if (tsam > 0) - [x, l, g] = dare (a, b, q, r, s); + [x, l, g] = dare (a, b, q, r, s, e); else - [x, l, g] = care (a, b, q, r, s); + [x, l, g] = care (a, b, q, r, s, e); endif endfunction \ No newline at end of file Modified: trunk/octave-forge/main/control/inst/lqr.m =================================================================== --- trunk/octave-forge/main/control/inst/lqr.m 2010-10-01 22:16:52 UTC (rev 7790) +++ trunk/octave-forge/main/control/inst/lqr.m 2010-10-01 22:27:33 UTC (rev 7791) @@ -1,4 +1,4 @@ -## Copyright (C) 2009 Lukas F. Reichlin +## Copyright (C) 2009 - 2010 Lukas F. Reichlin ## ## This file is part of LTI Syncope. ## @@ -20,6 +20,8 @@ ## @deftypefnx {Function File} {[@var{g}, @var{x}, @var{l}] =} lqr (@var{sys}, @var{q}, @var{r}, @var{s}) ## @deftypefnx {Function File} {[@var{g}, @var{x}, @var{l}] =} lqr (@var{a}, @var{b}, @var{q}, @var{r}) ## @deftypefnx {Function File} {[@var{g}, @var{x}, @var{l}] =} lqr (@var{a}, @var{b}, @var{q}, @var{r}, @var{s}) +## @deftypefnx {Function File} {[@var{g}, @var{x}, @var{l}] =} lqr (@var{a}, @var{b}, @var{q}, @var{r}, @var{[]}, @var{e}) +## @deftypefnx {Function File} {[@var{g}, @var{x}, @var{l}] =} lqr (@var{a}, @var{b}, @var{q}, @var{r}, @var{s}, @var{e}) ## Linear-quadratic regulator. ## ## @strong{Inputs} @@ -36,6 +38,8 @@ ## Input weighting matrix. ## @item s ## Optional cross term matrix. If @var{s} is not specified, a zero matrix is assumed. +## @item e +## Optional descriptor matrix. If @var{e} is not specified, an identity matrix is assumed. ## @end table ## ## @strong{Outputs} @@ -65,11 +69,11 @@ ## Author: Lukas Reichlin <luk...@gm...> ## Created: November 2009 -## Version: 0.1 +## Version: 0.2 -function [g, x, l] = lqr (a, b, q, r = [], s = []) +function [g, x, l] = lqr (a, b, q, r = [], s = [], e = []) - if (nargin < 3 || nargin > 5) + if (nargin < 3 || nargin > 6) print_usage (); endif @@ -77,7 +81,7 @@ s = r; r = q; q = b; - [a, b, c, d, tsam] = ssdata (a); + [a, b, c, d, e, tsam] = dssdata (a, []); elseif (nargin < 4) print_usage (); else @@ -85,9 +89,9 @@ endif if (tsam > 0) - [x, l, g] = dare (a, b, q, r, s); + [x, l, g] = dare (a, b, q, r, s, e); else - [x, l, g] = care (a, b, q, r, s); + [x, l, g] = care (a, b, q, r, s, e); endif endfunction \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |