Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Escola Superior de Agricultura Luiz de Queiroz Departamento de Cincias Exatas - ESALQ/USP Fevereiro de 2002
(ve rso 3, 14)
Esse programa permite a obteno da matriz X, que a inversa de A. O comando PRINT solicita a visualizao da matriz X. Vale ressaltar que, ao usar o comando QUIT, a sesso do IML encerrada e as matrizes e variveis criadas so apagadas da memria RAM.
I n t r o d u o a o SAS /I M L p a r a l g e b r a d e M a t r i ze s
D e fi n in d o m a tr iz e s
Definindo matrizes
O objeto fundamental sobre o qual operam os comandos do IML uma matriz com linhas e colunas, podendo ser numrica ou alfanumrica. O nmero mximo de caracteres que um elemento de uma matriz alfanumrica pode apresentar 32676, sendo que todos os elementos sero armazenados com o mesmo nmero de caracteres que o maior deles. Os nomes atribudos as matrizes devem ser vlidos no ambiente SAS, seguindo suas regras: possuir de 1 a 8 caracteres sem espaos e comear com letras, aceitando nmeros a partir do 2 caractere (verses 6.12 e anteriores). Em verses mais recentes, como a 8.0 e 8.2, os nomes das variveis podem exceder oito caracteres. possvel criar matrizes com valores perdidos, sendo que os mesmos devem ser indicados por um ponto ("."). Contudo, nem todos os comandos funcionam com matrizes com pontos. Uma vez definido um nome para a matriz, ele pode ser usado diretamente ou substitudo em aes futuras, a critrio do usurio, sendo possvel inclusive substituir apenas determinados elementos, conforme ser visto a seguir. Ao se referir a uma dada matriz, pode ser simplesmente utilizado seu nome, ou ainda especificando seus elementos. Matrizes com mltiplos elementos so especificadas com o uso de chaves ({ }), sendo que as linhas so separadas por vrgulas. Evidentemente, todas as linhas devem conter o mesmo nmero de elementos. Os valores a serem adicionados podem ser: Nmeros reais inteiros ou com decimais (notao cientfica, como 1E-8, permitida). Caracteres alfanumricos ("strings"), que podem estar entre aspas simples ( ) ou duplas (" "), ou at mesmo sem elas, sendo que nesse caso todos os valores sero armazenados com letras maisculas. Nmeros entre colchetes ( [ ] ) indicam o nmero de vezes que um dado valor de repete, facilitando a digitao em muitas situaes. Matrizes tambm podem ser criadas a partir do uso de funes pr-programadas, do comando CALL ou de um programa especfico. A seguir, so apresentados exemplos de matrizes com um nico elemento (escalares):
proc iml; a=32; b=.; c='oi'; d='ol pessoal'; e="ciao"; print a b c d e;
A 32
B C D E . oi ol pessoal ciao
I n t r o d u o a o SAS /I M L p a r a l g e b r a d e M a t r i ze s
D e f i ni n d o m a tr i ze s
X 10
Y 20 20 30 40
Z 30 3 5
40 4 6
10
Pelo fato da matriz AA no apresentar seus elementos entre aspas, eles automaticamente so substitudos por letras maisculas. J para BB, foi respeitada a forma original. Caso seja necessrio definir elementos com espaos entre eles, deve-se sempre usar a segunda forma. Uma forma mais sinttica de escrever uma matriz com elementos repetidos possvel indicando o nmero de vezes que o elemento deve ser repetido, entre colchetes. Por exemplo:
proc iml; resposta={[3] 'Sim', [3] 'No', [3] 'Talvez'}; print resposta;
I n t r o d u o a o SAS /I M L p a r a l g e b r a d e M a t r i ze s
D e fi n in d o m a tr iz e s
Isso muito conveniente para construir matrizes com elementos repetidos, como ocorrem com as matrizes de delineamentos experimentais. Conforme mencionado, uma matriz pode ser redefinida no momento em que o usurio julgar conveniente. A segunda matriz denominada RESPOSTA sobrepe-se primeira.
proc iml; resposta={[3] 'Sim', [3] 'No', [3] 'Talvez'}; resposta={[3] 1, [3] 2, [3] 0}; print resposta;
RESPOSTA 1 2 0
1 2 0
1 2 0
Matrizes tambm podem ser obtidas como resultado de funes ou expresses, como por exemplo x=inv(a); em que os elementos de X so obtidos pela inverso de A. H ainda uma opo muito prtica, que a construo de vetores indexados, como apresentado abaixo. Note que possvel inclusive usar a funo DO, sendo o ltimo nmero da funo o incremento.
proc iml; r=1:5; s=10:5; t='xyz1':'xyz4'; u=do(-2,1,1); v=do(-2,1,.5); print r s t u v;
2 9
3 8
4 7
5 6 5
S 10 T
U -2 V -2
I n t r o d u o a o SAS /I M L p a r a l g e b r a d e M a t r i ze s
D e f i ni n d o m a tr i ze s
Um comando tambm til o SHOW NAMES, que permite visualizar os atributos de todas as matrizes armazenadas. No caso, tem-se a dimenso, o tipo - numrica ou alfanumrica e o nmero de bits para armazenamento.
proc iml; x={1 1 0, 1 1 0, 1 0 1, 1 0 1}; y={1, 2, 3, 4}; show names; print x y;
1 1 0 0
0 0 1 1
Matrizes especiais, como a matriz identidade, possuem comandos especficos para sua obteno, sendo que o nmero entre parnteses indica sua dimenso:
proc iml; identid=i(5); print identid;
IDENTID 1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
J matrizes com elementos iguais, que podem ser iguais a um (matriz de uns) ou a qualquer outro valor de interesse, so obtidas com a funo J.
I n t r o d u o a o SAS /I M L p a r a l g e b r a d e M a t r i ze s
D e fi n in d o m a tr iz e s
1 1 1 1 1 1
UNS1_5 1 UNS5_5 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1 QUATROS 4 4 4 4 4 4 4 4 4 4 4 4
Para essa funo, o primeiro valor dentro dos parnteses indica o nmero de linhas da matriz a ser criada, o segundo, o de colunas, e o terceiro, o valor que tero todos os elementos. Outros comandos teis so os que fornecem a dimenso das matrizes armazenadas, NROW (nmero de linhas) e NCOL (nmero de colunas):
proc iml; x={1 2 3, 4 5 6, [3] 9, [2] 1 0}; m=nrow(x); n=ncol(x); print m n x;
M 4
N 3
X 1 4 9 1
2 5 9 1
3 6 9 0
Finalizando esta sesso, mencionaremos ainda o comando STORAGE, que permite armazenar (gravar) as matrizes numa biblioteca, permitindo seu uso posterior. Isso pode ser til nos casos em que os programas so extensos e/ou h limitao de memria do computador. O comando FREE elimina as matrizes da memria RAM.
proc iml;
I n t r o d u o a o SAS /I M L p a r a l g e b r a d e M a t r i ze s
O pe ra e s B s i ca s
Operaes Bsicas
A partir desse ponto, em funo de estarmos sempre apresentando comandos do SAS/IML, no apresentaremos mais os comandos PROC IML e QUIT, necessrios para iniciar e encerrar a sesso.
3.1. Adio
A={2 2, 3 4}; B={4 5, 1 0}; SOMA=A+B; print A B soma;
A 2 3
2 4
B 4 1
5 0
SOMA 6 4
7 4
I n t r o d u o a o SAS /I M L p a r a l g e b r a d e M a t r i ze s
O p e ra e s B si ca s
3.2. Subtrao
DIF=A-B; print dif;
DIF -2 2
-3 4
AXC 8 12
8 16
AXB 10 16
10 15
I n t r o d u o a o SAS /I M L p a r a l g e b r a d e M a t r i ze s
O pe ra e s B s i ca s
print a b c;
A 2 4
2 4
B 6 8
6 8
C 2 4 0 0
2 4 0 0
0 0 6 8
0 0 6 8
A 1 0
0 1
B 1 2 3
C3 1 0 0 0
C1 1 2 3 0 0 0 0 0 1 0 0 0 0 1
0 0 0 1 2 3
C2 1 0 2 0 3 0
0 1 0 2 0 3
0 1 0 0
I n t r o d u o a o SAS /I M L p a r a l g e b r a d e M a t r i ze s
O p e ra e s B si ca s
C 4 0
16 20
A2 7 15
10 22
A3 37 81
54 118
INVERSA -2 1.5
1 -0.5
3.9. Trao
x={1 2 3, 4 5 6, 6 2 4}; traco=trace(x); print traco;
TRACO 10
3.10. Transposio
x={ 1.9 2 3, 40 5.2 6, 60 20 4.3}; transp1=t(x); transp2=x`;
10
I n t r o d u o a o SAS /I M L p a r a l g e b r a d e M a t r i ze s
O pe ra e s B s i ca s
TRANSP1 1.9 2 3
40 5.2 6
60 20 4.3
TRANSP2 1.9 2 3
40 5.2 6
60 20 4.3
Note que h duas formas diferentes de transpor uma matriz, uma com o argumento psfixado e uma com o argumento pr-fixado. Evidentemente, ambas produzem o mesmo resultado.
1 0 0 1 0 0
0 0 1 1 0 0
1 0 0 1 1 1
0 0 1 1 1 1
I n t r o d u o a o SAS /I M L p a r a l g e b r a d e M a t r i ze s
11
O p e ra e s B si ca s
A_B 4 -2
3 5
10 8
A_C
4 -2 7 4
3 5 -10 13
A matriz A e o vetor b foram concatenados horizontalmente usando o operador ||. J as matrizes A e C foram concatenadas verticalmente usando //, obviamente observando se as dimenses so compatveis.
H 1 0 0
2 0 0
0 0 1
E 1 0 0
2 0 0
0 1 0
Note que, para essas matrizes, as formas escalonadas resultantes so diferentes, sendo a segunda delas a forma escalonada cannica.
12
I n t r o d u o a o SAS /I M L p a r a l g e b r a d e M a t r i ze s
O pe ra e s B s i ca s
AESC 1 0 0 CESC 1 0
0 1 0 2 0
1 -1 0 3 0
BESC 1 0 0 4 0
0 1 0
0 0 1
Verifica-se que o posto de A, B e C 2, 3 e 1, respectivamente. Embora o SAS/IML no possua uma funo que fornea diretamente o posto de uma matriz (a funo RANK fornece o rank dos elementos, e no da matriz, como desejado), isso pode ser conseguido com o auxlio de um programa auxiliar, apresentado a seguir. Ele bas eia-se nos teoremas 55 (r[A]=r[A+A]) e 50 (A+A simtrica e idempotente), lembrando ainda que para matrizes idempotentes o rank igual ao trao. A funo ROUND arredonda o valor encontrado, que sujeito a pequenos erros de aproximao.
A={4 2 2, 2 2 0, 2 0 2}; B={3 1 2, 1 4 1, 2 1 5}; C={1 2 3 4, 2 4 6 8}; RANK_A=round(trace(ginv(A)*A)); RANK_B=round(trace(ginv(B)*B)); RANK_C=round(trace(ginv(C)*C));
I n t r o d u o a o SAS /I M L p a r a l g e b r a d e M a t r i ze s
13
RANK_A 2
RANK_B 3
RANK_C 1
0 0 1
Aproveitaremos a matriz INV1, que contm a inversa de B direita da identidade, para mostrarmos como selecionar submatrizes de uma dada matriz. possvel selecionar linhas, colunas ou at mesmo elementos de interesse. Para tanto, utilizam-se subscritos,que so operadores localizados dentros de colchetes, aps o operando. O primeiro nmero refere-se a(s) linha(s) a ser(em) retirada(s) e o segundo a(s) coluna(s), sendo que eles devem ser separados por uma vrgula. Para selecionar um nico elemento, como por exemplo da 3a linha e 4a coluna (lembre-se que INV1 tem dimenso 3 x 6):
B={3 1 2, 1 4 1,
14
I n t r o d u o a o SAS /I M L p a r a l g e b r a d e M a t r i ze s
In ve r sa d e M at ri z N o S in g u l a r
ELEM3_4 -0.175
LINHA3 0
-0.175
-0.025
0.275
Para selecionar uma submatriz, como por exemplo a inversa sem a parte referente matriz identidade:
B={3 1 2, 1 4 1, 2 1 5}; INV1=hermite(B||I(3)); INVERSA=INV1[, {4 5 6}]; print INVERSA;
I n t r o d u o a o SAS /I M L p a r a l g e b r a d e M a t r i ze s
15
D e te r m in a n te s
Determinantes
O SAS/IML calcula o determinante de matrizes quadradas de forma simples, atravs da funo DET, considerando o fato de que o determinante pode ser obtido atravs do produto dos autovalores da matriz em questo, que por sua vez so obtidos pela decomposio LU (matrizes triangulares). O resultado fornecido uma matriz 1x1 (escalar) contendo o determinante.
proc iml; a={1 1 1, 1 2 4, 1 3 9}; determ=det(a); print determ;
DETERM 2
No h uma funo especfica para se obter matrizes adjuntas e dos cofatores de uma matriz de interesse.
16
I n t r o d u o a o SAS /I M L p a r a l g e b r a d e M a t r i ze s
S i st e m as C o n si st e n te s d e E q u a e s L in e a r e s
1 2
As formas escalonadas apresentadas tambm podem ser usadas para soluo de sistemas de equaes lineares. Considerando o mesmo sistema com duas equaes e duas incgnitas, escrito na forma matricial Ax=b, um programa para obter sua soluo pode ser:
A={ 4 3, -2 5}; b={10, 8}; A_b=A||b; SOL1=echelon(A_b); SOL2=hermite(A_b); print SOL1 SOL2;
Caso desejemos resolver o sistema usando o mtodo de Kramer, podemos usar o seguinte programa:
reset print; A={1 1 2, 2 0 3, 1 1 0}; B={ 9, 11, 3}; A1=B || A[, {2 3}]; A2=A[,1] || B || A[,3]; A3=A[, {1 2}] || B; DET_A=det(A); DET_A1=det(A1); DET_A2=det(A2); DET_A3=det(A3); X1=DET_A1/DET_A; X2=DET_A2/DET_A; X3=DET_A3/DET_A; SOLUCAO=X1//X2//X3;
Vale lembrar que no houve necessariamente a preocupao em elaborar programas mais sintticos e eficientes. Nesse contexto, foram definidas as matrizes A, B, A1, A2 e A3, com I n t r o d u o a o SAS /I M L p a r a l g e b r a d e M a t r i ze s 17
S i st e m a s C o n si s te n te s d e E q u a e s L i n e ar e s
seus respectivos determinantes. Em seguida, foi obtida a soluo do sistema, concatenada no vetor SOLUCAO. O comando RESET PRINT solicita a visualizao de todas as matrizes criadas, facilitando a visualizao dos resultados, embora com excesso de informaes. Para desativ-lo, deve-se usar RESET NOPRINT. A sada do programa acima
A 3 rows 1 2 1 3 rows 9 11 3 3 rows 9 11 3 3 rows 1 2 1 3 rows 1 2 1 1 row 4 1 row 4 1 row 8 1 row 12 1 row 1 1 row 2 1 row 3 3 cols 1 0 1 1 col (numeric) 2 3 0 (numeric)
A1
3 cols 1 0 1 3 cols 9 11 3 3 cols 1 0 1 1 col 1 col 1 col 1 col 1 col 1 col 1 col
(numeric) 2 3 0 (numeric) 2 3 0 (numeric) 9 11 3 (numeric) (numeric) (numeric) (numeric) (numeric) (numeric) (numeric)
A2
A3
18
I n t r o d u o a o SAS /I M L p a r a l g e b r a d e M a t r i ze s
S i st e m as C o n si st e n te s d e E q u a e s L in e a r e s
SOLUCAO
3 rows 1 2 3
1 col
(numeric)
SOLUCAO 1 2 3
No caso de obter solues para sistemas de equaes lineares homogneos do tipo Ax=(, sendo A de dimenso m x n, mn, possvel utilizar a funo HOMOGEN, que retorna solues como colunas ortonormais de uma matriz X com as propriedades Ax=( (P1) e X'X=I (P2). Para tanto, o posto de A deve ser r<n, ou seja, A deve ser de posto incompleto. A dimenso dessa matriz X n x (n-r), e portanto deve ser dada especial ateno a matrizes mal-condicionadas, j que o correto posto de A pode no ser obtido em funo de erros de aproximao.
A={4 2 2, 2 2 0, 2 0 2}; X=HOMOGEN(a); P1=A*X; P2=T(X)*X; print X P1 P2;
P1 2.22E-16 2.22E-16 0
P2 1
Nesse caso, x a soluo no trivial, e P1 e P2 a verificao das propriedades da soluo. Note que pequenos erros de aproximao podem ocorrer. I n t r o d u o a o SAS /I M L p a r a l g e b r a d e M a t r i ze s 19
Ra z e s C a r a c t e r st i c a s ( a u t ov al o re s )
Um outro fato que pode ser mencionado que a dimenso da matriz com as solues do sistema homogneo podem ser usadas para calcular o posto da matriz A, j que no h uma funo especfica para tanto:
POSTO_A=NROW(X)-NCOL(X); print POSTO_A;
POSTO_A 2
AUTOVAL 5 2 2
Caso necessitemos obter os autovalores a partir da equao caracterstica, podemos usar a funo POLYROOT, que encontra as razes de um polinmio real. A sintaxe POLYROOT(vetor), em que o vetor de dimenso 1 x n contm os coeficientes de um polinmio de grau n-1, sendo que eles devem estar em ordem decrescente, com relao as potncias do polinmio. O resultado uma matriz de dimenso (n-1) x 2, com as razes do polinmio; a primeira coluna contm a parte real e a segunda, a parte imaginria (que dever ser zero, no contexto desse curso). No exemplo em questo, a equao caracterstica -x3+9x2-24x+20=0, e assim
p={-1 9 -24 20}; raizes=POLYROOT(p);
20
I n t r o d u o a o SAS /I M L p a r a l g e b r a d e M a t r i ze s
Ra ze s C a r a c t e r s ti c a s ( au to va lo re s)
print raizes;
0 0 0
interessante notar que as solues esto sujeitas a erros de aproximao, em funo do algoritmo empregado. Um outro aspecto que deve ser lembrado diz respeito ao fato do SAS/ IML usar um algoritmo que no garante que todas as razes do polinmio sejam encontradas; nesses casos, h uma mensagem para o usurio na janela LOG. Nas situaes em que desejamos obter matrizes diagonais com as razes caractersticas de uma dada matriz, combinamos a funo DIAG, que cria matrizes diagonais, com a funo EIGVAL.
M={ 2 -1 -1, -1 2 -1, -1 -1 2}; AUTOV=EIGVAL(M); L=DIAG(AUTOV); PRINT AUTOV L;
3 3 -9.11E-17
AUTOV
3 0 0
0 0 3 0 0 -9.11E-17
fcil verificar que, exceto devido a erros de aproximao, M positiva semi-definida. Caso apliquemos o comando DIAG em uma matriz (e no num vetor, como no exemplo acima), teremos como resultado uma matriz formada pelos elementos da diagonal dessa matriz, sendo os demais substitudos por zero. Para facilitar a visualizao, poderamos ainda usar a opo FUZZ, associada ao comando RESET, de modo que os nmeros muito pequenos (por volta de 1E-12) sejam impressos como zero.
reset fuzz; PRINT AUTOV L;
AUTOV 3 3
L 3 0
0 3
0 0
I n t r o d u o a o SAS /I M L p a r a l g e b r a d e M a t r i ze s
21
Ve t or e s C ar a c te r st i c os ( a u t ove t or e s ) 0 0 0 0
Para voltarmos ao default, dentro da mesma seo do IML, devemos usar o comando RESET NOFUZZ.
0.7071068 -0.707107 0
fcil verificar que esses vetores so ortogonais entre si, pois o produto entre autovalores diferentes 0, apresentando como resultado de seu produto consigo mesmo o valor 1 (norma 1). Em outras palavras, o produto entre a transposta da matriz com os autovalores e ela prpria a identidade:
RESET FUZZ; AUTOVEC=EIGVEC(A); ORTONORM=AUTOVEC`*AUTOVEC; print ORTONORM;
ORTONORM 1 0 0
0 1 0
0 0 1
Em situaes prticas, podemos obter os autovalores e autovetores diretamente, com o uso da sub-rotina EIGEN, acionada pelo comando CALL, que invoca determinadas estruturas
22
I n t r o d u o a o SAS /I M L p a r a l g e b r a d e M a t r i ze s
F or m as E qu iv al e n te s
(operaes) pr-armazenadas. O primeiro termo dentro dos parnteses especifica o nome da matriz que conter os autovalores; o segundo, da matriz que conter os autovetores; oterceiro indica sobre qual matriz o comando ser aplicado.
CALL EIGEN(AUTOVAL,AUTOVET,A); print AUTOVAL AUTOVET;
AUTOVAL 5 2 2
Formas Equivalentes
As matrizes A e B so equivalentes se existem M e N no singulares tais que MAN=B. B dita forma normal de A. O SAS/IML fornece a forma normal de Hermite da matriz A, usando funo j vista anteriormente. Para matrizes quadradas, essa forma triangular superior e idempotente. Se A for no singular, o resultado ser uma matriz identidade.
A={4 2 2, 2 2 0, 2 0 2}; B=hermite(A); print B;
B 1 0 0
0 1 0
1 -1 0
possvel tambm obter a forma normal de Echelon que, nesse caso, coincide com a forma normal de Hermite:
B=echelon(A); print B;
I n t r o d u o a o SAS /I M L p a r a l g e b r a d e M a t r i ze s
23
F or m a s E q u i va l e n te s 1 0 0 0 1 0 1 -1 0
Se a matriz em questo for quadrada, as formas normais de Hermite e Echelon podem ser obtidas uma a partir da outra, apenas rearranjando as linhas de zeros. A forma de Echelon sempre fornece uma forma escalonada cannica. Para a obteno de uma matriz D diagonal congruente (e, portanto, equivalente) matriz A real e simtrica considerada, tal que TAT '=D, utiliza-se a sub-rotina EIGEN, pelo comando CALL EIGEN(D, T, A), j descrito anteriormente. Para tanto, utilizam-se as seguintes propriedades das matrizes obtidas com esse comando: T' = T-1 (ortogonal) e A=T*diag(D)*T', ou seja, diag(D) uma matriz diagonal congruente matriz A.
A={4 2 2, 2 2 0, 2 0 2}; CALL EIGEN (D,T,A); CONG=DIAG(D); A2=T*DIAG(D)*T`; reset FUZZ; print A A2;
A 4 2 2
2 2 0
2 0 2
A2 4 2 2
2 2 0
2 0 2
Dessas propriedades, conseguimos tambm verificar que diag(D)= T'*A*T, em que diag(D) uma matriz diagonal que exibe as razes caractersticas de A, e T uma matriz ortogonal cujas linhas so vetores caractersticos normalizados associados as razes caractersticas de A.
L1=DIAG(D); L2=T`*A*T; print L1 L2;
L1 6 0 0
0 2 0
0 0 0
L2 6 0 0
0 2 0
0 0 0
24
I n t r o d u o a o SAS /I M L p a r a l g e b r a d e M a t r i ze s
Fatorao
10
Fatorao
O SAS/IML no realiza diretamente fatoraes do tipo A=RR', fatoraes de posto completo do tipo A=BC e operaes de diagonalizao simultnea. No primeiro caso, possvel a obteno de fatoraes do tipo raiz quadrada de outra forma, apresentada abaixo. Uma vez que o principal interesse na fatorao de posto completo para a obteno da inversa generalizada de Moore-Penrose, a ausncia da fatorao no representa empecilho, uma vez que essa inversa generalizada calculada pelo SAS (itens seguintes). No manual, temos diversas outras decomposies que podem interessar ao leitor. Fatoraes do tipo A=U'U so obtidas com a funo ROOT, que retorna uma matriz triangular superior U que satisfaz a igualdade, sendo que a matriz A deve ser simtrica e positiva definida. Essa decomposio conhecida como decomposio de Cholesky, e a matriz U dita raiz quadrada de A.
U=ROOT(A); A1=U`*U; print U A1;
U 2 0 0
1 1 0
1 -1 0
A1 4 2 2
2 2 0
2 0 2
Vale ressaltar que alguns autores denominam a fatorao A=RR' como raiz quadrada, e no A=U'U, como o SAS considera. interessante notar que essa fatorao tambm do tipo triangular (A=LU), uma vez que U' triangular inferior e U triangular superior. Para realizar decomposio por valores singulares do tipo X=USV, o SAS/IML possui a subrotina SVD, acessada pelo comando CALL. Sua sintaxe CALL SVD(U, S, V, X), em que X representa a matriz a ser decomposta, U, S e V, o nome das matrizes a serem criadas com o resultado da decomposio, de forma que X=U*diag(S)*V e S contenha os valores singulares de A. Note que o algoritmo apresentado no texto das aulas tericas produz matrizes diferentes, mostrando que a decomposio no nica.
reset print; X={1 1 0, 1 1 0, 1 0 1, 1 0 1}; call svd(U,S,V,X); X1=U*diag(S)*V`;
I n t r o d u o a o SAS /I M L p a r a l g e b r a d e M a t r i ze s
25
In ve rsa s G e n e ra l i za d a s
4 rows 1 1 0 0
3 cols 0 0 1 1
(numeric)
(numeric)
(numeric)
V 3 rows 3 cols (numeric) 0.8164966 0 -0.57735 0.4082483 0.7071068 0.5773503 0.4082483 -0.707107 0.5773503 X1 1 1 1 1 4 rows 1 1 0 0 3 cols 0 0 1 1 (numeric)
11
Inversas Generalizadas
possvel calcular a inversa generalizada de Moore-Penrose usando o SAS/IML, com o comando GINV(X), em que X a matriz a ser invertida. A inversa obtida satisfaz as quatro condies da inversa, conforme apresentado abaixo.
X={1 1 0, 1 1 0, 1 0 1, 1 0 1}; MP1=ginv(X); P1=MP1*X*MP1; P2=X*MP1*X; P3a=X*MP1; P3b=t(X*MP1); P4a=MP1*X; P4b=t(MP1*X); print MP1;
26
I n t r o d u o a o SAS /I M L p a r a l g e b r a d e M a t r i ze s
Inv e rs as G e n e ra l i za d a s
MP1 0.1666667 0.1666667 0.1666667 0.1666667 0.3333333 0.3333333 -0.166667 -0.166667 -0.166667 -0.166667 0.3333333 0.3333333 P1 0.1666667 0.1666667 0.1666667 0.1666667 0.3333333 0.3333333 -0.166667 -0.166667 -0.166667 -0.166667 0.3333333 0.3333333 P3A 0.5 0.5 0 0 0.5 0.5 0 0 0 0 0.5 0.5 0 0 0.5 0.5 P3B 0.5 0.5 0 0 0.5 0.5 0 0 P2 1 1 1 1 1 0 0 0 0.5 0.5 0 0 1 0 0 0.5 0.5
P4A P4B 0.6666667 0.3333333 0.3333333 0.6666667 0.3333333 0.3333333 0.3333333 0.6666667 -0.333333 0.3333333 0.6666667 -0.333333 0.3333333 -0.333333 0.6666667 0.3333333 -0.333333 0.6666667
As inversas generalizadas reflexivas g2 para matrizes de delineamento podem ser obtidas com a funo SWEEP. Tomando o modelo linear de Gauss-Markov y = XB + e , podemos obter o sistema
X 'X X'y y 'x y 'y
g2
y 'X ( X'X )
A partio superior esquerda dessa matriz contm a inversa g2 de X'X, a partio superior direita as solues para B e apartio inferior direita a soma de quadrados do resduo. Esse o procedimento usado pelo PROC GLM do SAS para realizar anlises de varincia. Um exemplo apresentado abaixo, sendo que o segundo argumento da funo SWEEP um vetor com ndices variando de 1 at o posto de X.
reset print; X={1 1 0, 1 1 0, 1 0 1, 1 0 1}; y={1,
I n t r o d u o a o SAS /I M L p a r a l g e b r a d e M a t r i ze s
27
4 rows 1 1 0 0 4 rows
3 cols 0 0 1 1 1 col
(numeric)
(numeric)
(numeric) 10 3 7 30 (numeric)
(numeric) 3.5 -2 0 1
Leitores j familiarizados com o PROC GLM podem verificar as afirmativas acima com o seguinte programa:
data; input trat Y@@; datalines; 1 1 1 2 2 4 2 3 ;
28
I n t r o d u o a o SAS /I M L p a r a l g e b r a d e M a t r i ze s
Inv e rs as G e n e ra l i za d a s
The GLM Procedure Class Level Information Class Levels Values trat 2 1 2 Number of observations 4
X'X Generalized Inverse (g2) Intercept Intercept 0.5 trat 1 -0.5 trat 2 0 Y 3.5 Dependent Variable: Y Source DF Sum of Squares 4.00000000 1.00000000 5.00000000 Root MSE 0.707107 Mean Square 4.00000000 0.50000000 Y Mean 2.500000 F Value 8.00 F Value 8.00 Pr > F 0.1056 Pr > F 0.1056 F Value 8.00 Pr > F 0.1056 trat 1 -0.5 1 0 -2 trat 2 0 0 0 0 Y 3.5 -2 0 1
Model 1 Error 2 Corrected Total 3 R-Square 0.800000 Source trat Source trat DF 1 DF 1 Coeff Var 28.28427
I n t r o d u o a o SAS /I M L p a r a l g e b r a d e M a t r i ze s
29