changeset 9911:92e41d7346ca octave-forge

control-devel: update debugging stuff for ib01ad
author paramaniac
date Thu, 29 Mar 2012 15:33:41 +0000
parents 26c9dfb4a501
children 6d530850180c
files extra/control-devel/devel/identtest.m extra/control-devel/src/slident.cc extra/control-devel/src/slitest.cc
diffstat 3 files changed, 20 insertions(+), 177 deletions(-) [+]
line wrap: on
line diff
--- a/extra/control-devel/devel/identtest.m	Thu Mar 29 15:21:47 2012 +0000
+++ b/extra/control-devel/devel/identtest.m	Thu Mar 29 15:33:41 2012 +0000
@@ -1,52 +1,5 @@
 function [r, sv, n] = identtest (dat, s = [], n = [], ldwork)
 
-
-
-  %nobr = 15;
-  meth = 2;
-  alg = 0;
-  jobd = 1;
-  batch = 3;
-  conct = 1;
-  ctrl = 0; %1;
-  rcond = 0.0;
-  tol = -1.0; % 0;
-  
-  [ns, l, m, e] = size (dat);
-  
-  if (isempty (s) && isempty (n))
-    nsmp = ns(1);
-    nobr = fix ((nsmp+1)/(2*(m+l+1)));
-    ctrl = 0;  # confirm system order estimate
-    n = 0;
-    % nsmp >= 2*(m+l+1)*nobr - 1
-    % nobr <= (nsmp+1)/(2*(m+l+1))
-  elseif (isempty (s))
-    s = min (2*n, n+10);
-    nsmp = ns(1);
-    nobr = fix ((nsmp+1)/(2*(m+l+1)));
-    nobr = min (nobr, s);
-    ctrl = 1;  # no confirmation
-  elseif (isempty (n))
-    nobr = s;
-    ctrl = 0;  # confirm system order estimate
-    n = 0;
-  else         # s & n non-empty
-    nsmp = ns(1);
-    nobr = fix ((nsmp+1)/(2*(m+l+1)));
-    if (s > nobr)
-      error ("ident: s > nobr");
-    endif
-    nobr = s;
-    ctrl = 1;
-    ## TODO: specify n for IB01BD
-  endif
-  
-  %nsmp = ns(1)
-  %nobr = fix ((nsmp+1)/(2*(m+l+1)))
-  % nsmp >= 2*(m+l+1)*nobr - 1
-  % nobr <= (nsmp+1)/(2*(m+l+1))
-%nobr = 10
-  [r, sv, n] = slitest (dat.y{1}, dat.u{1}, nobr, n, meth, alg, jobd, batch, conct, ctrl, rcond, tol, ldwork);
+  [r, sv, n] = slitest (dat.y{1}, dat.u{1}, s, ldwork);
 
 endfunction
--- a/extra/control-devel/src/slident.cc	Thu Mar 29 15:21:47 2012 +0000
+++ b/extra/control-devel/src/slident.cc	Thu Mar 29 15:33:41 2012 +0000
@@ -113,7 +113,7 @@
         char conct;
         char ctrl;
         char metha;
-        char jobda;
+        char jobda; // ??? unused
         
         Matrix y = args(0).matrix_value ();
         Matrix u = args(1).matrix_value ();
--- a/extra/control-devel/src/slitest.cc	Thu Mar 29 15:21:47 2012 +0000
+++ b/extra/control-devel/src/slitest.cc	Thu Mar 29 15:33:41 2012 +0000
@@ -95,7 +95,7 @@
     int nargin = args.length ();
     octave_value_list retval;
     
-    if (nargin != 13)
+    if (nargin != 4)
     {
         print_usage ();
     }
@@ -106,101 +106,27 @@
 ////////////////////////////////////////////////////////////////////////////////////
 
         // arguments in
-        char meth;
-        char alg;
-        char jobd;
-        char batch;
-        char conct;
-        char ctrl;
-        char metha;
-        char jobda;
+        char meth = 'N';  // <--- not used, use metha
+        char alg = 'C';
+        char jobd = 'N';
+        char batch = 'O';
+        
+        char conct = 'N';
+        char ctrl = 'N';
+        
+        char metha = 'N';
+        
+         // ??? char jobda ;
         
         Matrix y = args(0).matrix_value ();
         Matrix u = args(1).matrix_value ();
         int nobr = args(2).int_value ();
