Mercurial > forge
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