nextupprevious
Next:Sistemas Esparsos Up:Tutorial Previous:Aplicações em Finanças

Auto-Valores e Auto-vetores
 

Dada uma matriz A do tipo n por n. Um auto vetor é um vetor nao nulo tal que para algum escalar l (real ou complexo) temos
 

A x = l x


O escalar l é chamado de auto-valor.Nao e dificil verificar que l é auto-valor s.s.s.

det(A - l I ) = 0


aonde I é a matrix identidade n por n. (eye(n) ) Em geral os auto-valores de uma matriz (mesmo real) sao complexos. Entretanto, se a matriz for simetrica nao e' dificil ver que seus auto-valore sao reais.

Em matlab para calcularmos os auto-valores e auto-vetores de uma matriz A com o comando

>> d = eig(A)


O vetor d de comprimento n contém os auto-valores da matriz A

Exemplo:

>> A = [ 1 2 ; 2 1 ]

A =

     1     2
     2     1

>> D = eig(A)

D =

    -1
     3
>> B = [ 1  1 ; -1  1]

B =

     1     1
    -1     1

>> eig(B)

ans =

   1.0000 + 1.0000i
   1.0000 - 1.0000i
Já se desejamos calcular os auto-valores e os correspondentes auto-vetores podemos faze-lo com o comando:
>> [V, D] = eig(A)

Este comando produz uma matriz diagonal D contendo os auto-valores de Ae uma matriz n por n contendo os correspondentes auto-vetores de forma que a equacao
\begin{displaymath}A \ast V = V \ast D \end{displaymath}

é satisfeita.

Exemplo:

>> [W , D ] = eig(B)

W =

   0.7071             0.7071
        0 + 0.7071i        0 - 0.7071i


D =

   1.0000 + 1.0000i        0
        0             1.0000 - 1.0000i


> B * W - W * D

ans =

     0     0
     0     0
Geometricamente auto-vetores correspondem a direcoes que sao mandadas via a transformacao linear definida pela matrix A em si-mesmas. Ou seja, se x é um auto-vetor entao a direcao associada a x é mandada nela propria.

Para um excelente exemplo de visualizacao do conceito de auto-valor e auto-vetor tente o programa eigshow do matlab.

 >> eigshow
Exercicio Pratico: Dentre as matrizes apresentadas pelo comando eigshow quais sao aquelas que: Sao singulares? Tem auto-valores complexos? Tem auto-valores duplos?

Existe tambem o conceito de auto-valores à esquerda, que correspondem a vetores linha satisfazendo a equacao

v A = l v


Tais auto-vetores podem ser calculados atraves do sequencia

[W, D] = eig(A')
W = W'


Existe tambem em diversas apliacacoes a nocao de auto-vetor e auto-valor generalizados. Se A e B sao matrizes n por n, dizemos que x é um auto-vetor generalizado do par (A,B) se existe l tal que

A x = l B
Auto-valores e auto-vetores generalizados podem ser calculados pelo comando:
eig(A, B)


Decomposicao em Valores Singulares

A decomposicao em valores singulares e o associado conceito de condicionamento sao ferramentas de suma importancia em metodos numericos e analise numerica. Para descricao teorica veja o Apendice A do livro de G. Strang "Linear Algebra and Its Applications" ou o livro "Algebra Linear" de E.Lima.

Uma matriz A do tipo m por n (real ou complexa) pode sempre ser escrita como:

A = U S V'
aonde U e V sao ortogonais (unitarias) e S é diagonal. As colunas da matriz m por m U sao os auto-vetores da matriz A A' enquanto que as colunas da matriz n por n V sao os auto-vetores da matriz A A'. Alem disso os chamados valores singulares que sao os elementos da diagonal de S sao as raizes quadradas dos auto-valores nao nulos de A A' e de A' A

Em matlab para calcularmos a decomposicao em valores singulares (SVD) de uma matriz A usamos o comando

>> [U,S,V] = svd(A)
Exemplo:
  >> A = [ 2 0; 0 -3; 0 0]

A =

     2     0
     0    -3
     0     0

>> [ U, S, V] = svd(A)

U =

     0     1     0
     1     0     0
     0     0     1


S =

     3     0
     0     2
     0     0


V =

     0     1
    -1     0
A ideia geometrica fundamental que permeia a SVD é obtermos duas bases ortonornais nas quais a transformacao linear possa ser escrita como uma aplicacao que manda elementos de uma base em multiplos de elementos da outra.

O comando eigshow permite visualizar no caso de matrizes 2 por 2 as duas bases mencionadas acima em diversos exemplos.

A analise da solucao de sistemas lineares pode ser feita com base na decomposicao em valores singulares. De fato, uma vez que possuimos a decomposicao em valores singulares de A = U S V'. Suponha que m=n e que todos os valores singulares de A sejam nao nulos. Pra resolvermos o sistema
A x = y

basta fazermos:
x = V S-1 U' y
 

aonde, como S é diagonal, S-1 é bastante simples de ser calculada. invertendo os elementos da diagonal de S. Por outro lado se alguns dos valores singulares estiverem proximos de zero, isto significa que o nosso sistema de equacoes é potencialmente instável e que pequenas modificacoes no lado direito y podem levar a grandes modificacoes na solucao s.

Isto leva a nocao de condicionamento que é a relacao entre o maior e o menor dos valores singulares.
 

Condicionamento
 

Para calcularmos o condicionamento de uma matriz com matlab basta o comando ``cond."

Exemplo:

% Criamos a matriz de Hilbert A = (( 1 / (i + j -1) )) , i,j = 1:5 
>> A = hilb(5)

A =

    1.0000    0.5000    0.3333    0.2500    0.2000
    0.5000    0.3333    0.2500    0.2000    0.1667
    0.3333    0.2500    0.2000    0.1667    0.1429
    0.2500    0.2000    0.1667    0.1429    0.1250
    0.2000    0.1667    0.1429    0.1250    0.1111

>> cond(A)

ans =

   4.7661e+05
O seguinte exemplo mostra como o mal condicionamento de uma matriz leva a serios problemas. Consideraremos uma matriz de Hilbert de tamanho 10, definida por
\begin{displaymath}A = ((\frac{1}{i+j-1}))_{1 \le i,j \le 10} \end{displaymath}
 

e resolveremos os sistemas
\begin{displaymath}A x = y \quad \quad A x2 = y + \delta y \end{displaymath}
 

com $\delta y$ um vetor aleatorio (uniformemente distribuido entre 0 e 0.1).

              
>> x2 = B\(ones(10,1)+0.1*rand(10,1));
>> x1 = B\(ones(10,1));
>> norm(x1-x2)/norm(x1)

ans =

   1.4627e+04

>> A = hilb(10);
>> y1 = ones(10,1);
>> y2 = (ones(10,1) + 0.1*rand(10,1));
>> x1 = A\y1;
>> x2 = A\y2;
>> % erro relativo
>> rx = norm(x1-x2)/norm(x1)

rx =

   2.5118e+04

>> %variacao no lado direito
>> ry = norm(y1-y2)/norm(y1)

ry =

    0.0580

>> rx/ry

ans =

   4.3322e+05

>> cond(A)

ans =

   1.6025e+13
Note que uma pequena variacao no lado direito levou a uma tremenda variação na solucao. Isto era de se espera visto que o o numero de condicionamento desta matriz é imenso.
 



nextupprevious
Next:Sistemas Esparsos Up:Tutorial Previous:Aplicações em Finanças