From: <par...@us...> - 2011-11-09 19:44:51
|
Revision: 9039 http://octave.svn.sourceforge.net/octave/?rev=9039&view=rev Author: paramaniac Date: 2011-11-09 19:44:44 +0000 (Wed, 09 Nov 2011) Log Message: ----------- control-devel: work on argument checking of model reduction commands Modified Paths: -------------- trunk/octave-forge/extra/control-devel/inst/__ab09id_modred__.m trunk/octave-forge/extra/control-devel/inst/bstmodred.m trunk/octave-forge/extra/control-devel/inst/hnamodred.m Added Paths: ----------- trunk/octave-forge/extra/control-devel/inst/__check_alpha__.m trunk/octave-forge/extra/control-devel/inst/__check_order__.m trunk/octave-forge/extra/control-devel/inst/__check_weight__.m Modified: trunk/octave-forge/extra/control-devel/inst/__ab09id_modred__.m =================================================================== --- trunk/octave-forge/extra/control-devel/inst/__ab09id_modred__.m 2011-11-09 09:53:57 UTC (rev 9038) +++ trunk/octave-forge/extra/control-devel/inst/__ab09id_modred__.m 2011-11-09 19:44:44 UTC (rev 9039) @@ -77,21 +77,15 @@ 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); + [av, bv, cv, dv] = __check_weight__ (val, dt); jobv = 1; case {"right", "w"} - val = ss (val); - [aw, bw, cw, dw, tsamw] = ssdata (val); + [aw, bw, cw, dw] = __check_weight__ (val, dt); 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}); - endif - nr = val; + nr = __check_order__ (val); ordsel = 0; case "tol1" @@ -107,19 +101,7 @@ tol2 = val; case "alpha" - if (! is_real_scalar (val)) - error ("bstmodred: argument %s must be a real scalar", varargin{k}); - endif - if (dt) # discrete-time - if (val < 0 || val > 1) - error ("bstmodred: argument %s must be 0 <= ALPHA <= 1", varargin{k}); - endif - else # continuous-time - if (val > 0) - error ("bstmodred: argument %s must be ALPHA <= 0", varargin{k}); - endif - endif - alpha = val; + alpha = __check_alpha__ (val, dt); ## TODO: alphac, alphao, jobc, jobo Added: trunk/octave-forge/extra/control-devel/inst/__check_alpha__.m =================================================================== --- trunk/octave-forge/extra/control-devel/inst/__check_alpha__.m (rev 0) +++ trunk/octave-forge/extra/control-devel/inst/__check_alpha__.m 2011-11-09 19:44:44 UTC (rev 9039) @@ -0,0 +1,40 @@ +## Copyright (C) 2011 Lukas F. Reichlin +## +## This file is part of LTI Syncope. +## +## LTI Syncope is free software: you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation, either version 3 of the License, or +## (at your option) any later version. +## +## LTI Syncope is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with LTI Syncope. If not, see <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## check alpha for model reduction commands + +## Author: Lukas Reichlin <luk...@gm...> +## Created: November 2011 +## Version: 0.1 + +function alpha = __check_alpha__ (alpha, dt) + + if (! is_real_scalar (alpha)) + error ("modred: argument alpha must be a real scalar"); + endif + if (dt) # discrete-time + if (alpha < 0 || alpha > 1) + error ("modred: require 0 <= ALPHA <= 1"); + endif + else # continuous-time + if (alpha > 0) + error ("modred: require ALPHA <= 0"); + endif + endif + +endfunction Added: trunk/octave-forge/extra/control-devel/inst/__check_order__.m =================================================================== --- trunk/octave-forge/extra/control-devel/inst/__check_order__.m (rev 0) +++ trunk/octave-forge/extra/control-devel/inst/__check_order__.m 2011-11-09 19:44:44 UTC (rev 9039) @@ -0,0 +1,30 @@ +## Copyright (C) 2011 Lukas F. Reichlin +## +## This file is part of LTI Syncope. +## +## LTI Syncope is free software: you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation, either version 3 of the License, or +## (at your option) any later version. +## +## LTI Syncope is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with LTI Syncope. If not, see <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## check order for model reduction commands + +## Author: Lukas Reichlin <luk...@gm...> +## Created: November 2011 + +function nr = __check_order__ (nr) + + if (! issample (nr, 0) || nr != round (nr)) + error ("modred: order of reduced model must be an integer >= 0"); + endif + +endfunction \ No newline at end of file Added: trunk/octave-forge/extra/control-devel/inst/__check_weight__.m =================================================================== --- trunk/octave-forge/extra/control-devel/inst/__check_weight__.m (rev 0) +++ trunk/octave-forge/extra/control-devel/inst/__check_weight__.m 2011-11-09 19:44:44 UTC (rev 9039) @@ -0,0 +1,35 @@ +## Copyright (C) 2011 Lukas F. Reichlin +## +## This file is part of LTI Syncope. +## +## LTI Syncope is free software: you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation, either version 3 of the License, or +## (at your option) any later version. +## +## LTI Syncope is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with LTI Syncope. If not, see <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## check weightings for model reduction commands + +## Author: Lukas Reichlin <luk...@gm...> +## Created: November 2011 +## Version: 0.1 + +function [a, b, c, d] = __check_weight__ (sys, dt) + + sys = ss (sys); # could be non-lti, therefore ssdata would fail + + if (dt != isdt (sys)) + error ("modred: ct/dt"); # TODO: error message + endif + + [a, b, c, d] = ssdata (sys); + +endfunction Modified: trunk/octave-forge/extra/control-devel/inst/bstmodred.m =================================================================== --- trunk/octave-forge/extra/control-devel/inst/bstmodred.m 2011-11-09 09:53:57 UTC (rev 9038) +++ trunk/octave-forge/extra/control-devel/inst/bstmodred.m 2011-11-09 19:44:44 UTC (rev 9039) @@ -82,10 +82,7 @@ val = varargin{k+1}; switch (prop) case {"order", "n", "nr"} - if (! issample (val, 0) || val != round (val)) - error ("bstmodred: argument %s must be an integer >= 0", varargin{k}); - endif - nr = val; + nr = __check_order__ (val); ordsel = 0; case "tol1" @@ -101,19 +98,7 @@ tol2 = val; case "alpha" - if (! is_real_scalar (val)) - error ("bstmodred: argument %s must be a real scalar", varargin{k}); - endif - if (dt) # discrete-time - if (val < 0 || val > 1) - error ("bstmodred: argument %s must be 0 <= ALPHA <= 1", varargin{k}); - endif - else # continuous-time - if (val > 0) - error ("bstmodred: argument %s must be ALPHA <= 0", varargin{k}); - endif - endif - alpha = val; + alpha = __check_alpha__ (val, dt); case "beta" if (! issample (val, 0)) Modified: trunk/octave-forge/extra/control-devel/inst/hnamodred.m =================================================================== --- trunk/octave-forge/extra/control-devel/inst/hnamodred.m 2011-11-09 09:53:57 UTC (rev 9038) +++ trunk/octave-forge/extra/control-devel/inst/hnamodred.m 2011-11-09 19:44:44 UTC (rev 9039) @@ -84,21 +84,15 @@ 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); + [av, bv, cv, dv] = __check_weight__ (val, dt); jobv = 1; case {"right", "w"} - val = ss (val); - [aw, bw, cw, dw, tsamw] = ssdata (val); + [aw, bw, cw, dw] = __check_weight__ (val, dt); jobw = 1; - ## TODO: check ct/dt case {"order", "n", "nr"} - if (! issample (val, 0) || val != round (val)) - error ("hnamodred: argument %s must be an integer >= 0", varargin{k}); - endif - nr = val; + nr = __check_order__ (val); ordsel = 0; case "tol1" @@ -114,19 +108,7 @@ tol2 = val; case "alpha" - if (! is_real_scalar (val)) - error ("hnamodred: argument %s must be a real scalar", varargin{k}); - endif - if (dt) # discrete-time - if (val < 0 || val > 1) - error ("hnamodred: argument %s must be 0 <= ALPHA <= 1", varargin{k}); - endif - else # continuous-time - if (val > 0) - error ("hnamodred: argument %s must be ALPHA <= 0", varargin{k}); - endif - endif - alpha = val; + alpha = __check_alpha__ (val, dt); otherwise error ("hnamodred: invalid property name"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |