changeset 53:4565ad8b4697

[project @ 1993-08-11 21:21:34 by jwe]
author jwe
date Wed, 11 Aug 1993 21:21:34 +0000
parents 9eda1009cf95
children 98eb51c870b2
files scripts/control/lyap.m
diffstat 1 files changed, 74 insertions(+), 66 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/control/lyap.m	Wed Aug 11 21:05:59 1993 +0000
+++ b/scripts/control/lyap.m	Wed Aug 11 21:21:34 1993 +0000
@@ -1,78 +1,86 @@
-function x = lyap(a,b,c)
+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.
+# 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 (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)
 
-if( (n = is_square(a)) == 0 )
-  error("lyap: a is not square");
-  return
-endif
+# Transform Lyapunov equation to Sylvester equation form.
+
+    if ((m = is_square (b)) == 0)
+      if ((m = rows (b)) == n)
+
+# solve a x + x a' + b b' = 0
+
+	b = b * b';
+	a = a';
+      else 
+
+# Try to solve a'x + x a + b' b = 0.
+
+	m = columns (b);
+	b = b' * b;
+      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;
+      if (m != n)
+	error ("lyap: a, b not conformably dimensioned");
+	return;
+      endif
     endif
-    if(m ~= n)
-      error("lyap: a, b not conformably dimensioned");
+
+# 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
 
-  % 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.
 
-% call octave built-in function
-x = syl(a,b,c);
+  x = syl(a,b,c);
 
-disp('LYAP ERR')
-a*x + x*b + c
-a=a
-b=b
-c=c
 endfunction