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') | ![]() | ![]() |