1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
|
schur(G) Scilab Function schur(G)
NAME
schur - [ordered] Schur decomposition
CALLING SEQUENCE
[U,T] = schur(A)
[U,dim]=schur(A,flag)
[U,dim]=schur(A,myfunction)
PARAMETERS
A : real or complex matrix. For ordered forms A is assumed real.
flag : character string ('c' or 'd')
myfunction
: an ``external'' function (this parameter can also be a list or
character string)
U : orthogonal or unitary square matrix
T : matrix
dim : integer
DESCRIPTION
Schur forms, ordered Schur forms
Usual schur form
[U,T] = schur(A) produces a Schur matrix T and a unitary matrix U so that A
= U*T*U' and U'*U = eye(U). By itself, schur(A) returns T. If A is com-
plex, the Complex Schur Form is returned in matrix T. The Complex Schur
Form is upper triangular with the eigenvalues of A on the diagonal. If A
is real, the Real Schur Form is returned. The Real Schur Form has the real
eigenvalues on the diagonal and the complex eigenvalues in 2-by-2 blocks on
the diagonal.
Ordered stable form
[T,dim]=schur(A,'c') returns an unitary matrix T which transforms A into
schur form. In addition, the dim first columns of T make a basis of the
eigenspace of A associated with eigenvalues with negative real parts
(stable "continuous time" eigenspace).
[T,dim]=schur(A,'d') returns an unitary matrix T which transforms A into
schur form. In addition, the dim first columns of T span a basis of the
eigenspace of A associated with eigenvalues with magnitude lower than 1
(stable "discrete time" eigenspace).
General eigenspace
[T,dim]=schur(A,a_function) returns an unitary matrix T which transforms A
into schur form. In addition, the dim first columns of T span a basis of
the eigenspace of A associated with the eigenvalues which are selected by
the function a_function.
This function must be of the following type (here a_function is "rule"):
function [flag]=rule(x)
flag=...
x is a vector with three components which characterizes either a real
eigenvalue or a pair of complex conjugate eigenvalues.
If x(1)=1, a real eigenvalue is considered and this eigenvalue is
x(2)/x(3).
If x(1)=2, a pair of complex conjugate eigenvalues is considered. The sum
of these two eigenvalues (twice the real part) is x(2) and the product
(squared magnitude) is x(3).
On return, flag should be 1 if the real eigenvalue is selected or the pair
of eigenvalues is selected and 0 otherwise.
Example of function
function [flag]=disc(x)
ls =x(1);flag=0;
select ls
case 1 then if abs(x(2)) < ro*abs(x(3)) then flag=1;end
case 2 then if x(3) < ro*ro then flag=1;end
end
The function disc selects the eigenvalues with magnitude lower than a given
scalar ro. And for ro=1 the calling sequence [T,dim]=schur(A,'d') and
[T,dim]=schur(A,disc) are equivalent.
Another useful example is %choose (see function code in
SCIDIR/macros/percent)
EXAMPLE
A=diag([-0.9,-2,2,0.9]);X=rand(A);A=inv(X)*A*X;
[U,d]=schur(A,'c');
A1=U'*A*U;
spec(A1(1:d,1:d)) //stable cont. eigenvalues
[U,d]=schur(A,'c');
A1=U'*A*U;
spec(A1(1:d,1:d)) //stable disc. eigenvalues
SEE ALSO
gschur, ricc, pbig, psmall
|