changeset 40:adade67872a7

[project @ 1993-08-10 22:15:36 by jwe] Initial revision
author jwe
date Tue, 10 Aug 1993 22:15:36 +0000
parents 82c3febbaf04
children 115ffc431ca5
files scripts/control/lyap.m
diffstat 1 files changed, 78 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/control/lyap.m	Tue Aug 10 22:15:36 1993 +0000
@@ -0,0 +1,78 @@
+function x = lyap(a,b,c)
+
+% usage: x = lyap(a,b{,c})
+%
+% If (a,b,c) are specified, then lyap returns the solution of the Sylvester 
+%   equation
+%	a x + x b + c = 0
+%
+% If only (a,b) are specified, then lyap returns the solution of the 
+%   Lyapunov equation
+% 	a' x + x a + b = 0
+%   If b is not square, then lyap returns the solution of either
+%	a' x + x a + b' b = 0 	
+%   or
+%    	a x + x a' + b b' = 0
+%   whichever is appropriate.
+
+if((nargin ~= 3) && (nargin ~= 2))
+  error("lyap: illegal number of arguments")
+  return
+endif
+
+if( (n = is_square(a)) == 0 )
+  error("lyap: a is not square");
+  return
+endif
+
+if(nargin == 2)
+disp('LYAP')
+a=a
+b=b
+  % transform Lyapunov equation to Sylvester equation form
+  if ( (m=is_square(b)) == 0)
+    if( (m=rows(b)) == n)
+disp('TYPE CONTROL')
+      % solve a x + x a' + b b' = 0
+      b = b*b';
+      a = a';
+    else 
+disp('TYPE OBSERVE')
+      % (try to ) solve a'x + x a + b' b = 0
+      m = columns(b);
+      b = b'*b;
+    endif
+    if(m ~= n)
+      error("lyap: a, b not conformably dimensioned");
+      return;
+    endif
+  endif
+
+  % set up sylvester equation
+  c = b;
+  b = a;
+  a = b'
+else 
+  % check dimensions
+  if( (m = is_square(b)) == 0)
+    error("lyap: b must be square in a sylvester equation");
+    return
+  endif
+  [n1,m1] = size(c);
+  if((n ~= n1) || (m ~= m1))
+    error("lyap: a,b,c not conformably dimensioned");
+  endif
+endif
+a
+b
+c
+
+% call octave built-in function
+x = syl(a,b,c);
+
+disp('LYAP ERR')
+a*x + x*b + c
+a=a
+b=b
+c=c
+endfunction