changeset 9802:52de84056920 octave-forge

control-devel: first steps towards an interface for ident function
author paramaniac
date Wed, 21 Mar 2012 09:48:12 +0000
parents 047f1fbc2924
children 82d6156962c4
files extra/control-devel/devel/destillation.m extra/control-devel/devel/glass_furnace.m extra/control-devel/devel/ident.m
diffstat 3 files changed, 35 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/extra/control-devel/devel/destillation.m	Wed Mar 21 00:41:25 2012 +0000
+++ b/extra/control-devel/devel/destillation.m	Wed Mar 21 09:48:12 2012 +0000
@@ -65,7 +65,7 @@
 
 dat = iddata (Y_dest, U_dest)
 
-[sys, x0] = ident (dat) %, 5)  % nobr? 5, 90, ?
+[sys, x0] = ident (dat, 5)    % s=5, n=4
 
 
 [y, t] = lsim (sys, U_dest, [], x0);
--- a/extra/control-devel/devel/glass_furnace.m	Wed Mar 21 00:41:25 2012 +0000
+++ b/extra/control-devel/devel/glass_furnace.m	Wed Mar 21 09:48:12 2012 +0000
@@ -47,7 +47,7 @@
 
 dat = iddata (Y, U)
 
-[sys, x0] = ident (dat)
+[sys, x0] = ident (dat, 10)     % s=10, n=5
 
 
 [y, t] = lsim (sys, U, [], x0);
--- a/extra/control-devel/devel/ident.m	Wed Mar 21 00:41:25 2012 +0000
+++ b/extra/control-devel/devel/ident.m	Wed Mar 21 09:48:12 2012 +0000
@@ -1,4 +1,6 @@
-function [sys, x0] = ident (dat, nobr)
+function [sys, x0] = ident (dat, s = [], n = [])
+
+
 
   %nobr = 15;
   meth = 2;
@@ -8,12 +10,38 @@
   conct = 1;
   ctrl = 0; %1;
   rcond = 0.0;
-  tol = -1.0;
+  tol = -1.0; % 0;
+  
+  [ns, l, m, e] = size (dat);
   
-  [n, 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
+    % 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
+    ctrl = 0; % setting of n not yet possible
+  elseif (isempty (n))
+    nobr = s;
+    ctrl = 0;  # confirm system order estimate
+  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;
+    ## TODO: specify n for IB01BD
+  endif
   
-  nsmp = n(1)
-  nobr = fix ((nsmp+1)/(2*(m+l+1)))
+  %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