decomposição (ordenada) de Schur de matrizes e feixes
[U,T] = schur(A) [U,dim [,T] ]=schur(A,flag) [U,dim [,T] ]=schur(A,extern1) [As,Es [,Q,Z]]=schur(A,E) [As,Es [,Q],Z,dim] = schur(A,E,flag) [Z,dim] = schur(A,E,flag) [As,Es [,Q],Z,dim]= schur(A,E,extern2) [Z,dim]= schur(A,E,extern2)
matriz quadrada de reais ou complexos
matriz quadrada de reais ou complexos com as mesmas dimensões
deA
.
string ('c'
ou'd'
)
uma ``external'' (função externa), veja abaixo
uma ``external'', veja abaixo
matriz quadrada ortogonal ou unitária
matriz quadrada ortogonal ou unitária
matriz quadrada ortogonal ou unitária
matriz quadrada triangular superior ou quasi-triangular
matriz quadrada triangular superior ou quasi-triangular
matriz quadrada triangular superior
inteiro
Formas de Schur, formas ordenadas de Schur de matrizes e feixes
[U,T] = schur(A)
produz uma matriz de
Schur T
e uma matriz unitária
U
tais que A = U*T*U'
e
U'*U = eye(U)
. Por si mesmo,
schur(A
) retorna T
. Se
A
é de complexos, a Forma de Schur Complexa
é retornada na matriz T
. A Forma de Schur
Complexa é triangular superior com os autovalores de
A
na diagonal. Se A
é de
reais, a Forma de Schur Real é retornada. A Forma de Schur
Real tem autovalores reais na diagonal e os autovalores
complexos em blocos 2-por-2 na diagonal.
[U,dim]=schur(A,'c')
rretorna uma
matriz unitária U
que transforma
A
em uma forma de Schur. Ainda, as
primeiras dim colunas de U
formam uma base
para o autoespaço de A
associado aos
autovalores com partes reais negativas (autoespaço de "tempo
contínuo" estável).
[U,dim]=schur(A,'d')
retorna uma
matriz unitária U
que transforma
A
em uma forma de Schur. Ainda, as
primeiras dim
colunas de
U
geram uma base do autoespaço de
A
associado aos autovalores de magnitude
menor que 1 (autoespaço de "tempo discreto" estável).
[U,dim]=schur(A,extern1)
retorna uma
matriz unitária U
que transforma
A
em uma forma de Schur. Ainda, as
dim
primeiras colunas de
U
geram uma base para o autoespaço de
A
associado aos autovalores que são
selecionados pela "external" extern1
(veja
"external" para detalhes). Esta "external" pode ser descrita
por uma função do Scilab ou por um "procedure" de C ou
FORTRAN:
Se extern1
é descrita por uma
função do Scilab, deve ter a seguinte seqüência de
chamamento: s=extern1(Ev)
, onde
Ev
é um autovalor e
s
um booleano.
Se extern1
é descrita por uma
função de C ou FORTRAN, deve ter a seguinte seqüência de
chamamento: int extern1(double *EvR, double
*EvI)
onde EvR
e
EvI
são partes real e complexa de
autovalor. Valor verdadeiro ou diferente de zero
retornado significa autovalor selecionado.
[As,Es] = schur(A,E)
produz uma
matriz As
quasi-triangular e uma matriz
triangular Es
que são a forma generalizada
de Schur do par A, E
.
[As,Es,Q,Z] = schur(A,E)
retorna,
ainda, duas matrizes unitárias Q
e
Z
tais que As=Q'*A*Z
e
Es=Q'*E*Z
.
[As,Es,Z,dim] = schur(A,E,'c')
retorna a forma real generalizada de Schur do feixe
s*E-A
. Ainda, as primeiras dim colunas de
Z
geram uma base para o autoespaço direito
associado aos autovalores com partes reais negativas
(autoespaço de "tempo contínuo" generalizado).
[As,Es,Z,dim] = schur(A,E,'d')
retorna a forma real generalizada de Schur do feixe
s*E-A
. Ainda, as dim primeiras colunas de
Z
formam uma base para o autoespaço direito
associado aos autovalores de magnitude menor que 1 (autoespaço
de "tempo discreto" generalizado).
[As,Es,Z,dim] =
schur(A,E,extern2)
retorna a forma real generalizada de Schur do feixe
s*E-A
. Ainda, as dim primeiras colunas de
Z
formam uma base para o autoespaço direito
associado aos autovalores do feixe que são selecionados de
acordo com a regra que é dada pela "external"
extern2
. (veja "external" para detalhes).
Esta external pode ser descrita por uma função do Scilab ou
por um "procedure" de C ou FORTRAN.
Se extern2
é descrita por uma
função do Scilab, deve ter a seqüência de chamamento:
s=extern2(Alpha,Beta)
, onde
Alpha
e Beta
definem um autovalor generalizado e s
um booleano.
Se a "external" extern2
é
descrita por um "procedure" C ou FORTRAN, deve ter a
seqüência de chamamento:
int extern2(double *AlphaR, double
*AlphaI, double *Beta)
se A
e E
são
matrizes de reais e
int extern2(double *AlphaR, double
*AlphaI, double *BetaR, double *BetaI)
se A
ou E
é
matriz de complexos. Alpha
, e
Beta
definem o autovalor
generalizado. Um valor verdadeiro ou diferente de zero
siginfica autovalor generalizado selecionado.
As computações da forma de Schur matricial são baseadas nas rotinas de Lapack DGEES e ZGEES.
As computações da forma de Schur de feixes são baseadas nas rotinas de Lapack DGGES e ZGGES.
//SCHUR FORM OF A MATRIX //---------------------- A=diag([-0.9,-2,2,0.9]);X=rand(A);A=inv(X)*A*X; [U,T]=schur(A);T [U,dim,T]=schur(A,'c'); T(1:dim,1:dim) //stable cont. eigenvalues function t=mytest(Ev),t=abs(Ev)<0.95,endfunction [U,dim,T]=schur(A,mytest); T(1:dim,1:dim) // The same function in C (a Compiler is required) cd TMPDIR; C=['int mytest(double *EvR, double *EvI) {' //the C code 'if (*EvR * *EvR + *EvI * *EvI < 0.9025) return 1;' 'else return 0; }';] mputl(C,TMPDIR+'/mytest.c') //build and link lp=ilib_for_link('mytest','mytest.c',[],'c'); link(lp,'mytest','c'); //run it [U,dim,T]=schur(A,'mytest'); //SCHUR FORM OF A PENCIL //---------------------- F=[-1,%s, 0, 1; 0,-1,5-%s, 0; 0, 0,2+%s, 0; 1, 0, 0, -2+%s]; A=coeff(F,0);E=coeff(F,1); [As,Es,Q,Z]=schur(A,E); Q'*F*Z //It is As+%s*Es [As,Es,Z,dim] = schur(A,E,'c') function t=mytest(Alpha, Beta),t=real(Alpha)<0,endfunction [As,Es,Z,dim] = schur(A,E,mytest) //the same function in Fortran (a Compiler is required) ftn=['integer function mytestf(ar,ai,b)' //the fortran code 'double precision ar,ai,b' 'mytestf=0' 'if(ar.lt.0.0d0) mytestf=1' 'end'] mputl(' '+ftn,TMPDIR+'/mytestf.f') //build and link lp=ilib_for_link('mytestf','mytestf.f',[],'F'); link(lp,'mytestf','f'); //run it [As,Es,Z,dim] = schur(A,E,'mytestf') | ![]() | ![]() |