From: <par...@us...> - 2012-09-14 18:54:41
|
Revision: 11020 http://octave.svn.sourceforge.net/octave/?rev=11020&view=rev Author: paramaniac Date: 2012-09-14 18:54:35 +0000 (Fri, 14 Sep 2012) Log Message: ----------- control: finish pzmap Modified Paths: -------------- trunk/octave-forge/main/control/devel/test_pzmap.m trunk/octave-forge/main/control/inst/pzmap.m Removed Paths: ------------- trunk/octave-forge/main/control/devel/pzmap2.m Deleted: trunk/octave-forge/main/control/devel/pzmap2.m =================================================================== --- trunk/octave-forge/main/control/devel/pzmap2.m 2012-09-14 18:38:01 UTC (rev 11019) +++ trunk/octave-forge/main/control/devel/pzmap2.m 2012-09-14 18:54:35 UTC (rev 11020) @@ -1,86 +0,0 @@ -## Copyright (C) 2009, 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 -*- -## @deftypefn {Function File} pzmap (@var{sys}) -## @deftypefnx {Function File} {[@var{p}, @var{z}] =} pzmap (@var{sys}) -## Plot the poles and zeros of an LTI system in the complex plane. -## If no output arguments are given, the result is plotted on the screen. -## Otherwise, the poles and zeros are computed and returned. -## -## @strong{Inputs} -## @table @var -## @item sys -## LTI model. -## @end table -## -## @strong{Outputs} -## @table @var -## @item p -## Poles of @var{sys}. -## @item z -## Transmission zeros of @var{sys}. -## @end table -## @end deftypefn - -## Author: Lukas Reichlin <luk...@gm...> -## Created: November 2009 -## Version: 0.1 - -function [pol_r, zer_r] = pzmap2 (varargin) - - ## TODO: multiplot feature: pzmap (sys1, "b", sys2, "r", ...) - - if (nargin == 0) - print_usage (); - endif - - % if (! isa (sys, "lti")) - % error ("pzmap: argument must be an LTI system"); - % endif - - pol = cellfun ("@lti/pole", varargin, "uniformoutput", false); - zer = cellfun ("@lti/zero", varargin, "uniformoutput", false); - - if (! nargout) - pol_re = cellfun (@real, pol, "uniformoutput", false); - pol_im = cellfun (@imag, pol, "uniformoutput", false); - zer_re = cellfun (@real, zer, "uniformoutput", false); - zer_im = cellfun (@imag, zer, "uniformoutput", false); - - len = numel (pol); - plot_args = {}; - legend_args = cell (len, 1); - colororder = get (gca, "colororder"); - for k = 1 : len - plot_args = cat (2, plot_args, pol_re(k), pol_im(k), {"x", "color", colororder(k,:)}, \ - zer_re(k), zer_im(k), {"o", "color", colororder(k,:)}); - legend_args{k} = inputname(k); - endfor - - h = plot (plot_args{:}); - grid ("on") - title ("Pole-Zero Map") - xlabel ("Real Axis") - ylabel ("Imaginary Axis") - legend (h(1:2:2*len), legend_args) - else - pol_r = pol{1}; - zer_r = zer{1}; - endif - -endfunction Modified: trunk/octave-forge/main/control/devel/test_pzmap.m =================================================================== --- trunk/octave-forge/main/control/devel/test_pzmap.m 2012-09-14 18:38:01 UTC (rev 11019) +++ trunk/octave-forge/main/control/devel/test_pzmap.m 2012-09-14 18:54:35 UTC (rev 11020) @@ -1,4 +1,4 @@ -pzmap2 (WestlandLynx, Boeing707, BMWengine) +pzmap (WestlandLynx, Boeing707, BMWengine) %__next_line_color__ ("reset") Modified: trunk/octave-forge/main/control/inst/pzmap.m =================================================================== --- trunk/octave-forge/main/control/inst/pzmap.m 2012-09-14 18:38:01 UTC (rev 11019) +++ trunk/octave-forge/main/control/inst/pzmap.m 2012-09-14 18:54:35 UTC (rev 11020) @@ -1,4 +1,4 @@ -## Copyright (C) 2009 Lukas F. Reichlin +## Copyright (C) 2009, 2011, 2012 Lukas F. Reichlin ## ## This file is part of LTI Syncope. ## @@ -39,37 +39,66 @@ ## Author: Lukas Reichlin <luk...@gm...> ## Created: November 2009 -## Version: 0.1 +## Version: 0.2 -function [pol_r, zer_r] = pzmap (sys) +function [pol_r, zer_r] = pzmap (varargin) - ## TODO: multiplot feature: pzmap (sys1, "b", sys2, "r", ...) - - if (nargin != 1) + if (nargin == 0) print_usage (); endif - if (! isa (sys, "lti")) - error ("pzmap: argument must be an LTI system"); - endif + sys_idx = cellfun (@isa, varargin, {"lti"}); # look for LTI models - pol = pole (sys); - zer = zero (sys); + pol = cellfun (@pole, varargin(sys_idx), "uniformoutput", false); + zer = cellfun (@zero, varargin(sys_idx), "uniformoutput", false); if (! nargout) - pol_re = real (pol); - pol_im = imag (pol); - zer_re = real (zer); - zer_im = imag (zer); + pol_re = cellfun (@real, pol, "uniformoutput", false); + pol_im = cellfun (@imag, pol, "uniformoutput", false); + zer_re = cellfun (@real, zer, "uniformoutput", false); + zer_im = cellfun (@imag, zer, "uniformoutput", false); + + sys_idx = find (sys_idx); + tmp = cellfun (@ischar, varargin); + style_idx = find (tmp); - plot (pol_re, pol_im, "xb", zer_re, zer_im, "or") + len = numel (pol); + pol_args = {}; + zer_args = {}; + legend_args = cell (len, 1); + colororder = get (gca, "colororder"); + rc = rows (colororder); + + for k = 1 : len + col = colororder(1+rem (k-1, rc), :); + if (k == len) + lim = nargin; + else + lim = sys_idx(k+1); + endif + style = varargin(style_idx(style_idx > sys_idx(k) & style_idx <= lim)); + if (isempty (style)) + pol_args = cat (2, pol_args, pol_re{k}, pol_im{k}, {"x", "color", col}); + zer_args = cat (2, zer_args, zer_re{k}, zer_im{k}, {"o", "color", col}); + else + pol_args = cat (2, pol_args, pol_re{k}, pol_im{k}, style); + zer_args = cat (2, zer_args, zer_re{k}, zer_im{k}, style); + endif + + ## FIXME: try to combine "x", "o" and style for custom colors + + legend_args{k} = inputname(sys_idx(k)); + endfor + + h = plot (pol_args{:}, zer_args{:}); grid ("on") - title (["Pole-Zero Map of ", inputname(1)]) + title ("Pole-Zero Map") xlabel ("Real Axis") ylabel ("Imaginary Axis") + legend (h(1:len), legend_args) else - pol_r = pol; - zer_r = zer; + pol_r = pol{1}; + zer_r = zer{1}; endif endfunction This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |