changeset 9583:e29c0c3766b8 octave-forge

control-devel: fix cat for time series
author paramaniac
date Wed, 07 Mar 2012 17:40:03 +0000
parents 2d0e72ab2200
children f0001b666a66
files extra/control-devel/devel/test_iddata.m extra/control-devel/inst/@iddata/cat.m
diffstat 2 files changed, 19 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/extra/control-devel/devel/test_iddata.m	Wed Mar 07 17:22:56 2012 +0000
+++ b/extra/control-devel/devel/test_iddata.m	Wed Mar 07 17:40:03 2012 +0000
@@ -45,3 +45,6 @@
 un = iddata ({(1:10).', (21:30).'}, {(41:50).', (61:70).'}, [], "expname", strseq ("alpha", 1:2));
 vn = iddata ({(11:20).', (31:40).'}, {(51:60).', (71:80).'}, [], "expname", strseq ("beta", 1:2));
 n = [un; vn]
+cat (1, un)
+
+cat (1, b)
--- a/extra/control-devel/inst/@iddata/cat.m	Wed Mar 07 17:22:56 2012 +0000
+++ b/extra/control-devel/inst/@iddata/cat.m	Wed Mar 07 17:40:03 2012 +0000
@@ -30,22 +30,32 @@
   [n, p, m, e] = cellfun (@size, varargin, "uniformoutput", false);
 
   switch (dim)
-    case 1      # vertcat - catenate samples
+    case 1                                              # vertcat - catenate samples
       check_experiments (tmp, e);
       check_outputs (tmp, p);
       check_inputs (tmp, m);
     
       y = cellfun (@vertcat, tmp.y, "uniformoutput", false);
-      u = cellfun (@vertcat, tmp.u, "uniformoutput", false);
+
+      if (m{1} > 0)                                     # m(2:end) are equal, tested by check_inputs
+        u = cellfun (@vertcat, tmp.u, "uniformoutput", false);
+      else                                              # time series don't have inputs
+        u = [];
+      endif
     
-    case 2      # horzcat - catenate channels;
+    case 2                                              # horzcat - catenate channels
       check_experiments (tmp, e);
       check_samples (n);
 
       y = cellfun (@horzcat, tmp.y, "uniformoutput", false);
-      u = cellfun (@horzcat, tmp.u, "uniformoutput", false);
+      
+      if (m{1} > 0)
+        u = cellfun (@horzcat, tmp.u, "uniformoutput", false);
+      else
+        u = [];
+      endif
     
-    case 3      # merge - catenate experiments
+    case 3                                              # merge - catenate experiments
       check_outputs (tmp, p);
       check_inputs (tmp, m);
 
@@ -63,7 +73,7 @@
 
 function check_experiments (tmp, e)
 
-  if (numel (e) > 1 && ! isequal (e{:}))        # isequal doesn't work with less than 2 arguments
+  if (numel (e) > 1 && ! isequal (e{:}))                # isequal doesn't work with less than 2 arguments
     error ("iddata: cat: number of experiments don't match [%s]", \
            num2str (cell2mat (e), "%d "));
   endif