changeset 3421:251c444248bf

[project @ 2000-01-13 06:55:12 by jwe]
author jwe
date Thu, 13 Jan 2000 06:55:14 +0000
parents 39496bf0ffdf
children 9fc59b290856
files scripts/control/obsolete/dlqg.m scripts/control/obsolete/minfo.m scripts/control/obsolete/packsys.m scripts/control/obsolete/qzval.m scripts/control/obsolete/swapcols.m scripts/control/obsolete/swaprows.m scripts/control/obsolete/unpacksys.m
diffstat 7 files changed, 434 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/scripts/control/obsolete/dlqg.m
@@ -0,0 +1,124 @@
+## Copyright (C) 1996 Auburn University.  All rights reserved.
+##
+## This file is part of Octave. 
+##
+## Octave is free software; you can redistribute it and/or modify it 
+## under the terms of the GNU General Public License as published by the 
+## Free Software Foundation; either version 2, or (at your option) any 
+## later version. 
+## 
+## Octave is distributed in the hope that it will be useful, but WITHOUT 
+## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
+## FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License 
+## for more details.
+## 
+## You should have received a copy of the GNU General Public License 
+## along with Octave; see the file COPYING.  If not, write to the Free 
+## Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. 
+
+##  O B S O L E T E * * * D O   N O T   U S E!
+##
+##  Use lqg instead.
+##
+## function [K,Q,P,Ee,Er] = dlqg(A,B,C,G,Sigw,Sigv,Q,R)
+## function [K,Q,P,Ee,Er] = dlqg(Sys,Sigw,Sigv,Q,R)
+## 
+## design a discrete-time linear quadratic gaussian optimal controller
+## for the system
+##
+##  x(k+1) = A x(k) + B u(k) + G w(k)       [w]=N(0,[Sigw 0    ])
+##    y(k) = C x(k) + v(k)                  [v]  (    0   Sigv ])
+##
+## Outputs:
+##    K: system data structure format LQG optimal controller
+##    P: Solution of control (state feedback) algebraic Riccati equation
+##    Q: Solution of estimation algebraic Riccati equation
+##    Ee: estimator poles
+##    Es: controller poles
+## inputs:
+##  A,B,C,G, or Sys: state space representation of system.  
+##  Sigw, Sigv: covariance matrices of independent Gaussian noise processes 
+##      (as above)
+##  Q, R: state, control weighting matrices for dlqr call respectively.  
+##
+## See also: lqg, dlqe, dlqr
+
+## Author: A. S. Hodel <a.s.hodel@eng.auburn.edu>
+## Created: August 1995
+
+function [K, Q, P, Ee, Er] = dlqg (A, B, C, G, Sigw, Sigv, Q, R)
+
+  warning("dlqg: obsolete. use lqg instead (system data structure format)");
+
+  if (nargin == 5)
+    ## system data structure format
+
+    ## check that it really is system data structure
+    if(! is_struct(A) )
+      error("dlqg: 5 arguments, first argument is not a system data structure structure")
+    endif
+
+    sys = sysupdate(sys,"ss");    # make sure in proper form
+    [ncstates,ndstates,nin,nout] = sysdimensions(sys);
+    if(ndstates == -1)
+      error("this message should never appear: bad system dimensions");
+    endif
+
+    if(ncstates)
+      error("dlqg: system has continuous-time states (try lqg?)")
+    elseif(ndstates < 1)
+      error("dlqg: system has no discrete time states")
+    elseif(nin <= columns(Sigw))
+      error(["dlqg: ",num2str(nin)," inputs provided, noise dimension is ", ...
+	  num2str(columns(Sigw))])
+    elseif(nout != columns(Sigv))
+      error(["dlqg: number of outputs (",num2str(nout),") incompatible with ", ...
+	  "dimension of Sigv (",num2str(columns(Sigv)),")"])
+    endif
+
+    ## put parameters into correct variables
+    R = Sigw;
+    Q = G;
+    Sigv = C;
+    Sigw = B;
+    [A,B,C,D] = sys2ss(Sys)
+    [n,m] = size(B)
+    m1 = columns(Sigw);
+    m2 = m1+1;
+    G = B(:,1:m1);
+    B = B(:,m2:m);
+
+  elseif (nargin == 8)
+    ## state-space format
+    m = columns(B);
+    m1 = columns(G);
+    p = rows(C);
+    n = abcddim(A,B,C,zeros(p,m));
+    n1 = abcddim(A,G,C,zeros(p,m1));
+    if( (n == -1) || (n1 == -1))
+      error("dlqg: A,B,C,G incompatibly dimensioned");
+    elseif(p != columns(Sigv))
+      error("dlqg: C, Sigv incompatibly dimensioned");
+    elseif(m1 != columns(Sigw))
+      error("dlqg: G, Sigw incompatibly dimensioned");
+    endif
+  else
+    error("dlqg: illegal number of arguments")
+  endif
+
+  if (! (is_square(Sigw) && is_square(Sigv) ) )
+    error("dlqg: Sigw, Sigv must be square");
+  endif
+
+  ## now we can just do the design; call dlqr and dlqe, since all matrices
+  ## are not given in Cholesky factor form (as in h2syn case)
+  [Ks, P, Er] = dlqr(A,B,Q,R);
+  [Ke, Q, jnk, Ee] = dlqe(A,G,C,Sigw,Sigv);
+  Ac = A - Ke*C - B*Ks;
+  Bc = Ke;
+  Cc = -Ks;
+  Dc = zeros(rows(Cc),columns(Bc));
+  K = ss2sys(Ac,Bc,Cc,Dc,1);
+  disp("HODEL: need to add names to this guy!")
+
+endfunction
new file mode 100644
--- /dev/null
+++ b/scripts/control/obsolete/minfo.m
@@ -0,0 +1,86 @@
+## Copyright (C) 1996 Auburn University.  All rights reserved.
+##
+## This file is part of Octave. 
+##
+## Octave is free software; you can redistribute it and/or modify it 
+## under the terms of the GNU General Public License as published by the 
+## Free Software Foundation; either version 2, or (at your option) any 
+## later version. 
+## 
+## Octave is distributed in the hope that it will be useful, but WITHOUT 
+## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
+## FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License 
+## for more details.
+## 
+## You should have received a copy of the GNU General Public License 
+## along with Octave; see the file COPYING.  If not, write to the Free 
+## Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. 
+
+##  function [systype, nout, nin, ncstates, ndstates] = minfo(inmat)
+##
+## MINFO:  Determines the type of system matrix.  INMAT can be
+##         a varying(*), system, constant, and empty matrix.
+##
+##    Returns:
+##      systype can be one of:
+##            varying, system, constant, and empty
+##      nout is the number of outputs of the system
+##      nin is the number of inputs of the system
+##      ncstates is the number of continuous states of the system
+##	 ndstates is the number of discrete states of the system
+
+## Author: R. Bruce Tenison <btenison@eng.auburn.edu>
+## Created: July 29, 1994
+## Modified by David Clem November 13, 1994
+## Modified by A. S. Hodel July 1995
+
+function [systype, nout, nin, ncstates, ndstates] = minfo (inmat)
+
+  warning("minfo: obsolete.  Use sys2ss, sys2tf, or sys2zp.");
+    
+  if (nargin ~= 1 )
+    disp ("MINFO: Wrong number of arguments")
+    systype = nout = nin = ncstates = ndstates = [];
+  endif
+  
+  [rr,cc] = size(inmat);
+  
+  ## Check for empty matrix first!
+  if (isempty(inmat))
+    systype = "empty";
+    nout = nin = ncstates = ndstates = 0;
+    return
+  
+  ## Check for Constant matrix
+
+  elseif (rr == 1 || cc == 1)
+    systype = "constant";
+    nout = nin = ncstates = ndstates = 1;
+    return
+  
+  ## Check for system type matrix
+  elseif (inmat(rr,cc) == -Inf)
+    systype = "system";
+    ncstates = inmat(1,cc);
+    ndstates = inmat(rr,1);
+    nstates = ncstates + ndstates;
+    nout = rr - nstates - 1;
+    nin = cc - nstates - 1;
+  
+  ## Check for Varying type matrix
+  elseif (inmat(rr,cc) == Inf)
+    systype = "varying";
+    npoints = inmat(rr,cc-1);
+    nin = cc - 1;
+    nout = rr / npoints;
+    nstates = 0;
+
+    ## Must be a standard matrix
+  else
+    systype = "constant";
+    nin = cc;
+    nout = rr;
+    ncstates = 0;
+    ndstates = 0;
+  endif
+endfunction
new file mode 100644
--- /dev/null
+++ b/scripts/control/obsolete/packsys.m
@@ -0,0 +1,71 @@
+## Copyright (C) 1996 Auburn University.  All rights reserved.
+##
+## This file is part of Octave. 
+##
+## Octave is free software; you can redistribute it and/or modify it 
+## under the terms of the GNU General Public License as published by the 
+## Free Software Foundation; either version 2, or (at your option) any 
+## later version. 
+## 
+## Octave is distributed in the hope that it will be useful, but WITHOUT 
+## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
+## FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License 
+## for more details.
+## 
+## You should have received a copy of the GNU General Public License 
+## along with Octave; see the file COPYING.  If not, write to the Free 
+## Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. 
+
+## O B S O L E T E: use ss2sys instead.
+## function Asys = packsys(a,b,c[,d,dflg])
+## 
+##   dflg: 0 for continuous time system, 1 for discrete-time system.
+## 
+## defaults:
+##      D: 0 matrix of appropriate dimension.
+##   dflg: 0 (continuous time)
+## 
+## Note: discrete-state sampling time is not included!
+
+## Author: R. Bruce Tenison <btenison@eng.auburn.edu>
+## Created: July 29, 1994
+## Modified by David Clem November 13, 1994
+## Modified by A. S. Hodel April 1995
+
+function Asys = packsys (a, b, c, d, dflg)
+
+  warning("packsys is obsolete!  Use ss2sys instead.");
+  
+  if (nargin < 3 || nargin > 5)
+    disp("packsys: Invalid number of arguments")
+  endif
+
+  ## check dflg
+  if(nargin == 5)
+    if( !is_scalar(dflg))
+      [m,n] = size(dflg);
+      error(["packsys: dflg (",num2str(m),",",num2str(n), ...
+	") must be a scalar."]);
+    elseif( (dflg != 0) && (dflg != 1))
+      error(["packsys: dflg=",num2str(dflg),"must be 0 or 1"]);
+    endif
+  else
+    ## default condition
+    dflg = 0;
+  endif
+
+  if (nargin == 3)
+    ## No D matrix.  Form a zero one!
+    [brows,bcols] = size(b);
+    [crows,ccols] = size(c);
+    d = zeros(crows,bcols);
+  endif
+
+  [n,m,p] = abcddim(a,b,c,d);
+  if (n == -1 || m == -1 || p == -1)
+    error("packsys: incompatible dimensions")
+  endif
+  
+  Asys = ss2sys(a,b,c,d,dflg);
+
+endfunction
new file mode 100644
--- /dev/null
+++ b/scripts/control/obsolete/qzval.m
@@ -0,0 +1,46 @@
+## Copyright (C) 1998 Auburn University.  All rights reserved.
+##
+## This file is part of Octave. 
+##
+## Octave is free software; you can redistribute it and/or modify it 
+## under the terms of the GNU General Public License as published by the 
+## Free Software Foundation; either version 2, or (at your option) any 
+## later version. 
+## 
+## Octave is distributed in the hope that it will be useful, but WITHOUT 
+## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
+## FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License 
+## for more details.
+## 
+## You should have received a copy of the GNU General Public License 
+## along with Octave; see the file COPYING.  If not, write to the Free 
+## Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. 
+
+## -*- texinfo -*-
+## @deftypefn {Function File } { @var{x} =} qzval (@var{A}, @var{B})
+## Compute generalized eigenvalues of the matrix pencil 
+## @ifinfo
+## @example
+## (A - lambda B).
+## @end example
+## @end ifinfo
+## @iftex
+## @tex
+## $(A - \lambda B)$.
+## @end tex
+## @end iftex
+## 
+## @var{A} and @var{B} must be real matrices.
+##  
+## @strong{Note} @code{qzval} is obsolete; use @code{qz} instead.
+## @end deftypefn
+ 
+## Author: A. S. Hodel <a.s.hodel@eng.auburn.edu>
+## Created: July 1998
+
+function lam = qzval (A, B)
+
+  warning("qzval is obsolete; calling qz instead")
+  lam = qz(A,B);
+
+endfunction
new file mode 100644
--- /dev/null
+++ b/scripts/control/obsolete/swapcols.m
@@ -0,0 +1,38 @@
+## Copyright (C) 1996 Auburn University.  All rights reserved.
+##
+## This file is part of Octave. 
+##
+## Octave is free software; you can redistribute it and/or modify it 
+## under the terms of the GNU General Public License as published by the 
+## Free Software Foundation; either version 2, or (at your option) any 
+## later version. 
+## 
+## Octave is distributed in the hope that it will be useful, but WITHOUT 
+## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
+## FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License 
+## for more details.
+## 
+## You should have received a copy of the GNU General Public License 
+## along with Octave; see the file COPYING.  If not, write to the Free 
+## Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. 
+
+## -*- texinfo -*-
+## @deftypefn {Function File } { outputs =} swapcols ( inputs ) 
+## @format
+##  function B = swapcols(A)
+##  permute columns of A into reverse order
+## @end format
+## @end deftypefn
+
+## Author: A. S. Hodel <a.s.hodel@eng.auburn.edu>
+## Created: July 23, 1992
+## Conversion to Octave R. Bruce Tenison July 4, 1994
+
+function B = swapcols (A)
+  
+  m = length(A(1,:));
+  idx = m:-1:1;
+  B = A(:,idx);
+
+endfunction
+
new file mode 100644
--- /dev/null
+++ b/scripts/control/obsolete/swaprows.m
@@ -0,0 +1,38 @@
+## Copyright (C) 1996 Auburn University.  All rights reserved.
+##
+## This file is part of Octave. 
+##
+## Octave is free software; you can redistribute it and/or modify it 
+## under the terms of the GNU General Public License as published by the 
+## Free Software Foundation; either version 2, or (at your option) any 
+## later version. 
+## 
+## Octave is distributed in the hope that it will be useful, but WITHOUT 
+## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
+## FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License 
+## for more details.
+## 
+## You should have received a copy of the GNU General Public License 
+## along with Octave; see the file COPYING.  If not, write to the Free 
+## Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. 
+
+## -*- texinfo -*-
+## @deftypefn {Function File } { outputs =} swaprows ( inputs ) 
+## @format
+##  function B = swaprows(A)
+##  permute rows of A into reverse order
+## @end format
+## @end deftypefn
+
+## Author: A. S. Hodel <a.s.hodel@eng.auburn.edu>
+## Created: July 23, 1992
+## Conversion to Octave R. Bruce Tenison July 4, 1994
+  
+function B = swaprows (A)
+
+  m = rows(A);
+  idx = m:-1:1;
+  B = A(idx,:);
+
+endfunction
+
new file mode 100644
--- /dev/null
+++ b/scripts/control/obsolete/unpacksys.m
@@ -0,0 +1,31 @@
+## Copyright (C) 1996 Auburn University.  All rights reserved.
+##
+## This file is part of Octave. 
+##
+## Octave is free software; you can redistribute it and/or modify it 
+## under the terms of the GNU General Public License as published by the 
+## Free Software Foundation; either version 2, or (at your option) any 
+## later version. 
+## 
+## Octave is distributed in the hope that it will be useful, but WITHOUT 
+## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
+## FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License 
+## for more details.
+## 
+## You should have received a copy of the GNU General Public License 
+## along with Octave; see the file COPYING.  If not, write to the Free 
+## Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. 
+
+## [a,b,c,d] = unpacksys(sys)
+## Obsolete.  Use sys2ss instead.
+
+## Author: David Clem
+## Created: August 19, 1994
+
+function [a, b, c, d] = unpacksys (syst)
+
+  warning("unpacksys obsolete; calling sys2ss");
+  [a,b,c,d] = sys2ss(syst);
+
+endfunction
+