-        int nuser = args(3).int_value ();
-        
-        const int imeth = args(4).int_value ();
-        const int ialg = args(5).int_value ();
-        const int ijobd = args(6).int_value ();
-        const int ibatch = args(7).int_value ();
-        const int iconct = args(8).int_value ();
-        const int ictrl = args(9).int_value ();
-        
-        double rcond = args(10).double_value ();
-        double tol = args(11).double_value ();
-        double tolb = args(10).double_value ();      // tolb = rcond
         
-        int ldwork = args(12).int_value ();
-
-            
-        switch (imeth)
-        {
-            case 0:
-                meth = 'M';
-                metha = 'M';
-                break;
-            case 1:
-                meth = 'N';
-                metha = 'N';
-                break;
-            case 2:
-                meth = 'C';
-                metha = 'N';    // no typo here
-                break;
-            default:
-                error ("slib01ad: argument 'meth' invalid");
-        }
+        double rcond = 0.0;
+        double tol = -1.0;
+        
+        int ldwork = args(3).int_value ();
 
-        switch (ialg)
-        {
-            case 0:
-                alg = 'C';
-                break;
-            case 1:
-                alg = 'F';
-                break;
-            case 2:
-                alg = 'Q';
-                break;
-            default:
-                error ("slib01ad: argument 'alg' invalid");
-        }
-        
-        if (meth == 'C')
-            jobd = 'N';
-        else if (ijobd == 0)
-            jobd = 'M';
-        else
-            jobd = 'N';
-        
-        switch (ibatch)
-        {
-            case 0:
-                batch = 'F';
-                break;
-            case 1:
-                batch = 'I';
-                break;
-            case 2:
-                batch = 'L';
-                break;
-            case 3:
-                batch = 'O';
-                break;
-            default:
-                error ("slib01ad: argument 'batch' invalid");
-        }
-
-        if (iconct == 0)
-            conct = 'C';
-        else
-            conct = 'N';
-
-        if (ictrl == 0)
-            ctrl = 'C';
-        else
-            ctrl = 'N';
 
 
         int m = u.columns ();   // m: number of inputs
@@ -208,25 +134,8 @@
         int nsmp = y.rows ();   // nsmp: number of samples
         // y.rows == u.rows  is checked by iddata class
         // TODO: check minimal nsmp size
-        
-        if (batch == 'O')
-        {
-            if (nsmp < 2*(m+l+1)*nobr - 1)
-                error ("slident: require NSMP >= 2*(M+L+1)*NOBR - 1");
-        }
-        else
-        {
-            if (nsmp < 2*nobr)
-                error ("slident: require NSMP >= 2*NOBR");
-        }
-        
-        int ldu;
-        
-        if (m == 0)
-            ldu = 1;
-        else                    // m > 0
-            ldu = nsmp;
-
+                
+        int ldu = nsmp;
         int ldy = nsmp;
 
         // arguments out
@@ -322,18 +231,6 @@
 
 */
 
-/*
-IB01AD.f Lines 291-195:
-c             the workspace used for alg = 'q' is
-c                       ldrwrk*2*(m+l)*nobr + 4*(m+l)*nobr,
-c             where ldrwrk = ldwork/(2*(m+l)*nobr) - 2; recommended
-c             value ldrwrk = ns, assuming a large enough cache size.
-c             for good performance,  ldwork  should be larger.
-
-somehow ldrwrk and ldwork must have been mixed up here
-
-*/
-
 
         OCTAVE_LOCAL_BUFFER (int, iwork, liwork);
         OCTAVE_LOCAL_BUFFER (double, dwork, ldwork);
@@ -401,13 +298,6 @@
         int rs = 2*(m+l)*nobr;
         r.resize (rs, rs);
         
-        if (nuser > 0)
-        {
-            if (nuser < nobr)
-                n = nuser;
-            else
-                error ("ident: 'nuser' invalid");
-        }
         
         retval(0) = r;
         retval(1) = sv;