schur
decomposição (ordenada) de Schur de matrizes e feixes
Seqüência de Chamamento
[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)
Parâmetros
- A
matriz quadrada de reais ou complexos
- E
matriz quadrada de reais ou complexos com as mesmas dimensões de
A
.- flag
string (
'c'
ou'd'
)- extern1
uma ``external'' (função externa), veja abaixo
- extern2
uma ``external'', veja abaixo
- U
matriz quadrada ortogonal ou unitária
- Q
matriz quadrada ortogonal ou unitária
- Z
matriz quadrada ortogonal ou unitária
- T
matriz quadrada triangular superior ou quasi-triangular
- As
matriz quadrada triangular superior ou quasi-triangular
- Es
matriz quadrada triangular superior
- dim
inteiro
Descrição
Formas de Schur, formas ordenadas de Schur de matrizes e feixes
- FORMA DE SCHUR MATRICIAL
- Forma de Schur usual:
[U,T] = schur(A)
produz uma matriz de SchurT
e uma matriz unitáriaU
tais queA = U*T*U'
eU'*U = eye(U)
. Por si mesmo, schur(A
) retornaT
. SeA
é de complexos, a Forma de Schur Complexa é retornada na matrizT
. A Forma de Schur Complexa é triangular superior com os autovalores deA
na diagonal. SeA
é 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.- Formas de Schur ordenadas
[U,dim]=schur(A,'c')
rretorna uma matriz unitáriaU
que transformaA
em uma forma de Schur. Ainda, as primeiras dim colunas deU
formam uma base para o autoespaço deA
associado aos autovalores com partes reais negativas (autoespaço de "tempo contínuo" estável).[U,dim]=schur(A,'d')
retorna uma matriz unitáriaU
que transformaA
em uma forma de Schur. Ainda, as primeirasdim
colunas deU
geram uma base do autoespaço deA
associado aos autovalores de magnitude menor que 1 (autoespaço de "tempo discreto" estável).[U,dim]=schur(A,extern1)
retorna uma matriz unitáriaU
que transformaA
em uma forma de Schur. Ainda, asdim
primeiras colunas deU
geram uma base para o autoespaço deA
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:- Uma Função do Scilab
Se
extern1
é descrita por uma função do Scilab, deve ter a seguinte seqüência de chamamento:s=extern1(Ev)
, ondeEv
é um autovalor es
um booleano.- Um "Procedure" C ou FORTRAN
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)
ondeEvR
eEvI
são partes real e complexa de autovalor. Valor verdadeiro ou diferente de zero retornado significa autovalor selecionado.
- FORMAS DE SCHUR DE FEIXES
- Forma de Schur de Feixe Usual
[As,Es] = schur(A,E)
produz uma matrizAs
quasi-triangular e uma matriz triangularEs
que são a forma generalizada de Schur do parA, E
.[As,Es,Q,Z] = schur(A,E)
retorna, ainda, duas matrizes unitáriasQ
eZ
tais queAs=Q'*A*Z
eEs=Q'*E*Z
.- Formas de Schur Ordenadas:
[As,Es,Z,dim] = schur(A,E,'c')
retorna a forma real generalizada de Schur do feixes*E-A
. Ainda, as primeiras dim colunas deZ
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 deZ
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 deZ
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.- Função do Scilab
Se
extern2
é descrita por uma função do Scilab, deve ter a seqüência de chamamento:s=extern2(Alpha,Beta)
, ondeAlpha
eBeta
definem um autovalor generalizado es
um booleano.- Um "Procedure" C ou FORTRAN
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
eE
são matrizes de reais eint extern2(double *AlphaR, double *AlphaI, double *BetaR, double *BetaI)
se
A
ouE
é matriz de complexos.Alpha
, eBeta
definem o autovalor generalizado. Um valor verdadeiro ou diferente de zero siginfica autovalor generalizado selecionado.
Referências
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.
Exemplos
//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')
Report an issue | ||
<< rankqr | Factorization | sqroot >> |