Sunteți pe pagina 1din 20

116

Grupo : Denise Ramos; Elaine Makyama; Fabricio Cazzaniga; Jordana Ayer; Juliana Rios;
Mariana Albertini.
Captulo 4. Estimao de Erros e
Refinamento Iterativo

Se x uma aproximao para a soluo x de Ax = b e o vetor residual r = b - Ax
tem a propriedade de r pequeno, nem sempre x x ser pequeno.
Exemplo 1:
O sistema linear Ax = b dado por

1 2
10001 2
1
2
3
30001 . .

(
=

(
x
x

tem uma nica soluo x = (1,1)
1
. Uma aproximao ruim x = (3,0)
1
tem o vetor residual
r = b - Ax =
3
30001
1 2
10001 2
3
0
0
0 0002 . . .

(
=

(
,
assim r

= 0 0002 . . Embora a norma do vetor residual seja pequena, a aproximao


x =(3,0) no boa, de fato x x =

2 .
A dificuldade neste exemplo explicada notando que a soluo do sistema
representa a interseo das retas
l1: x
1
+ 2x
2
= 3
l2: 1.0001x
1
+ 2x
2
= 3.0001.
O ponto (3,0) est em l1 e as retas so quase paralelas. Isto implica que (3,0)
tambm est perto da reta l2 mesmo que difira significantemente do ponto de interseo
(1,1).



117


Figura 1:
Neste exemplo, podamos esperar que a aproximao fosse precisa j que as retas
so quase coincidentes.
Geralmente, no podemos confiar na geometria do sistema para dar uma
indicao de quando os problemas podem ocorrer, no entanto, obtemos esta informao
considerando a norma da matriz e sua inversa.
4.1. Teorema 1
Suponha que x uma aproximao da soluo de Ax = b, A uma matriz no
singular, e R o vetor residual de x . Ento para qualquer norma natural,
x x r A
1

e
(1)
x x
x
A A
r
b

1
, com x 0 e b 0.
PROVA:
Sendo r = b - Ax = Ax - Ax e A no singular, x - x = A
-1
r e exerccio 6 da
seo 7.2 implicam que



118
x x A r A r =
1 1

e ainda, se b = Ax, temos b A x , e

x x
x
A A
b
r

1
.
A inequao do teorema 1 implica que a quantidade A e A A
1

providenciam uma indicao de uma conexo entre o vetor residual e a preciso da
aproximao. Em geral, o erro relativo
x x
x

de maior interesse e, pela inequao (1) ,


este erro limitado pelo produto de A A
1
com o resduo relativo para esta aproximao,
r
b
. Qualquer norma conveniente pode ser usada para esta aproximao; a nica restrio
que isto usado em toda parte.

4.1.1. Definio 1
Norma infinita de um vetor :
v max

= vi onde vi v e i =1, ..., n ,


Norma infinita de uma matriz :
A max

=

aij onde j = 0,..., m
i =1
n
,






119
4.1.2. Definio 2
O nmero condicional de uma matriz no singular A relativa forma natural
K(A) = A A
1

Com esta notao, e as inequaes do teorema 1 tornam-se
x x K A
r
A
( )
e

x x
x
K A
r
b

( ) .
Para qualquer matriz no singular A e norma natural ,
1
1 1
= = =

I A A A A K A ( ) .
A matriz A bem-comportada (matriz bem-condicionada) se K(A) prxima a
um e no bem-comportada (mal-condicionada), quando K(A) significantemente maior que
um. O comportamento nesta instncia refere-se segurana relativa que um vetor residual
implica numa soluo aproximadamente precisa.

Exemplo 2:
Uma matriz para o sistema considerado no exemplo 1 foi
A =
1 2
10001 2 .

(
,
onde A

= 30001 . . Esta norma no poderia ser considerada grande. No entanto,


A

(
1
10000 10000
50005 5000 .
, ento A

=
1
20000,



120
e, para a norma infinita , K(A) = (20000)(3.0001) = 60002. O tamanho do nmero
condicional para este exemplo nos impediria de fazer rpidas decises sobre preciso
baseadas no resduo de uma aproximao.

4.2. Nmero Condicional
Apesar de na teoria o nmero condicional de uma matriz depender totalmente das
normas da matriz e de sua inversa, na prtica, o clculo da inversa objeto do erro de
arredondamento e dependente da preciso com cada clculo realizado. Se as operaes
envolvem aritmtica com t dgitos significativos de preciso, o nmero condicional
aproximado da matriz A a norma da matriz vezes a norma da aproximao para a inversa
de A, que obtida usando dgito_t aritmtico. De fato, este nmero condicional tambm
depende do mtodo usado para calcular a inversa de A.
Assumindo que a soluo aproximada de um sistema linear Ax = b est sendo
determinada usando dgito_t aritmtico e eliminao Gaussiana, pode ser mostrado que o
vetor residual r para a aproximao x tem a propriedade
(2) r A x
t


10 .
Para esta aproximao, uma estimativa para o nmero condicional efetivo no
dgito_t aritmtico pode ser obtido sem ter que inverter a matriz A. Na verdade, a
aproximao assume que todas as operaes necessrias para determinar o residual so feitas
em dupla preciso aritmtica (que dgito_2t). Esta tcnica no aumenta muito o esforo
computacional e elimina muitas perdas de preciso envolvidas com subtrao de nmeros
aproximadamente iguais que ocorrem no clculo de residual.
A aproximao para o dgito_t nmero condicional K(A) vem da considerao
do sistema linear.



121
Ay = r.
A soluo deste sistema pode ser facilmente aproximada, desde que os
multiplicadores para o mtodo de eliminao Gaussiana j foram calculados. Na verdade y ,
a soluo aproximada de Ay = r satisfaz
(3) y A r A b Ax A b A Ax x x = = =
1 1 1 1
( ) ;
ento y uma estimativa do erro na aproximao da soluo do sistema original. A equao
(2) implica que

( )
y x x A r A r A A A x x K A
t
= =
1 1 1 1
10 ( ) .
Isto d a aproximao para o nmero condicional envolvida com a soluo do
sistema Ax = b usando a eliminao Gaussiana e o tipo do dgito_t da aritmtica descrito
(4) K A
y
x
t
( ) = 10 .
Exemplo 3:
O sistema linear dado por

33330 15920 10 333
2 2220 16 710 9 6120
15611 51791 16852
1
2
3
15913
28544
8 4254
. .
. . .
. . .
.
.

(
(
(

(
(
(
=

(
(
(
x
x
x

tem a soluo exata x=(1,1,1)
t
.
Usando a eliminao Gaussiana e dgito_5 de arredondamento aritmtico leva
sucessivamente s matrizes de argumento

33330 15920 10 333 15913
0 10596 16501 10580
0 74514 65250 7444 9
. .
. . .

(
(
(


e



122

33330 15920 10 333 15913
0 10596 16501 10580
0 0 50790 4 7000
. .
. .

(
(
(


A soluo aproximada para o sistema x = (1.2001, 0.99991, 0.92538)
t
.
O vetor residual correspondendo a x computado na dupla preciso para ser
r = b - Ax
=
15913
28544
8 4254
33330 15920 10 333
2 2220 16 710 9 6120
15611 51791 16852
12001
0 99991
0 92538
0 00518
0 27413
018616
.
.
. .
. . .
. . .
.
.
.
.
.
.

(
(
(

(
(
(

(
(
(
=

(
(
(
;
ento r

= 0 27413 . .

A estimativa para o nmero condicional dado na discusso anterior obtida pela
primeira soluo do sistema Ay = r para y :


33330 15920 10 333
2 2220 16 710 9 6120
15611 51791 16852
1
2
3
0 00518
0 27413
018616
. .
. . .
. . .
.
.
.

(
(
(

(
(
(
=

(
(
(
y
y
y
.

Isto implica que y = (-0.20008, 8.9987*10
-5
, 0.074607)
t
. Usando a estimativa na
Equao (4), temos

(5) K A
y
x
( )
( . )
.
= =

10
10 0 20008
12001
16672
5
5
.




123
Para determinar a soluo exata do nmero condicional de A, devemos construir
A
-1
. Usando dgito_5 de arredondamento aritmtico para os clculos temos a aproximao:

A

(
(
(
1
4 1 1
5 4 4
5 1 1
11701 10 14983 10 85416 10
6 2782 10 12124 10 30662 10
8 6631 10 13846 10 19689 10
. * . * . *
. * . * . *
. * . * . *
,

o teorema 7.10 implica que A


= =
1
10041 15934 . e A .

Como consequncia, a matriz A mal-condicionada tem

K A ( ) ( . )( ) = = 10041 15934 15999 .

A estimativa em (5) fechado para K(A) e requer consideravelmente menos
esforo computacional.
Desde que a soluo real x(1, 1, 1)
t
conhecido para este sistema, podemos
calcular ambos
x x
x
= =

0 2001
0 2001
1
0 2001 .
.
. e
x - x
.

Os limites de erro dados no teorema (1) para esses valores so


( )( )
x x K A
r
A
= =

( )
.
.
15999 0 27413
15934
0 27525



124
e

( )( )
x x
x
K A
r
b

= =

( )
.
.
15999 0 27413
15913
0 27561.


Na equao (3), usamos a estimativa y x x onde y a soluo aproximada
para o sistema Ay = r. Em geral, x + y uma aproximao mais precisa para a soluo do
sistema linear Ax = b que a aproximao original x . O mtodo usando esta suposio
chamada refinamento iterativo, ou melhoramento iterativo, e consiste de iteraes realizadas
no sistema no qual o lado direito o vetor residual para aproximaes sucessivas at que
uma preciso satisfatria resulte.

Se o processo aplicado usando dgito_t aritmtico e se K A
q

( ) 10 , ento
depois de K iteraes do refinamento iterativo a soluo tem aproximao do menor t e K (t -
q) dgitos corretos. Se o sistema bem-condicionado, uma ou duas iteraes indicar que a
soluo precisa. H uma possibilidade de crescimento significante no sistema mal-
condicionado que K
t

)10 . Naquela situao, a preciso crescida poder ser usada para os


clculos.
4.3. Algoritmo
INPUT: O nmero de equaes(n), as entradas a
ij
, 1 i, j n da matriz A, as
entradas b
i
, 1 i n de B; o nmero mximo de iteraes N; a tolerncia TOL; o nmero de
dgitos de preciso t.




125
OUTPUT: a aproximao xx=(xx
1
,..., xx
n
)' ou a mensagem que o nmero de
iteraes foi excedida e uma aproximao COND para K

(A).

Passo 0: resolver o sistema Ax = b para x
1
,...,x
n
pela eliminao Gaussiana
salvando os multiplicadores m
ij
, j = i+1,i+2,...,n, e i=1,2,...,n-1 e trocas de filas.
Passo 1: K = 1.

Passo 2: enquanto (N K) faa os passos 3 - 8.

Passo 3: para i = 1,2,...,n (Calcule r.)
r
i
= b
i
-
j
x
n
j
=1
a
ij

Passo 4: resolver o sistema linear Ay = r usando eliminao
Gaussiana com a mesma que no passo 0.
Passo 5: para i = 1,2,..., n faa xx
i
= x
i
+ y
i
.
se k=1 ento COND=
y
xx
t

10 .
Passo 6: se x xx

< TOL ento


OUTPUT (xx);
OUTPUT (COND);
STOP. (procedimento terminado com sucesso)
Passo 7: k = k+1.
Passo 8: para i = 1,2, ..., n faa x
i
=xx
i
.




126
Passo 9: OUTPUT ('Mximo nmero de iteraes foi excedido');
OUTPUT (COND);
STOP. (procedimento terminado sem sucesso)

OBS: Se o dgito-t aritmtico for usado, uma condio de parada recomendada para o
procedimento no passo 6 fazer iteraes at y
i
k t ( )


10 , para cada i = 1,2,...,n.
Exemplo 4:
No exemplo 3 achamos a aproximao para o problema que tem sido
considerado, usando dgito_5 aritmtico e eliminao Gaussiana, para ser
x
t
( )
( . , . , . )
1
12001 0 99991 0 92538 =
e a soluo para Ay = r
(1)
para se
y
t
( )
( . , . * , . )
1
5
0 20008 8 9987 10 0 074607 =

,
Pelo passo 5 do algoritmo, isto implica que
x x y
t
( ) ( ) ( )
( . , . , . )
2 1 1
10000 10000 0 99999 = + =
e o erro real nesta aproximao
x x =

( )
*
2
5
1 10 .
Usando a sugerida tcnica de parada para o algoritmo, computamos
r b Ax
( )
( )
2
2
= e resolvemos o sistema Ay
(2)
= r
(2)
, que d
y
t
( )
( . * , . * , . * )
2
9 10 5
15002 10 2 0951 10 10000 10 =

.
Desde que y
( ) 2
5
10

, conclumos que
x x y
t
( ) ( ) ( )
( . , . , . )
3 2 2
10000 10000 10000 = + =



127
preciso.
Atravs desta seo tem sido assumido que no sistema linear Ax = b, A e b pode
ser representado exatamente. Realisticamente, as entradas a
ij
e b
j
poder ser alterada ou
perturbada por muitos a e b
ij j
, causando um sistema linear
(A + A)x = b + b
para ser resolvido no lugar de Ax = b. Normalmente, se A e b so pequenos (na ordem
de 10
-t
, o dgito_t aritmtico pode produzir uma soluo x para cada x x
correspondentemente pequeno. No entanto, no caso de um sistema mal-condicionado, vimos
que mesmo se A e b so representados exatamente, erros de arredondamento podem causar
x x grande. O seguinte teorema relata as perturbaes dos sistemas lineares para o
nmero condicional de uma matriz.
4.4. Teorema 2
Suponha que A no singular e A
A
(

1
1

A soluo x para (A + A) x = b + b aproxima a soluo x de Ax = b com erro
estima
(6)
x x
x
K A
K A
A
A
b
b
A
A

|
\

|
.
|
+
|
\

|
.
|
( )
( ) 1




A estimativa na desigualdade (6) afirma que se a matriz A bem-condicionada
ento pequenas mudanas em A e b produzem correspondentemente pequenas mudanas na



128
soluo x. Por outro lado, se A mal-condicionado, ento pequenas mudanas em A e b
podem produzir grandes mudanas em x.
O teorema independente do procedimento numrico particular usado para
resolver Ax = b. Isto pode ser mostrado, por meio da anlise do erro atrasado de Wilkinson,
que se a eliminao Gaussiana com pivoteamento usada para resolver Ax = b no dgito_t
aritmtico, a soluo numrica x a soluo real do sistema linear
( ) A dA b, onde dA f(n)10 max
i, j,k
a
1 t
ij
(k)
+ =

.
Wilkinson achou na prtica que f(n)n e, na pior das hipteses,
f n n n ( ) . ( ) + 101 3
3 2
.
4.5. Programa
//Objetivo do programa : Encontrar a aproximacao xx = (xx1,...,xxn) ou a
// mensagem de que o numero de iteracoes foi excedido
// e uma aproximacao COND para K(A)
// O programa foi desenvolvido em Linguagem C

//Dificuldades : 1)Implementar a resolucao do sistema Ay = r, usando o metodo
// de eliminacao de Gauss, devido ao numero de iteracoes;
// 2)Implementar o calculo do maximo valor absoluto dos vetores
// y, xx e do vetor denominado "sb", que e a subtracao do vetor
// xx de x.


#include <stdio.h>
#include <conio.h>



129
#include <math.h>
#include <stdlib.h>

#ifdef __cplusplus

double max (double value1, double value2);

double max(double value1,double value2)
{
return ( (value1 > value2) ? value1 : value2);
}

#endif

void gauss(); //Metodo de eliminacao de gauss
static char temp[10];
double A[11][11];
double X,Y,XX,SB,COND,TOL,B[11],xx[11],x[11],y[11],r[11],sb[11];
int aux,i,j,n,t,s,k,K,N;

//programa principal
void main()
{
int i,j;
clrscr();



130
printf ("Digite a ordem n da matriz quadrada A (max. 10): ");
gets(temp);
printf ("\n\n");
n = atoi(temp);
for (i=1; i<=n;i++)
{
for (j=1; j<=n; j++)
{
printf ("Entre com valor de A[%d][%d]==> ",i,j);
gets (temp);
A[i][j]=atof(temp);
}
printf ("Entre com o valor de b[%d]===> ",i);
gets (temp);
B[i]=atof(temp);
}
printf ("Entre com o numero de digitos de precisao t:");
scanf ("%d",&t);
printf ("Entre com o numero maximo de iteracoes:");
scanf ("%d",&N);
printf ("Entre com a tolerancia:");
scanf ("%d",&TOL);
gauss(); //para resolver o sistema Ax = b
K=1;
//faz todo esse procedimento enquanto numero de iteracoes for maior ou igual a K



131
do{
for (i=1;i<=n;i++) //calculo de r
{
s=0;
for (j=1;j<=n;j++) s = s + (A[i][j]*x[j]);
r[i] = B[i] - s;
}
aux = 1; //variavel de controle
gauss(); //para resolver Ay=r
for (i=1;i<=n;i++) xx[i]=x[i]+y[i]; //calculo da aproximacao xx
if (K==1)
{
Y = y[1];
XX = xx[1];
for (j=1;j<=n;j++)
{
sb[j] = x[j] - xx[j]; //subtrai xx de x
Y = max(abs(Y),abs(y[j+1])); //pega o maximo valor, em modulo, do vetor y
XX = max(abs(XX),abs(xx[j+1])); //pega o maximo valor, em modulo, de xx
}
COND = (Y/XX)*(pow(10,t)); //calcula o valor da aproximacao COND para K(A)
}
SB = sb[1];
for (j=1;j<=n;j++)
SB = max(abs(SB),abs(sb[j+1]));



132
//calcula o maximo valor, em modulo, da subtracao x - xx
if (SB < TOL) //se tal valor for menor que a tolerancia,
{ //retorna o valor da aproximacao xx e da aproximacao COND para K(A)
clrscr();
printf ("Os valores de xx sao: \n");
for (j=1; j<=n; j++)
{
printf ("\nxx[%d]= %.4f",j,xx[j]);
}
printf("\nO valor de COND e %d. ",&COND);
getchar();
}
K++; //incrementa K
for (j=1;j<=n;j++) x[j]=xx[j];
}while(N>=K);
if (SB >= TOL) //se tal valor for maior que a tolerancia,
{ //retorna mensagem de que numero de iteracoes foi excedido e
clrscr(); //o valor da aproximacao COND para K(A)
printf("\nMaximo numero de iteracoes foi excedido!");
printf("\nO valor de COND e %d. ",&COND);
getchar();
}
}





133
//resolve o sistema Ax=b e Ay=r, pelo metodo de eliminacao de Gauss
void gauss()
{
int l;
double m;
for (k=1;k<=n-1;k++)
{
for (i=k+1;i<=n;i++)
{
m=A[i][k]/A[k][k];
A[i][k]=0;
for (j=k+1;j<=n;j++)
{
A[i][j]=A[i][j]-(m*A[k][j]);
}
if (aux==1) r[i]=r[i]-m*r[k]; //se for o sistema Ay=r
else B[i]=B[i]-m*B[k]; //se for o sistema Ax=b
}
}
if (aux==1) //se for o sistema Ay=r
{
y[n]=r[n]/A[n][n];
for (l=n-1;l>=1;l--)
{
y[l]=0;



134
for (j=l+1;j<=n;j++)
{
y[l]=y[l]+A[l][j]*y[j];
}
y[l]=(r[l]-y[l])/A[l][l];
}
}
else //se for o sistema Ax=b
{
x[n]=B[n]/A[n][n];
for (l=n-1;l>=1;l--)
{
x[l]=0;
for (j=l+1;j<=n;j++)
{
x[l]=x[l]+A[l][j]*x[j];
}
x[l]=(B[l]-x[l])/A[l][l];
}
}
}



135

S-ar putea să vă placă și