Parte 4 - Labspot

Propaganda
2.8 Aplicação de Métodos Ortogonais ao Problema de Mínimos Quadrados
2.8.1 Introdução
Na solução de problemas matriciais é importante utilizar transformações que
preservem a solução do problema e ao mesmo tempo sejam útil na simplificação do
problema. Nesta seção será visto a utilização de transformações ortogonais no problema de
mínimos quadrados. Essas transformações tem a qualidade de não interferir na solução do
problema e ao mesmo tempo simplificar a solução. Como mostrou-se na seção anterior, a
solução do problema de mínimos quadrados, por meio da equação normal, pode apresentar
dificuldades de solução por problemas de condicionamento numérico. A utilização de uma
transformação que preserve a solução do problema é uma ferramenta que pode viabilizar a
solução do problema de mínimos quadrados.
2.8.2 Matrizes Ortogonais
Uma matriz real P é ortogonal, se satisfizer a seguinte relação:
P T P  PP T  I
A equação P T P  I nos mostra que as colunas da matriz P formam um
conjunto de vetores ortonormais. Do mesmo modo, PPT  I nos mostra que as linhas da
matriz P também formam um conjunto de vetores ortonormais.
Propriedades:
1 – Se P é uma matriz ortogonal, então det( P)  1 .
2 – Se P e Q são matrizes ortogonais, então o produto PQ também é ortogonal.
3 – Se P é uma matriz ortogonal, então para  x, y , tem-se:
 ( P x, P y)  ( P x)T  ( P y)  x T  y  ( x, y)  (preserva ângulo entre x e y )
 P x  x  (preserva a magnitude de x )
 P 1
4 – Se P e Q são matrizes ortogonais e A é uma matriz qualquer, então:
PA  AQ  A
1
Esta última propriedade é que torna o uso de matrizes e transformações
ortogonais atraentes do ponto de vista numérico, pois mostra que matrizes ortogonais não
podem criar e nem eliminar números pequenos ou grandes durante operações numéricas.
2.8.3 Aplicação de Matrizes Ortogonais à Solução de Problemas de Mínimos
Quadrados
Como foi visto, na solução do problema de mínimos quadrados se minimiza a
função custo:
Min
J (xˆ )
xˆ
Onde:
2
J (xˆ )  z  H xˆ 2
Expandindo a expressão, tem-se:
J (xˆ)  (z  H xˆ)T (z  H xˆ)
Seja Q uma matriz ortogonal, portanto, é possível a sequência:
J (xˆ)  (z  H xˆ)T QT Q (z  H xˆ)
J (xˆ )  (Qz  QH xˆ )T (Qz  QH xˆ )
2
J (xˆ )  Q z  QH xˆ 2
Suponha que Q seja escolhida de tal forma que:
U   Range de H (dim ensão n)
QH   
0   Subespaço Nulo (dim ensão m  n)
Sendo U triângular superior.
Além disso:
c   Range de H (dim ensão n)
Qz   
d   Subespaço Nulo (dim ensão m  n)
2
Tem-se:
2
2
 c  U xˆ 
c  U xˆ 
J (xˆ )     
 


d   0  2
 d  2
O vetor x̂ que minimiza J (xˆ) está no Range de H, e portanto é obtido por:
U xˆ  c
e a soma dos quadrados dos resíduos é dada por:
2
J (xˆ )  d 2
Como foi visto, este resíduo está no subespaço nulo (complemento ortogonal).
Existem muitas formas para a obtenção da matriz Q, sendo as principais:
 Transformações de Givens
 Transformações de Householder
 Transformações de Gran-Schmidt
2.8.4 Fatoração QR Utilizando Tranformações de Givens
Seja a matriz A   mn , utilizando transformações ortoganais, chega-se a
decomposição:
A  QR
Onde:
Q   mm é ortogonal.
R   mn é triangular superior.
Supondo:
 c s
Q

 s c 
Como Q é ortogonal:
c  s   c s  1 0
QT Q  



 s c   s c  0 1
