From: <par...@us...> - 2012-09-13 16:47:35
|
Revision: 11003 http://octave.svn.sourceforge.net/octave/?rev=11003&view=rev Author: paramaniac Date: 2012-09-13 16:47:24 +0000 (Thu, 13 Sep 2012) Log Message: ----------- control: support plot styles (very basic) Modified Paths: -------------- trunk/octave-forge/main/control/devel/__frequency_response_2__.m trunk/octave-forge/main/control/devel/bode2.m trunk/octave-forge/main/control/devel/multiplot.m Modified: trunk/octave-forge/main/control/devel/__frequency_response_2__.m =================================================================== --- trunk/octave-forge/main/control/devel/__frequency_response_2__.m 2012-09-13 14:34:26 UTC (rev 11002) +++ trunk/octave-forge/main/control/devel/__frequency_response_2__.m 2012-09-13 16:47:24 UTC (rev 11003) @@ -21,11 +21,14 @@ ## Author: Lukas Reichlin <luk...@gm...> ## Created: November 2009 -## Version: 0.4 +## Version: 0.5 -% function [H, w] = __frequency_response__ (sys, w = [], mimoflag = 0, resptype = 0, wbounds = "std", cellflag = false) function [H, w] = __frequency_response_2__ (args, mimoflag = 0, resptype = 0, wbounds = "std", cellflag = false) + %if (! iscell (args)) + % args = {args}; + %endif + sys_idx = cellfun (@isa, args, {"lti"}); # look for LTI models w_idx = cellfun (@is_real_vector, args); # look for frequency vectors r_idx = cellfun (@iscell, args); # look for frequency ranges {wmin, wmax} @@ -33,6 +36,12 @@ sys_cell = args(sys_idx); # extract LTI models frd_idx = cellfun (@isa, sys_cell, {"frd"}); # look for FRD models + ## check arguments + if (! mimoflag && ! all (cellfun (@issiso, sys_cell))) + error ("frequency_response: require SISO systems"); + endif + + ## determine frequencies if (any (r_idx)) # if there are frequency ranges r = args(r_idx){end}; # take the last one if (numel (r) == 2 && issample (r{1}) && issample (r{2})) @@ -55,11 +64,7 @@ ## save frequency vectors of FRD models in w w_frd = cellfun (@get, sys_cell(frd_idx), {"w"}, "uniformoutput", false); w(frd_idx) = w_frd; -%w -%w = get (sys, "w"); -%args{sys_idx} - %{ ## check arguments if(! isa (sys, "lti")) Modified: trunk/octave-forge/main/control/devel/bode2.m =================================================================== --- trunk/octave-forge/main/control/devel/bode2.m 2012-09-13 14:34:26 UTC (rev 11002) +++ trunk/octave-forge/main/control/devel/bode2.m 2012-09-13 16:47:24 UTC (rev 11003) @@ -48,12 +48,10 @@ ## Author: Lukas Reichlin <luk...@gm...> ## Created: November 2009 -## Version: 0.4 +## Version: 0.5 function [mag_r, pha_r, w_r] = bode2 (varargin) - ## TODO: multiplot feature: bode (sys1, "b", sys2, "r", ...) - if (nargin == 0) print_usage (); endif @@ -67,23 +65,23 @@ if (! nargout) mag_db = cellfun (@(mag) 20 * log10 (mag), mag, "uniformoutput", false); - %w_cell = repmat ({w}, 1, numel (H)); + style = repmat ({""}, 1, numel (H)); - mag_args = vertcat (w, mag_db)(:); - pha_args = vertcat (w, pha)(:); - - %if (isct (sys)) - xl_str = "Frequency [rad/s]"; - %else - % xl_str = sprintf ("Frequency [rad/s] w_N = %g", pi / get (sys, "tsam")); - %endif + tmp = cellfun (@ischar, varargin); + char_idx = find (tmp); + char_idx = char_idx(1:min (numel (H), end)); + style(1:length (char_idx)) = varargin(char_idx); + + mag_args = vertcat (w, mag_db, style)(:); + pha_args = vertcat (w, pha, style)(:); + subplot (2, 1, 1) semilogx (mag_args{:}) axis ("tight") ylim (__axis_margin__ (ylim)) grid ("on") - title (["Bode Diagram of ", inputname(1)]) + title ("Bode Diagram") ylabel ("Magnitude [dB]") subplot (2, 1, 2) @@ -91,7 +89,7 @@ axis ("tight") ylim (__axis_margin__ (ylim)) grid ("on") - xlabel (xl_str) + xlabel ("Frequency [rad/s]") ylabel ("Phase [deg]") else mag_r = mag{1}; Modified: trunk/octave-forge/main/control/devel/multiplot.m =================================================================== --- trunk/octave-forge/main/control/devel/multiplot.m 2012-09-13 14:34:26 UTC (rev 11002) +++ trunk/octave-forge/main/control/devel/multiplot.m 2012-09-13 16:47:24 UTC (rev 11003) @@ -6,4 +6,7 @@ figure (2) bode2 (5*C_AH, frd (C_AH), frd (C_opt)) -% bode2 (5*C_AH, frd (C_AH, 1:10), frd (C_opt, 11:20)) \ No newline at end of file +% bode2 (5*C_AH, frd (C_AH, 1:10), frd (C_opt, 11:20)) + +figure (3) +bode2 (5*C_AH, '*r', C_AH, ':b', C_opt, '-.k') \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |