diff src/DLD-FUNCTIONS/schur.cc @ 3372:f16c2ce14886

[project @ 1999-11-23 19:07:09 by jwe]
author jwe
date Tue, 23 Nov 1999 19:07:18 +0000
parents 38de16594cb4
children b80bbb43a1a9
line wrap: on
line diff
--- a/src/DLD-FUNCTIONS/schur.cc	Sun Nov 21 17:31:10 1999 +0000
+++ b/src/DLD-FUNCTIONS/schur.cc	Tue Nov 23 19:07:18 1999 +0000
@@ -36,17 +36,212 @@
 #include "utils.h"
 
 DEFUN_DLD (schur, args, nargout,
-  "[U, S] = schur (A) or S = schur (A)\n\
-\n\
-or, for ordered Schur:\n\
+  "-*- texinfo -*-
+@deftypefn {Loadable Function} {@var{s} =} schur (@var{a})\n\
+@deftypefnx {Loadable Function} {[@var{u}, @var{s}] =} schur (@var{a}, @var{opt})\n\
+@cindex Schur decomposition\n\
+The Schur decomposition is used to compute eigenvalues of a\n\
+square matrix, and has applications in the solution of algebraic\n\
+Riccati equations in control (see @code{are} and @code{dare}).\n\
+@code{schur} always returns\n\
+@iftex\n\
+@tex\n\
+$S = U^T A U$\n\
+@end tex\n\
+@end iftex\n\
+@ifinfo\n\
+@code{s = u' * a * u}\n\
+@end ifinfo\n\
+where\n\
+@iftex\n\
+@tex\n\
+$U$\n\
+@end tex\n\
+@end iftex\n\
+@ifinfo\n\
+@code{u}\n\
+@end ifinfo\n\
+ is a unitary matrix\n\
+@iftex\n\
+@tex\n\
+($U^T U$ is identity)\n\
+@end tex\n\
+@end iftex\n\
+@ifinfo\n\
+(@code{u'* u} is identity)\n\
+@end ifinfo\n\
+and\n\
+@iftex\n\
+@tex\n\
+$S$\n\
+@end tex\n\
+@end iftex\n\
+@ifinfo\n\
+@code{s}\n\
+@end ifinfo\n\
+is upper triangular.  The eigenvalues of\n\
+@iftex\n\
+@tex\n\
+$A$ (and $S$)\n\
+@end tex\n\
+@end iftex\n\
+@ifinfo\n\
+@code{a} (and @code{s})\n\
+@end ifinfo\n\
+are the diagonal elements of\n\
+@iftex\n\
+@tex\n\
+$S$\n\
+@end tex\n\
+@end iftex\n\
+@ifinfo\n\
+@code{s}\n\
+@end ifinfo\n\
+If the matrix\n\
+@iftex\n\
+@tex\n\
+$A$\n\
+@end tex\n\
+@end iftex\n\
+@ifinfo\n\
+@code{a}\n\
+@end ifinfo\n\
+is real, then the real Schur decomposition is computed, in which the\n\
+matrix\n\
+@iftex\n\
+@tex\n\
+$U$\n\
+@end tex\n\
+@end iftex\n\
+@ifinfo\n\
+@code{u}\n\
+@end ifinfo\n\
+is orthogonal and\n\
+@iftex\n\
+@tex\n\
+$S$\n\
+@end tex\n\
+@end iftex\n\
+@ifinfo\n\
+@code{s}\n\
+@end ifinfo\n\
+is block upper triangular\n\
+with blocks of size at most\n\
+@iftex\n\
+@tex\n\
+$2\\times 2$\n\
+@end tex\n\
+@end iftex\n\
+@ifinfo\n\
+@code{2 x 2}\n\
+@end ifinfo\n\
+blocks along the diagonal.  The diagonal elements of\n\
+@iftex\n\
+@tex\n\
+$S$\n\
+@end tex\n\
+@end iftex\n\
+@ifinfo\n\
+@code{s}\n\
+@end ifinfo\n\
+(or the eigenvalues of the\n\
+@iftex\n\
+@tex\n\
+$2\\times 2$\n\
+@end tex\n\
+@end iftex\n\
+@ifinfo\n\
+@code{2 x 2}\n\
+@end ifinfo\n\
+blocks, when\n\
+appropriate) are the eigenvalues of\n\
+@iftex\n\
+@tex\n\
+$A$\n\
+@end tex\n\
+@end iftex\n\
+@ifinfo\n\
+@code{a}\n\
+@end ifinfo\n\
+and\n\
+@iftex\n\
+@tex\n\
+$S$.\n\
+@end tex\n\
+@end iftex\n\
+@ifinfo\n\
+@code{s}.\n\
+@end ifinfo\n\
 \n\
-  [U, S] = schur (A, TYPE) or S = schur (A, TYPE)\n\
-where TYPE is a string that begins with one of the following\n\
-characters:\n\
-\n\
-  A = continuous time poles\n\
-  D = discrete time poles\n\
-  U = unordered schur (default)")
+The eigenvalues are optionally ordered along the diagonal according to\n\
+the value of @code{opt}.  @code{opt = \"a\"} indicates that all\n\
+eigenvalues with negative real parts should be moved to the leading\n\
+block of\n\
+@iftex\n\
+@tex\n\
+$S$\n\
+@end tex\n\
+@end iftex\n\
+@ifinfo\n\
+@code{s}\n\
+@end ifinfo\n\
+(used in @code{are}), @code{opt = \"d\"} indicates that all eigenvalues\n\
+with magnitude less than one should be moved to the leading block of\n\
+@iftex\n\
+@tex\n\
+$S$\n\
+@end tex\n\
+@end iftex\n\
+@ifinfo\n\
+@code{s}\n\
+@end ifinfo\n\
+(used in @code{dare}), and @code{opt = \"u\"}, the default, indicates that\n\
+no ordering of eigenvalues should occur.  The leading\n\
+@iftex\n\
+@tex\n\
+$k$\n\
+@end tex\n\
+@end iftex\n\
+@ifinfo\n\
+@code{k}\n\
+@end ifinfo\n\
+columns of\n\
+@iftex\n\
+@tex\n\
+$U$\n\
+@end tex\n\
+@end iftex\n\
+@ifinfo\n\
+@code{u}\n\
+@end ifinfo\n\
+always span the\n\
+@iftex\n\
+@tex\n\
+$A$-invariant\n\
+@end tex\n\
+@end iftex\n\
+@ifinfo\n\
+@code{a}-invariant\n\
+@end ifinfo\n\
+subspace corresponding to the\n\
+@iftex\n\
+@tex\n\
+$k$\n\
+@end tex\n\
+@end iftex\n\
+@ifinfo\n\
+@code{k}\n\
+@end ifinfo\n\
+leading eigenvalues of\n\
+@iftex\n\
+@tex\n\
+$S$.\n\
+@end tex\n\
+@end iftex\n\
+@ifinfo\n\
+@code{s}.\n\
+@end ifinfo\n\
+@end deftypefn")
 {
   octave_value_list retval;