diff scripts/control/system/sysprune.m @ 7135:8aa770b6c5bf

[project @ 2007-11-08 18:54:10 by jwe]
author jwe
date Thu, 08 Nov 2007 18:54:10 +0000
parents a1dbe9d80eee
children 38fe664f0ef1
line wrap: on
line diff
--- a/scripts/control/system/sysprune.m	Thu Nov 08 16:36:06 2007 +0000
+++ b/scripts/control/system/sysprune.m	Thu Nov 08 18:54:10 2007 +0000
@@ -60,103 +60,112 @@
 
 function sys = sysprune (sys, output_idx, input_idx, state_idx)
 
-  if( nargin < 3 | nargin > 4  )
+  if (nargin < 3 || nargin > 4)
     print_usage ();
-  elseif(nargin < 4)
+  elseif (nargin < 4)
     state_idx = [];
   endif
 
   ## default: no action
-  [nn,nz,mm,pp] = sysdimensions(sys);
-  if(isempty(output_idx)) output_idx = 1:pp; endif
-  if(isempty(input_idx)) input_idx = 1:mm; endif
-  if(isempty(state_idx)) state_idx = 1:(nn+nz); endif
+  [nn, nz, mm, pp] = sysdimensions (sys);
+  if (isempty (output_idx))
+    output_idx = 1:pp;
+  endif
+  if (isempty (input_idx))
+    input_idx = 1:mm;
+  endif
+  if (isempty (state_idx))
+    state_idx = 1:(nn+nz);
+  endif
 
   ## check for signal names
-  if(is_signal_list(output_idx) | ischar(output_idx))
-    output_idx = sysidx(sys,"out",output_idx);
+  if (is_signal_list (output_idx) || ischar (output_idx))
+    output_idx = sysidx (sys, "out", output_idx);
   endif
-  if(is_signal_list(input_idx) | ischar(input_idx))
-    input_idx = sysidx(sys,"in",input_idx);
+  if (is_signal_list (input_idx) || ischar (input_idx))
+    input_idx = sysidx (sys, "in", input_idx);
   endif
 
   ## check dimensions
-  if( !(isvector(output_idx) | isempty(output_idx) )  )
-    if(!ismatrix(output_idx))
-      error("sysprune: bad argument passed for output_idx");
+  if (! (isvector (output_idx) || isempty (output_idx)))
+    if (! ismatrix (output_idx))
+      error ("sysprune: bad argument passed for output_idx");
     else
-      error("sysprune: output_idx (%d x %d) must be a vector or empty", ...
-        rows(output_idx),columns(output_idx));
+      error ("sysprune: output_idx (%d x %d) must be a vector or empty",
+             rows (output_idx), columns (output_idx));
     endif
-  elseif(is_duplicate_entry(output_idx))
-     error("sysprune: duplicate entries found in output_idx");
+  elseif (is_duplicate_entry (output_idx))
+     error ("sysprune: duplicate entries found in output_idx");
   endif
 
-  if( !(isvector(input_idx) | isempty(input_idx) )  )
-    if(!ismatrix(input_idx))
-      error("sysprune: bad argument passed for input_idx");
+  if (! (isvector (input_idx) || isempty (input_idx)))
+    if (! ismatrix (input_idx))
+      error ("sysprune: bad argument passed for input_idx");
     else
-      error("sysprune: input_idx (%d x %d) must be a vector or empty", ...
-        rows(input_idx),columns(input_idx));
+      error ("sysprune: input_idx (%d x %d) must be a vector or empty",
+             rows (input_idx), columns(input_idx));
     endif
-  elseif(is_duplicate_entry(input_idx))
-     error("sysprune: duplicate entries found in input_idx");
+  elseif (is_duplicate_entry (input_idx))
+     error ("sysprune: duplicate entries found in input_idx");
   endif
 
-  if( !(isvector(state_idx) | isempty(state_idx) )  )
-    if(!ismatrix(state_idx))
-      error("sysprune: bad argument passed for state_idx");
+  if (! (isvector (state_idx) || isempty (state_idx)))
+    if (! ismatrix (state_idx))
+      error ("sysprune: bad argument passed for state_idx");
     else
-      error("sysprune: state_idx (%d x %d) must be a vector or empty", ...
-        rows(state_idx),columns(state_idx));
+      error ("sysprune: state_idx (%d x %d) must be a vector or empty",
+             rows (state_idx), columns (state_idx));
     endif
