From: <par...@us...> - 2011-11-08 13:48:36
|
Revision: 9029 http://octave.svn.sourceforge.net/octave/?rev=9029&view=rev Author: paramaniac Date: 2011-11-08 13:48:29 +0000 (Tue, 08 Nov 2011) Log Message: ----------- control-devel: update draft code Modified Paths: -------------- trunk/octave-forge/extra/control-devel/inst/__ab09id_modred__.m trunk/octave-forge/extra/control-devel/inst/btamodred.m Modified: trunk/octave-forge/extra/control-devel/inst/__ab09id_modred__.m =================================================================== --- trunk/octave-forge/extra/control-devel/inst/__ab09id_modred__.m 2011-11-08 11:35:49 UTC (rev 9028) +++ trunk/octave-forge/extra/control-devel/inst/__ab09id_modred__.m 2011-11-08 13:48:29 UTC (rev 9029) @@ -50,21 +50,25 @@ dt = isdt (sys); ## default arguments + av = bv = cv = dv = []; + jobv = 0; + aw = bw = cw = dw = []; + jobw = 0; alphac = alphao = 0.0; tol1 = 0.0; tol2 = 0.0; dico = 0; jobc = jobo = 0; - job = 1; + job = 1; # 'F': balancing-free square-root Balance & Truncate method weight = 1; equil = 0; ordsel = 1; nr = 0; - if (dt) # discrete-time - alpha = 1; # ALPHA <= 0 - else # continuous-time - alpha = 0; # 0 <= ALPHA <= 1 + if (dt) # discrete-time + alpha = 1; # ALPHA <= 0 + else # continuous-time + alpha = 0; # 0 <= ALPHA <= 1 endif ## handle properties and values @@ -72,6 +76,17 @@ prop = lower (varargin{k}); val = varargin{k+1}; switch (prop) + case {"left", "v"} + val = ss (val); # val could be non-lti, therefore ssdata would fail + [av, bv, cv, dv, tsamv] = ssdata (val); + jobv = 1; + + case {"right", "w"} + val = ss (val); + [aw, bw, cw, dw, tsamw] = ssdata (val); + jobw = 1; + ## TODO: check ct/dt + case {"order", "n", "nr"} if (! issample (val, 0) || val != round (val)) error ("%smodred: argument %s must be an integer >= 0", method, varargin{k}); @@ -106,16 +121,22 @@ endif alpha = val; - case "beta" - if (! issample (val, 0)) - error ("bstmodred: argument %s must be BETA >= 0", varargin{k}); - endif - beta = val; + ## TODO: alphac, alphao, jobc, jobo otherwise error ("hnamodred: invalid property name"); endswitch endfor + + if (jobv && jobw) + weight = 3; # 'B': both left and right weightings V and W are used + elseif (jobv) + weight = 1; # 'L': only left weighting V is used (W = I) + elseif (jobw) + weight = 2; # 'R': only right weighting W is used (V = I) + else + weight = 0; # 'N': no weightings are used (V = I, W = I) + endif ## TODO: handle job Modified: trunk/octave-forge/extra/control-devel/inst/btamodred.m =================================================================== --- trunk/octave-forge/extra/control-devel/inst/btamodred.m 2011-11-08 11:35:49 UTC (rev 9028) +++ trunk/octave-forge/extra/control-devel/inst/btamodred.m 2011-11-08 13:48:29 UTC (rev 9029) @@ -79,7 +79,7 @@ %! %! sysv = ss (AV, BV, CV, DV); %! -%! sysr = btamodred (sys, "left", sysv, "tol1", 0.1, "tol2", 0.0); +%! sysr = btamodred (sys, "nr", 2, "left", sysv, "tol1", 0.1, "tol2", 0.0); %! [Ao, Bo, Co, Do] = ssdata (sysr); %! %! Ae = [ 9.1900 0.0000 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |