changeset 10883:2735eae9f9a2 octave-forge

control: support custom plot styles
author paramaniac
date Sat, 22 Sep 2012 08:15:06 +0000
parents 2ed94e5cc9bd
children 51436083c2be
files main/control/devel/__time_response_2__.m main/control/devel/multiplot3.m
diffstat 2 files changed, 18 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/main/control/devel/__time_response_2__.m	Fri Sep 21 18:32:16 2012 +0000
+++ b/main/control/devel/__time_response_2__.m	Sat Sep 22 08:15:06 2012 +0000
@@ -25,17 +25,16 @@
 % function [y, t, x_arr] = __time_response_2__ (sys, resptype, plotflag, tfinal, dt, x0, sysname)
 function [y, t, x] = __time_response_2__ (resptype, args, sysname, plotflag)
 
-  sys_idx = cellfun (@isa, args, {"lti"});                          # look for LTI models
+  sys_idx = find (cellfun (@isa, args, {"lti"}));                   # look for LTI models, 'find' needed for plot styles
   sys_cell = cellfun (@ss, args(sys_idx), "uniformoutput", false);  # convert to state-space
 
   if (! size_equal (sys_cell{:}))
     error ("%s: models must have equal sizes", resptype);
   endif
 
-  tmp = cellfun (@is_real_matrix, args);
-  vec_idx = find (tmp);
-  n_vec = length (vec_idx);
-  n_sys = length (sys_cell);
+  vec_idx = find (cellfun (@is_real_matrix, args));     # indices of vector arguments
+  n_vec = length (vec_idx);                             # number of vector arguments
+  n_sys = length (sys_cell);                            # number of LTI systems
   
   %if (n_vec >= 1)
   %  arg = args{vec_idx(1)};
@@ -140,6 +139,7 @@
         error ("time_response: invalid response type");
     endswitch
     
+    style_idx = find (cellfun (@ischar, args));
     outname = get (sys_cell{end}, "outname");
     outname = __labels__ (outname, "y");
     colororder = get (gca, "colororder");
@@ -147,7 +147,16 @@
   
     for k = 1 : n_sys                                   # for every system
       color = colororder(1+rem (k-1, rc), :);
-      style = {"-", "color", color};
+      if (k == n_sys)
+        lim = numel (args);
+      else
+        lim = sys_idx(k+1);
+      endif
+      style = args(style_idx(style_idx > sys_idx(k) & style_idx <= lim));
+      if (isempty (style))
+        style = {"-", "color", color};   
+      endif
+      style
       discrete = ! ct_idx(k);
       if (discrete)                                     # discrete-time system
         for i = 1 : p                                   # for every output
--- a/main/control/devel/multiplot3.m	Fri Sep 21 18:32:16 2012 +0000
+++ b/main/control/devel/multiplot3.m	Sat Sep 22 08:15:06 2012 +0000
@@ -3,6 +3,8 @@
 figure (1)
 step2 (T_AH, T_opt)
 
+figure (2)
+step2 (T_AH, '-.r', T_opt, '-b')
 
-figure (2)
+figure (3)
 step2 (T_AH, c2d (T_opt, 1))