changeset 10272:48db51e91ef4 octave-forge

control-devel: get multi-experiment identification working (fingers crossed)
author paramaniac
date Fri, 18 May 2012 18:23:28 +0000
parents 2cdd5eed2769
children 4ca415a8e829
files extra/control-devel/devel/ident.m extra/control-devel/src/slident.cc
diffstat 2 files changed, 11 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/extra/control-devel/devel/ident.m	Fri May 18 16:04:20 2012 +0000
+++ b/extra/control-devel/devel/ident.m	Fri May 18 18:23:28 2012 +0000
@@ -46,7 +46,7 @@
   % nsmp >= 2*(m+l+1)*nobr - 1
   % nobr <= (nsmp+1)/(2*(m+l+1))
 %nobr = 10
-  [a, b, c, d, q, ry, s, k, x0] = slident (dat.y{1}, dat.u{1}, nobr, n, meth, alg, batch, conct, ctrl, rcond, tol);
+  [a, b, c, d, q, ry, s, k, x0] = slident (dat.y, dat.u, nobr, n, meth, alg, batch, conct, ctrl, rcond, tol);
 
   sys = ss (a, b, c, d, dat.tsam{1});
 
--- a/extra/control-devel/src/slident.cc	Fri May 18 16:04:20 2012 +0000
+++ b/extra/control-devel/src/slident.cc	Fri May 18 18:23:28 2012 +0000
@@ -184,10 +184,10 @@
             ctrl = 'N';
 
 
-        int n_exp = y_cell.nelem ();    // number of experiments
-        
-        int m = u_cell.elem(0).columns ();   // m: number of inputs
-        int l = y_cell.elem(0).columns ();   // l: number of outputs
+        int n_exp = y_cell.nelem ();            // number of experiments
+        int m = u_cell.elem(0).columns ();      // m: number of inputs
+        int l = y_cell.elem(0).columns ();      // l: number of outputs
+        int nsmpl = 0;                          // total number of samples
 
         // arguments out
         int n;
@@ -221,6 +221,7 @@
             //int m = u.columns ();   // m: number of inputs
             //int l = y.columns ();   // l: number of outputs
             int nsmp = y.rows ();   // nsmp: number of samples
+            nsmpl += nsmp;
             // y.rows == u.rows  is checked by iddata class
             // TODO: check minimal nsmp size
         
@@ -448,7 +449,7 @@
         char job = 'A';
         char jobck = 'K';
         
-        int nsmpl = nsmp;
+        //int nsmpl = nsmp;
         
         if (nsmpl < 2*(m+l)*nobr)
             error ("slident: nsmpl (%d) < 2*(m+l)*nobr (%d)", nsmpl, nobr);
@@ -623,7 +624,7 @@
 // TODO: use only one iwork and dwork for all three slicot routines
 //       ldwork = max (ldwork_a, ldwork_b, ldwork_c)
 
-
+/*
         // arguments in
         char jobx0 = 'X';
         char comuse = 'U';
@@ -700,7 +701,7 @@
 
         error_msg ("ident: IB01CD", info_c, 2, err_msg_c);
         warning_msg ("ident: IB01CD", iwarn_c, 6, warn_msg_c);
-      
+*/      
         
         // return values
         retval(0) = a;
@@ -713,7 +714,8 @@
         retval(6) = s;
         retval(7) = k;
         
-        retval(8) = x0;
+        // retval(8) = x0;
+        retval(8) = octave_value (0);
     }
     
     return retval;