Portanto:
c2  s2  1
Determinação de c e s:
3
Tem-se:
A  QR
 a11
a
 21
a12   c s  r11


a 22   s c   0
r12 
r22 
Pré-multiplicando esta equação por Q T , chega-se a:
c  s   a11 a12  r11 r12 


 s c   a

  21 a 22   0 r22 
Desta expressão, tem-se uma nova equação:
sa11  ca21  0
Tem-se o sistema de equações:
sa11  ca 21  0
c2  s2 1
Resultando em:
Se a 21  0  c 
 a11
s e s 
a 21
Se a11  0  c 
 a 21
s e s 
a11
a 21
2
2
a11
 a 21
a11
2
2
a11
 a 21
Os elementos de R são determinados por:
r11
0

r12  ca11  sa 21

r22  
0
Algoritmo
c  s  a  r 
 s c   b   0

    
Function [c,s]=givens(a,b)
if b  0
4
ca12  sa 22 
sa12  ca 22 
c  1;
s  0;
else
if b  a

s
a
;
b
1
1
2
;
c  s
else
b

;
a
1
c
;
2
1
s  c
end
end
Exemplo:
 a11
a
A   21
 a31

a 41
a12
a 22
a32
a 42
a13 
a 23 
a33 

a 43 
a (1)
 11

T
A (1)  Q21
A 0
 a31
 a 41
c
a11
2
2
a11
 a 21
s
(1)
a12
(1)
a 22
a 32
a 42
(1)
a13 
c  s

s c
(1) 
a 23
T

onde:
Q

21 0

0
a33 

0 0
a 43 
 a 21
c
a11
Mudam os elementos das linhas 1 e 2 da matriz A:
5
0
0
1
0
0
0
0

1
(1)
a11  ca11  sa 21
(1)
a12  ca12  sa 22
(1)
a13  ca13  sa 23
(1)
a 22  sa12  ca 22
(1)
a 23  sa13  ca 23
 a ( 2)
 11
 0
T
A ( 2)  Q21
A
 0
a
 41
c
a11
s
2
2
a11
 a31
( 2)
a12
(1)
a 22
( 2)
a 32
a 42
( 2)
a13 
c

0
(1)
a 23 
T
onde: Q21  
( 2) 
s
a 33 

0
a 43 
 a31
c
a11
Mudam os elementos das linhas 1 e 3 da matriz A:
( 2)
a11  ca11  sa 31
( 2)
a12  ca12  sa 32
( 2)
a13  ca13  sa 33
( 2)
a32  sa12  ca32
( 2)
a33  sa13  ca33
O processo continua até a triangularização:
a (3)
 11
 0
A ( 6)  
 0
 0

(3)
a12
( 5)
a 22
0
0
(3)
a13 

( 5)
a 23 
( 6) 
a 33 
0 
T T T T T T
R  Q43
Q42 Q32 Q41 Q31 Q21 A
A  Q21 Q31 Q41 Q32 Q42 Q43 R  QR
Exemplo Numérico:
6
0 s
1 0
0 c
0 0
0
0
0

1
 2 3
