From: <par...@us...> - 2011-12-05 14:10:11
|
Revision: 9273 http://octave.svn.sourceforge.net/octave/?rev=9273&view=rev Author: paramaniac Date: 2011-12-05 14:10:00 +0000 (Mon, 05 Dec 2011) Log Message: ----------- control-devel: get btaconred & spaconred working, touch up code Modified Paths: -------------- trunk/octave-forge/extra/control-devel/inst/__conred_sb16ad__.m trunk/octave-forge/extra/control-devel/inst/__modred_ab09id__.m trunk/octave-forge/extra/control-devel/inst/bstmodred.m trunk/octave-forge/extra/control-devel/inst/btaconred.m trunk/octave-forge/extra/control-devel/inst/hnamodred.m trunk/octave-forge/extra/control-devel/inst/test_devel.m Modified: trunk/octave-forge/extra/control-devel/inst/__conred_sb16ad__.m =================================================================== --- trunk/octave-forge/extra/control-devel/inst/__conred_sb16ad__.m 2011-12-05 04:42:34 UTC (rev 9272) +++ trunk/octave-forge/extra/control-devel/inst/__conred_sb16ad__.m 2011-12-05 14:10:00 UTC (rev 9273) @@ -59,10 +59,10 @@ ## nr > key/value > opt) endif - npv = numel (varargin); # number of properties and values + nkv = numel (varargin); # number of keys and values - if (rem (npv, 2)) - error ("%sconred: properties and values must come in pairs", method); + if (rem (nkv, 2)) + error ("%sconred: keys and values must come in pairs", method); endif [a, b, c, d, tsam, scaled] = ssdata (G); @@ -79,35 +79,38 @@ ## default arguments alpha = __modred_default_alpha__ (dt); - av = bv = cv = dv = []; - jobv = 0; - aw = bw = cw = dw = []; - jobw = 0; - alphac = alphao = 0.0; tol1 = 0.0; tol2 = 0.0; - dico = 0; + dico = 0; %%%%%%%%%% jobc = jobo = 0; bf = true; # balancing-free - weight = 1; + weight = 0; equil = 0; ordsel = 1; - nr = 0; + ncr = 0; - ## handle properties and values - for k = 1 : 2 : npv - prop = lower (varargin{k}); + ## handle keys and values + for k = 1 : 2 : nkv + key = lower (varargin{k}); val = varargin{k+1}; - switch (prop) - case {"left", "v"} - [av, bv, cv, dv, jobv] = __modred_check_weight__ (val, dt, p, []); + switch (key) + case "weight" + switch (lower (val(1))) + case "n" # none + weight = 0; + case {"l", "o"} # left, output + weight = 1; + case {"r", "i"} # right, input + weight = 2; + case {"b", "p"} # both, performance + weight = 3; + otherwise + error ("%sconred: ""%s"" is an invalid value for key weight", method, val); + endswitch - case {"right", "w"} - [aw, bw, cw, dw, jobw] = __modred_check_weight__ (val, dt, [], m); + case {"order", "ncr", "nr"} + [ncr, ordsel] = __modred_check_order__ (val); - case {"order", "n", "nr"} - [nr, ordsel] = __modred_check_order__ (val); - case "tol1" tol1 = __modred_check_tol__ (val, "tol1"); @@ -127,35 +130,25 @@ error ("modred: ""%s"" is an invalid approach", val); endswitch - ## TODO: alphac, alphao, jobc, jobo + ## TODO: jobc, jobo otherwise warning ("modred: invalid property name ""%s"" ignored", prop); endswitch endfor - ## handle type of frequency weighting - 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 ## handle model reduction approach if (method == "bta" && ! bf) # 'B': use the square-root Balance & Truncate method - job = 0; + jobmr = 0; elseif (method == "bta" && bf) # 'F': use the balancing-free square-root Balance & Truncate method - job = 1; + jobmr = 1; elseif (method == "spa" && ! bf) # 'S': use the square-root Singular Perturbation Approximation method - job = 2; + jobmr = 2; elseif (method == "spa" && bf) # 'P': use the balancing-free square-root Singular Perturbation Approximation method - job = 3; + jobmr = 3; else - error ("modred: invalid job option"); # this should never happen + error ("modred: invalid jobmr option"); # this should never happen endif Modified: trunk/octave-forge/extra/control-devel/inst/__modred_ab09id__.m =================================================================== --- trunk/octave-forge/extra/control-devel/inst/__modred_ab09id__.m 2011-12-05 04:42:34 UTC (rev 9272) +++ trunk/octave-forge/extra/control-devel/inst/__modred_ab09id__.m 2011-12-05 14:10:00 UTC (rev 9273) @@ -54,10 +54,10 @@ ## nr > key/value > opt) endif - npv = numel (varargin); # number of properties and values + nkv = numel (varargin); # number of keys and values - if (rem (npv, 2)) - error ("%smodred: properties and values must come in pairs", method); + if (rem (nkv, 2)) + error ("%smodred: keys and values must come in pairs", method); endif [a, b, c, d, tsam, scaled] = ssdata (sys); @@ -73,7 +73,6 @@ alphac = alphao = 0.0; tol1 = 0.0; tol2 = 0.0; - dico = 0; jobc = jobo = 0; bf = true; # balancing-free weight = 1; @@ -81,11 +80,11 @@ ordsel = 1; nr = 0; - ## handle properties and values - for k = 1 : 2 : npv - prop = lower (varargin{k}); + ## handle keys and values + for k = 1 : 2 : nkv + key = lower (varargin{k}); val = varargin{k+1}; - switch (prop) + switch (key) case {"left", "v"} [av, bv, cv, dv, jobv] = __modred_check_weight__ (val, dt, p, []); @@ -147,7 +146,7 @@ ## perform model order reduction - [ar, br, cr, dr, nr, hsv, ns] = slab09id (a, b, c, d, dico, equil, nr, ordsel, alpha, job, \ + [ar, br, cr, dr, nr, hsv, ns] = slab09id (a, b, c, d, dt, equil, nr, ordsel, alpha, job, \ av, bv, cv, dv, \ aw, bw, cw, dw, \ weight, jobc, jobo, alphac, alphao, \ Modified: trunk/octave-forge/extra/control-devel/inst/bstmodred.m =================================================================== --- trunk/octave-forge/extra/control-devel/inst/bstmodred.m 2011-12-05 04:42:34 UTC (rev 9272) +++ trunk/octave-forge/extra/control-devel/inst/bstmodred.m 2011-12-05 14:10:00 UTC (rev 9273) @@ -243,9 +243,9 @@ ## nr > key/value > opt) endif - npv = numel (varargin); # number of properties and values + nkv = numel (varargin); # number of keys and values - if (rem (npv, 2)) + if (rem (nkv, 2)) error ("bstmodred: keys and values must come in pairs"); endif @@ -261,11 +261,11 @@ nr = 0; job = 1; - ## handle properties and values - for k = 1 : 2 : npv - prop = lower (varargin{k}); + ## handle keys and values + for k = 1 : 2 : nkv + key = lower (varargin{k}); val = varargin{k+1}; - switch (prop) + switch (key) case {"order", "nr"} [nr, ordsel] = __modred_check_order__ (val); Modified: trunk/octave-forge/extra/control-devel/inst/btaconred.m =================================================================== --- trunk/octave-forge/extra/control-devel/inst/btaconred.m 2011-12-05 04:42:34 UTC (rev 9272) +++ trunk/octave-forge/extra/control-devel/inst/btaconred.m 2011-12-05 14:10:00 UTC (rev 9273) @@ -85,7 +85,7 @@ %! %! K = ss (AC, BC, CC, DC, "scaled", true); %! -%! Kr = btaconred (G, K, 2, "weight", "ERROR", "tol1", 0.1, "tol2", 0.0); +%! Kr = btaconred (G, K, 2, "weight", "input", "tol1", 0.1, "tol2", 0.0); %! [Ao, Bo, Co, Do] = ssdata (Kr); %! %! Ae = [ 9.1900 0.0000 Modified: trunk/octave-forge/extra/control-devel/inst/hnamodred.m =================================================================== --- trunk/octave-forge/extra/control-devel/inst/hnamodred.m 2011-12-05 04:42:34 UTC (rev 9272) +++ trunk/octave-forge/extra/control-devel/inst/hnamodred.m 2011-12-05 14:10:00 UTC (rev 9273) @@ -72,10 +72,10 @@ ## nr > key/value > opt) endif - npv = numel (varargin); # number of properties and values + nkv = numel (varargin); # number of keys and values - if (rem (npv, 2)) - error ("hnamodred: properties and values must come in pairs"); + if (rem (nkv, 2)) + error ("hnamodred: keys and values must come in pairs"); endif [a, b, c, d, tsam, scaled] = ssdata (sys); @@ -94,11 +94,11 @@ ordsel = 1; nr = 0; - ## handle properties and values - for k = 1 : 2 : npv - prop = lower (varargin{k}); + ## handle keys and values + for k = 1 : 2 : nkv + key = lower (varargin{k}); val = varargin{k+1}; - switch (prop) + switch (key) case {"left", "v"} [av, bv, cv, dv, jobv] = __modred_check_weight__ (val, dt, p, p); ## TODO: correct error messages for non-square weights Modified: trunk/octave-forge/extra/control-devel/inst/test_devel.m =================================================================== --- trunk/octave-forge/extra/control-devel/inst/test_devel.m 2011-12-05 04:42:34 UTC (rev 9272) +++ trunk/octave-forge/extra/control-devel/inst/test_devel.m 2011-12-05 14:10:00 UTC (rev 9273) @@ -1,7 +1,10 @@ -# identification +## identification test fitfrd -# model order reduction +## model order reduction test bstmodred test btamodred test hnamodred + +## controller order reduction +test btaconred This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |