aff2ab
Conversão de uma função linear (afim) para forma A,b
Seqüência de Chamamento
[A,b]=aff2ab(afunction,dimX,D [,flag])
Parâmetros
- afunction
uma função do Scilab
Y =fct(X,D)
ondeX, D, Y
sãolists
de matrizes- dimX
uma matriz de inteiros p x 2 (
p
é o número de matrizes em X)- D
uma
list
de matrizes de reais (ou qualquer outro objeto Scilab válido).- flag
parâmetro opcional (
flag='f'
ouflag='sp'
)- A
uma matriz de reais
- b
um vetor de reais tendo a mesma dimensão de linha que
A
Descrição
aff2ab
retorna a representação matricial de uma
função afim (na base canônica).
afunction
é uma função com sintaxe imposta:
Y=afunction(X,D)
onde X=list(X1,X2,...,Xp)
é uma lista de p matrizes de reais, e Y=list(Y1,...,Yq)
éuma lista de q matrizes reais que dependem
linearmente das Xi
's. A entrada (opcional) D
contém parâmetros necessários para computar Y como uma função
de X (geralmente é uma lista de matrizes).
dimX
é uma matriz p x 2:
dimX(i)=[nri,nci]
é o número real de linhas e colunas
da matriz Xi
. Estas dimensões determinam
na
, a dimensão de coluna da matriz resultante
A
: na=nr1*nc1 +...+ nrp*ncp
.
Se o parâmetro opcional flag='sp'
a matriz
resultante A é retornada como uma esparsa.
Esta função é útil para resolver um sistema de equações lineares onde as incógnitas são matrizes.
Exemplos
// solucionador de equação de Lyapunov (uma incógnita, uma restrição) deff('Y=lyapunov(X,D)','[A,Q]=D(:);Xm=X(:); Y=list(A''*Xm+Xm*A-Q)') A=rand(3,3);Q=rand(3,3);Q=Q+Q';D=list(A,Q);dimX=[3,3]; [Aly,bly]=aff2ab(lyapunov,dimX,D); [Xl,kerA]=linsolve(Aly,bly); Xv=vec2list(Xl,dimX); lyapunov(Xv,D) Xm=Xv(:); A'*Xm+Xm*A-Q // solucionador de equação de Lyapunov com restrição redundante X=X' // (uma variável, uma restrição) D é variável global deff('Y=ly2(X,D)','[A,Q]=D(:);Xm=X(:); Y=list(A''*Xm+Xm*A-Q,Xm''-Xm)') A=rand(3,3);Q=rand(3,3);Q=Q+Q';D=list(A,Q);dimX=[3,3]; [Aly,bly]=aff2ab(ly2,dimX,D); [Xl,kerA]=linsolve(Aly,bly); Xv=vec2list(Xl,dimX); ly2(Xv,D) // equações de Francis // Achando matrizes X1 e X2 tais que: // A1*X1 - X1*A2 + B*X2 -A3 = 0 // D1*X1 -D2 = 0 deff('Y=bruce(X,D)','[A1,A2,A3,B,D1,D2]=D(:);'+... '[X1,X2]=X(:);Y=list(A1*X1-X1*A2+B*X2-A3,D1*X1-D2)') A1=[-4,10;-1,2];A3=[1;2];B=[0;1];A2=1;D1=[0,1];D2=1; D=list(A1,A2,A3,B,D1,D2); [n1,m1]=size(A1);[n2,m2]=size(A2);[n3,m3]=size(B); dimX=[[m1,n2];[m3,m2]]; [Af,bf]=aff2ab(bruce,dimX,D); [Xf,KerAf]=linsolve(Af,bf);Xsol=vec2list(Xf,dimX) bruce(Xsol,D) // Achando todas as X que comutam com A deff('y=f(X,D)','y=list(D(:)*X(:)-X(:)*D(:))') A=rand(3,3);dimX=[3,3];[Af,bf]=aff2ab(f,dimX,list(A)); [Xf,KerAf]=linsolve(Af,bf);[p,q]=size(KerAf); Xsol=vec2list(Xf+KerAf*rand(q,1),dimX); C=Xsol(:); A*C-C*A
Ver Também
- linsolve — solucionador de equações lineares
Report an issue | ||
<< Linear Equations | Linear Equations | inv >> |