A  5 4
8 9
A=
2
5
8
3
4
9
Qtransp =
-0.3714 -0.9285
0
0.9285 -0.3714
0
0
0 1.0000
A=
-5.3852 -4.8281
0.0000 1.2999
8.0000 9.0000
Qtransp =
0.5584
0 -0.8296
0 1.0000
0
0.8296
0 0.5584
A=
-9.6437 -10.1621
0.0000 1.2999
0 1.0206
Qtransp =
1.0000
0
0
0 0.7865 0.6175
0 -0.6175 0.7865
7
A=
-9.6437 -10.1621
0.0000 1.6526
0.0000
0
Q=
-0.2074 0.5400 -0.8157
-0.5185 -0.7678 -0.3765
-0.8296 0.3448 0.4392
Programa de Decomposição QR Utilizando Transformadas de Givens
function givens
m=input('Entre com o Número de Linhas: ');
n=input('Entre com o Número de Colunas: ');
load datagivens;
% A matriz de coeficientes A deve se salva pela tela no arquivo
% datagivens,por meio do comando "save datagivens A .
disp('Matriz de Coeficientes')
A
Q=eye(m,m);
for i=1:n-1
for j=i+1:m
if A(j,i)~=0
[c,s]=givens(A(i,i),A(j,i));
for l=1:n
qq=A(i,l);
A(i,l)=c*qq-s*A(j,l);
A(j,l)=s*qq+c*A(j,l);
end
for l=1:m
qq1=Q(l,i);
qq2=Q(l,j);
Q(l,i)=c*qq1-s*qq2;
Q(l,j)=s*qq1+c*qq2;
end
end
end
end
for l=n+1:m
if A(l,n)~=0
[c,s]=givens(A(n,n),A(l,n));
for k=1:n
qq=A(n,k);
A(n,k)=c*A(n,k)-s*A(l,k);
A(l,k)=s*qq+c*A(l,k);
end
for k=1:m
8
qq1=Q(k,n);
qq2=Q(k,l);
Q(k,n)=c*qq1-s*qq2;
Q(k,l)=s*qq1+c*qq2;
end
end
end
disp('Matriz Triangular Superior na Dimensão do Range e Zeros na
Dimensão do Subespaço Zero')
A
disp('Matriz de Coeficientes')
Q
function [c,s]=givens(a,b)
if b==0
c=1;
s=0;
else
if abs(b)>abs(a)
t=-a/b;
s=1/sqrt(1+t^2);
c=s*t;
else
t=-b/a;
c=1/sqrt(1+t^2);
s=c*t;
end
end
2.8.5 Solução de Sistemas Lineares Utilizando Decomposição QR
Ax  b
QR x  b
R x  QT b
Exemplo: Solucionar o sistema linear utilizando transformações ortogonais e eliminação de
Gauss:
10 x1  x 2  11
3x1  0.3x 2  3.3
Observe que a matriz de coeficientes é singular.
A=
10.0000 1.0000
3.0000 0.3000
9
Vetor Independente
b=
11.0000
3.3000
Warning: Divide by zero.
> In C:\MATLABR11\work\ortosystem.m at line 32
Matriz Triangularizada por Meio de Transformações de Givens
A=
10.4403 1.0440
0
0
Vetor Solução
b=
Inf
-Inf
Solução Obtida pelo Comando x=A\b
Warning: Matrix is close to singular or badly scaled.
Results may be inaccurate. RCOND = 4.629787e-018.
> In C:\MATLABR11\work\ortosystem.m at line 40
x=
-0.5000
16.0000
Programa para Solução de Sistemas Lineares Utilizando Transformadas de Givens
function givens
n=input('Entre com Dimensão do Sistema: ');
load datasystem;
% A matriz de coeficientes A e vetor independente b
% devem ser salvos pela tela no arquivo datasystem,
% por meio do comando "save datasystem A b.
disp('Matriz de Coeficientes')
A
disp('Vetor Independente')
b
for i=1:n-1
for j=i+1:n
10
if A(j,i)~=0
[c,s]=givens(A(i,i),A(j,i));
for l=1:n
qq=A(i,l);
A(i,l)=c*qq-s*A(j,l);
A(j,l)=s*qq+c*A(j,l);
end
b1=b(i);
b2=b(j);
b(i)=c*b1-s*b2;
b(j)=s*b1+c*b2;
end
end
end
for j=n:-1:1
soma=0;
for k=j+1:n
soma=soma+A(j,k)*b(k);
end
b(j)=(1/A(j,j))*(b(j)-soma);
end
disp('Matriz Triangularizada por Meio de Transformações de Givens')
A
disp('Vetor Solução')
b
load datasystem
disp('Solução Obtida pelo Comando x=A\b')
x=A\b
function [c,s]=givens(a,b)
if b==0
c=1;
s=0;
else
if abs(b)>abs(a)
t=-a/b;
s=1/sqrt(1+t^2);
c=s*t;
else
t=-b/a;
c=1/sqrt(1+t^2);
s=c*t;
end
end
11
Download