-  elseif(nn+nz > 0)
-    if(is_duplicate_entry(state_idx))
-      error("sysprune: duplicate entries found in state_idx");
+  elseif (nn+nz > 0)
+    if (is_duplicate_entry (state_idx))
+      error ("sysprune: duplicate entries found in state_idx");
     endif
   endif
 
-  lo = length(output_idx);
-  li = length(input_idx);
-  lst = length(state_idx);
+  lo = length (output_idx);
+  li = length (input_idx);
+  lst = length (state_idx);
 
-  if( !isstruct(sys))
-    error("Asys must be a system data structure (see ss, tf, or zp)")
-  elseif(pp < lo)
-    error([num2str(lo)," output_idx entries, system has only ", ...
-        num2str(pp)," outputs"]);
-  elseif(mm < li)
-    error([num2str(li)," input_idx entries, system has only ", ...
-        num2str(mm)," inputs"]);
-  elseif(nn+nz < lst)
-    error([num2str(lst)," state_idx entries, system has only ", ...
-        num2str(nn+nz)," states"]);
+  if (! isstruct (sys))
+    error ("Asys must be a system data structure (see ss, tf, or zp)");
+  elseif (pp < lo)
+    error("%d output_idx entries, system has only %d outputs", lo, pp]);
+  elseif (mm < li)
+    error("%d input_idx entries, system has only %d inputs", li, mm);
+  elseif (nn+nz < lst)
+    error("%d state_idx entries, system has only %d states", lst, nn+nz);
   endif
 
-  [aa,bb,cc,dd,tsam,nn,nz,stnam,innam,outnam,yd] = sys2ss(sys);
+  [aa, bb, cc, dd, tsam, nn, nz, stnam, innam, outnam, yd] = sys2ss (sys);
 
   ## check for valid state permutation
-  if(nn & nz)
-    c_idx = find(state_idx <= nn);
-    if(!isempty(c_idx)) max_c = max(c_idx);
-    else                max_c = 0;            endif
-    d_idx = find(state_idx > nn);
-    if(!isempty(d_idx)) min_d = min(d_idx);
-    else                min_d = nn+nz;            endif
-    if(max_c > min_d)
-      warning("sysprune: state_idx(%d)=%d (discrete) preceeds", ...
-        min_d,state_idx(min_d));
-      warning("          state_idx(%d)=%d (continuous)",...
-        max_c,state_idx(max_c));
-      warning("sysprune: sys has %d continuous states, %d discrete states", ...
-        nn,nz);
-      error("continuous/discrete state partition not preserved ; see ss");
+  if (nn & nz)
+    c_idx = find (state_idx <= nn);
+    if (! isempty (c_idx))
+      max_c = max (c_idx);
+    else
+      max_c = 0;
+    endif
+    d_idx = find (state_idx > nn);
+    if (! isempty (d_idx))
+      min_d = min (d_idx);
+    else
+      min_d = nn+nz;
+    endif
+    if (max_c > min_d)
+      warning ("sysprune: state_idx(%d)=%d (discrete) preceeds",
+               min_d, state_idx(min_d));
+      warning("          state_idx(%d)=%d (continuous)",
+              max_c, state_idx(max_c));
+      warning ("sysprune: sys has %d continuous states, %d discrete states",
+               nn, nz);
+      error("continuous/discrete state partition not preserved; see ss");
     endif
   endif
 
   idx = input_idx;
   odx = output_idx;
-  if(isempty(state_idx))
+  if (isempty (state_idx))
     idx = [];
     odx = [];
   endif
@@ -169,7 +178,9 @@
   innam  = innam(input_idx);
   outnam = outnam(output_idx);
   stnam = stnam(state_idx);
-  nn1 = length(find(state_idx <= nn));
-  nz1 = length(find(state_idx > nn));
-  sys = ss(aa,bb,cc,dd,tsam,nn1,nz1,stnam,innam,outnam,find(yd));
+  nn1 = length (find (state_idx <= nn));
+  nz1 = length (find (state_idx > nn));
+
+  sys = ss (aa, bb, cc, dd, tsam, nn1, nz1, stnam, innam, outnam, find (yd));
+
 endfunction