Notas breves de Teoria de Erros -...

24
Notas breves de Teoria de Erros Filomena Teodoro e João Soares 1/3/2004 1

Transcript of Notas breves de Teoria de Erros -...

Notas breves de Teoria de Erros

Filomena Teodoro e João Soares

1/3/2004

1

1 Introdução

1.1 Sistemas de representação numérica

Em muitas áreas tradicionais da Matemática como, por exemplo, a Análise,não é absolutamente necessário recorrer a uma descrição numérica das enti-dades que são manipuladas. Por exemplo, é perfeitamente legítimo escreverx =

√2 ou y = 2π

√5 e aceitar esta descrição destes números. Mas, quando

pretendemos concretizar cálculos, de modo a obtermos respostas a um prob-lema concreto, estas representações não são adequadas, pois o cálculo emquestão é efectuado em máquinas que podem apenas manipular um númerofinito de símbolos e realizar um número finito de operações.

Podemos então definir formalmente a base numérica b, onde b ∈ N≥2,(porque é que o caso b = 1 é excluído?) como sendo um conjunto de símbolosDb = {d0, ..., db−1}, tais que, dado x ∈ R, temos a representação:

x = ±(

N∑n=−∞

dknbn

), dkn ∈ Db

onde N é o menor inteiro tal que 10N+1 ≥ x. Os elementos do conjunto Db

dizem-se os dígitos da base b. Se escrevermos a expressão acima na forma

x = ±(

N∑n=0

dknbn +

∞∑n=1

dknb−n

)(1)

o primeiro e segundo termos são denominados, respectivamente, a parte in-teira e a parte fraccionária de x.

Exemplos:

(i) b = 10 (base decimal). Temos Db = {0, 1, ..., 9} e, por exemplo, as raízesde x2 − 100, são representadas nesta base por x = 10 e x = −10.

(ii) b = 2 (base binária). Temos Db = {0, 1} e, neste caso x = 8 (na base10) é representado por x = 1000.

Estes exemplos mostram que é necessário ter cuidado quando são uti-lizadas simultaneamente bases distintas, por isso, é necessário adoptar uma

2

notação que torne explícita a base na qual um determinado número estáa ser representado. Assim, no exemplo (2) acima escreve-se x = (8)10 ex = (1000)2.

É necessário também definir algoritmos que permitam converter a rep-resentação de x na base b1, (x)b1, calcular a representação correspondentenoutra base b2.

1.2 Conversão entre bases

Dado então x ∈ R e uma base b1, separa-se x nas partes inteira e fraccionária,tal como foram definidas acima, em (1):

x = (dN ...d0)b1 + (d−1...d−n...)b1

Note-se que a parte inteira de x tem, necessariamente, um número finitode dígitos, mas isto não tem que ocorrer com a parte fraccionária (porquê?).O método de conversão desta representação de x para outra base b2 é genéricomas, de momento, vamos restringir-nos ao caso particular b1 = 10 e b2 = 2.

i) Parte inteira. Seja x = 1026.4356, então (dN ...d0)10 = (1026)10, e di-vidindo sucessivamente por 2, obtemos:

1026 = 513× 2 + 0

513 = 256× 2 + 1

256 = 128× 2 + 0

128 = 64× 2 + 0

64 = 32× 2 + 0

32 = 16× 2 + 0

16 = 8× 2 + 0

8 = 4× 2 + 0

4 = 2× 2 + 0

2 = 1× 2 + 0

Note-se que, pelas propriedades da divisão inteira, os restos só podemser 0 ou 1. Mais, afirmamos que estes restos são exactamente os dígitos darepresentação da parte inteira de x na base 2:

(1026)10 = (10000000010)2

3

Para verificar esta afirmação, basta escrever:

(10000000010)2 =9∑

n=0

bn2n =

= 1× 210 + 0× 28 + · · ·+ 1× 21 + 0 =

= (1026)10

e notar que o resto da primeira divisão é simplesmente o último 0 da repre-sentação binária. O resto da segunda divisão é o 1 que vem a seguir, pois aprimeira divisão anulou o factor multiplicativo 21 e por aí adiante.

(ii) Relativamente à parte fraccionária, o processo é diferente. Primeiro,notemos que esta é sempre menor que 1, logo, multiplicando sucessi-vamente por 2 e conservando apenas a parte fraccionária do resultado,obtemos um número cuja parte inteira é 0 ou 1. Continuando com oexemplo acima:

0.4356× 2 = 0. 87120. 8712× 2 = 1. 74240. 7424× 2 = 1. 48480. 4848× 2 = 0. 96960. 9696× 2 = 1. 9392...

A sequência de {0, 1} gerada pela parte inteira dos resultados destasmultiplicações sucessivas é exactamente a representação, em base 2, daparte fraccionária do nosso número original.

O resultado final é então:

(1026.4356)10 = (10000000010.01101...)2

Note-se que, na base 2, a parte fraccionária tem um número infinito de dígitosnão-nulos, o que não acontece com a representação em base 10.

Para verificarmos que este algoritmo funciona, basta ver que a represen-tação da parte fraccionária em base 2 é:

∞∑n=1

dn2n

=d12

+d222

+d323

+ ...

4

e que a primeira multiplicação por 2 isola o dígito d1, a segunda o dígito d2,etc.

Quanto à conversão da base 2 para a base 10, podemos utilizar directa-mente a definição, pois a representação em qualquer base é escrita na formade um somatório ou série e podemos calcular (pelo menos nalguns casos) arespectiva soma. Seja x = (1001.1111)2, então temos:

x = 23 + 1 +1

2+

1

22+

1

23+

1

24= (9.9375)10

Finalmente, notemos que estes algoritmos são válidos para a conversãoentre quaisquer bases, pois dependem apenas de propriedades elementares damultiplicação e divisão inteira. Por isto, não vamos fazer aqui a demonstraçãono caso geral, mas apenas dar alguns exemplos:

Exemplos:Conversão para a base decimal.(a) Base 2 → Base 10:

(101101)2 = 1× 25 + 0× 24 + 1× 23 + 1× 22 + 0× 21 + 1× 20 =

= (45)10

(b) Base 8 → Base 10:

(427)8 = 4× 82 + 2× 81 + 7× 80 =

= (279)10

(c) Base 16 → Base 101:

(1A0F )16 = 1× 163 + 10× 162 + 0× 161 + 15× 160 =

= (6671)10

Neste exemplo, vemos a razão de ser da notação (...)b, que temos vindoa utilizar. Por exemplo, o conjunto de símbolos 427, sem mais nenhumaindicação, pode ser, em função da base, a representação de vários númerosdistintos.

1A base 16, dita hexadecimal, tem 15 dígitos. Os dez primeiros são representados pelosdígitos decimais {0, ..., 9} e os restantes seis, pelas letras maiúsculas {A,B,C,D,E, F}.

5

Note-se também que, neste exemplo, apenas estão conversões da parteinteira. Se os números envolvidos tivessem parte fraccionária diferente dezero, esta teria que ser tratada separadamente, mas o processo é idêntico:

Exemplo:Converter (0.467)8 para a base decimal.Temos:

(0.467)8 = 4× 8−1 + 6× 8−2 + 7× 8−3 =

= (0.607421875)10

O problema inverso, ou seja, a conversão de um número em base 10 paraoutra base b, é resolvido, no caso da parte inteira, por divisões sucessivas porb e, para a parte fraccionária, por multiplicações sucessivas por b. Isto é umaconsequência das expressões de representação gerais, que foram enunciadasacima, e da unicidade dos restos na divisão inteira. Novamente, ilustramoso processo através de exemplos.

Exemplo:Converter (176)10 para as bases 2, 8 e 16.(a):

176 = 88× 2 + 0

88 = 44× 2 + 0

44 = 22× 2 + 0

22 = 11× 2 + 0

11 = 5× 2 + 1

5 = 2× 2 + 1

2 = 2× 1+ 0

Logo (176)10 = (10110000)2.(b):

176 = 22× 8 + 0

22 = 2× 8 + 6

Logo (176)10 = (260)8.(c):

176 = 11× 16 + 0

Logo (176)10 = (B0)16.

6

Para números com parte fraccionária não nula, temos:

Exemplo:Converter (0.625)10 para a base 8. Temos:

0.625× 8 = 5.0

Logo (0.625)10 = (0.5)8.Converter (0.1)10 para a base 2:

0.1× 2 = 0.20.2× 2 = 0.40.4× 2 = 0.80.8× 2 = 1.60.6× 2 = 1.20.2× 2 = 0.4...

Logo (0.1)10 = (0.00011 (0011))2.

Dada uma base b, será a representação de um número x relativamente aesta base, (x)b, única? Em geral, não. Mas os casos em que a unicidade falhapodem ser caracterizados muito precisamente.

Dada então uma base b, seja db = b−1 omaior dígito dessa base e consider-emos os números que, relativamente a b, têm parte fraccionária (0.dbdbdb...)b.Então, temos:

(0.dbdbdb...)b =∞∑n=1

dbb−n =

= db

(∞∑n=1

b−n

)= db

(1

b− 1

)=

= 1 = (1)b

Ou seja, (0.dbdbdb...)b = (1)b. Então, em vez de escrevermos, por exemplo,(3.99...)10, optamos pela representação finita (4)10. (Porque é que a repre-sentação de 1 é a mesma em qualquer base?)

7

1.3 Representação em vírgula flutuante

Na secção anterior, foi demonstrado que qualquer número x ∈ R admite umarepresentação em termos dos dígitos de uma base b. Mas, para a implemen-tação de métodos computacionais, é necessário ir mais longe, dado que arepresentação de cada número tem que ser finita. Isto significa que existirãonúmeros que não podem ser representados exactamente no sistema adoptado.Por exemplo: √

2 = 1.41421356237...

é um número irracional, o que significa que a sua representação exacta emqualquer base inteira exige um número infinito de dígitos. Dado que, naprática, só podemos trabalhar com um número finito de dígitos, é necessáriorecorrer a uma aproximação de

√2.

Os sistemas de representação numérica computacional mais utilizadosno presente, dizem-se de vírgula flutuante e são definidos, para b ≥ 2 e|e| ≤ 10m − 1:

FP (b, n,m, ∗) = {x ∈ R : x = ± (0.d1...dn)b × be, di ∈ Db, d1 ≥ 1} (2)

isto é, o sistema FP (b, n,m, ∗) é o conjunto de todos os números da forma:

x = ± (0.d1...dn)b × be (3)

onde o parâmetro n indica o número de dígitos da parte fraccionária, oumantissa, de (3), m é o número máximo de dígitos do expoente e e ∗ indica otipo de arredondamento utilizado, que será definido mais adiante. A restriçãod1 ≥ 1 implica que o primeiro dígito imediatamente à direita do ponto deci-mal não pode ser zero. Os sistemas numéricos que obedecem a esta restrição,e que serão os considerados nestas notas, dizem-se normalizados.

Um ponto importante relativamente a (2) é que este conjunto é finito.Além disso, se x ∈ FP (b, n,m, ∗), x �= 0, então

b−1−em ≤ |x| ≤ (1− b−n

)bem (4)

onde em = 10m − 1 é o maior expoente atingível com m dígitos2.Fixado um sistema FP (b, n,m, ∗), e dado x ∈ R, x �= 0, podem ocorrer

três situações distintas:

2Por convenção, o expoente é sempre representado em base 10.

8

i) x ∈ FP (b, n,m, ∗).ii) |x| > (1− b−n) bem (overflow) ou |x| > b−1−em (underflow). Neste caso,

x está fora dos limites atingíveis do sistema e é necessário implementarprocedimentos correctivos para estas situações.

iii) |x| satisfaz (4), mas x � ∈FP (b, n,m, ∗). Neste caso, é necessário escolherx ∈ FP (b, n,m, ∗) de modo a que x seja uma boa aproximação de x.Esta escolha é feita através da função

fl : R → FP (b, n,m, ∗)

cuja definição precisa depende do processo de aproximação escolhido.

Dado que a escolha de uma função fl implica a existência de um errosempre que x � ∈FP (b, n,m, ∗), é necessário definir mais precisamente asmedidas de erro que vão ser utilizadas.

1.4 Erros absolutos e relativos

Dado x, os erros absoluto e relativo da aproximação x de x, são definidospor:

(i) εx = x− x é o erro absoluto de x.

(ii) δx =εxx

=x− x

x, x �= 0. é o erro relativo de x.

Uma definição alternativa do erro relativo é

x = x (1 + δx) (5)

As diferenças entre estas duas medidas de erro são ilustradas no exemploseguinte:

Sejam x = 0.6 (6), y = 0.006(6) e x = 0.666, y = 0.006 aproximações portruncatura a três casas decimais. Os erros absolutos são:

εx = εy = −0.0006 (6)

9

enquanto que os erros relativos são:

δx = −0.001

δy = −0.1

e este resultadomostra que, enquanto o erro absoluto é insensível à magnitudeda quantidade, o mesmo não se passa com o erro relativo.

Uma medida alternativa da qualidade de uma aproximação x, definidaem através destas medidas de erro, é o número de dígitos significativos, quesão definidos da seguinte forma: se |δx| satisfaz

|δx| ≤ 1

2b−n+1 (6)

para algum n ≥ 0, então x é uma aproximação de x com n algarismossignificativos.

É conveniente escrever esta definição em termos do erro absoluto εx. Paraisso, note-se que existe m ≥ 0 tal que bm ≤ x < bm+1e, sendo |εx| = |x| |δx|,obtem-se:

|εx| = |x| |δx| ≤ 1

2bm+1−n (7)

Uma justificação para as expressões (6), (7) acima é dada nos exemplosseguintes:

Exemplos:

i) Seja x = 0.25, uma aproximação de x. Sabendo que |εx| ≤ 0.5 × 10−2 =0.005, será esta aproximação de x ”fiável”? Se os dois dígitos de x àdireita do ponto decimal coincidirem com os dígitos correspondentes dex, então |εx| terá forçosamente que verificar:

|εx| < 0.009(9) = 0.01

então |εx| ≤ 0.005 < 0.01 e, por (7) x é uma representação de x com 2os dois dígitos significativos.

ii) Seja x = 29.2 e |εx| ≤ 0.5. Temos t = 2 e n = 2, logo x tem doisalgarismos significativos, que coincidem com os dois dígitos à esquerdado ponto decimal.

iii) Seja x = 0.005894 e |εx| ≤ 0.5×10−6. Temos t = −2 e n = 4, logo x tem4 algarismos significativos que, neste caso, são 5894. Note que, por (7),os zeros imediatamente à direita do ponto decimal não são algarismossignificativos.

10

1.5 Estimativas de erro em sistemas de vírgula flutu-

ante

A função de aproximação fl mais simples é denominada truncatura ou cortea n casas decimais: sempre que um número não possa ser representado ex-actamente no sistema, desprezam-se os dígitos à direita da posição n. Porexemplo, seja x = 10.256 e3 FP (10, 4, 2, T ). Para representar exactamenteeste número, a mantissa seria 0.10256, o que é impossivel, pois n = 4. A trun-catura de 010256 é 0.1025, logo a representação de 10.256 em FP (10, 4, 2, T )é:

x = fl (x) = 0.1025× 102

Apesar da simplicidade da truncatura, a aproximação mais utilizada é ochamado arredondamento simétrico, normalmente denotado por FP (b, n,m,A).Aqui, determina-se x ∈ FP (b, n,m,A) que minimiza |εx|. Considerando no-vamente o exemplo x = 0.10256 × 102, existem dois candidatos possíveisx1, x2 ∈ FP (10, 4, 2, T ):

x1 = 0.1025× 102

x2 = 0.1026× 102

com os erros |εx1| = 0.006 e |εx2 | = 0.004, logo x = fl (x) = 0.1026 × 102.Note-se que x1 coincide com a aproximação obtida por truncatura, e que oerro absoluto associado é mais elevado. Em geral, o erro introduzido pelatruncatura é dado, no pior caso, por:

|εx| = 0. 0...0︸︷︷︸n

9 (9)× 10e = 0. 0...0︸︷︷︸n−1

1× 10e = 10e−n

Note-se também que, em alguns casos, o arredondamento simétrico nãodetermina univocamente a aproximação fl (x), pois é possível que existamdois elementos de FP (b, n,m,A) equidistantes de x. Um caso típico é oseguinte: determinar a representação de 0.75 em FP (10, 1, 1, A).

Neste caso, os números 0.7, 0.8 ∈ FP (10, 1, 1, A) têm ambos o errode aproximação de 0.05, logo, qualquer um deles seria uma representaçãoaceitável de 0.75 e, para decidir a questão, temos de introduzir regras adi-cionais. Uma das mais utilizadas é a regra Round-to-even, que opta pela

3O T na definição do sistema é uma abreviatura de truncatura.

11

aproximação que deixa o último dígito da mantissa par4. Neste caso, teríamosfl (0.75) = 0.8.

No caso geral, os erros absolutos introduzidos pela truncatura e arredonda-mento são majorados por: ∣∣εTx ∣∣ ≤ be−n∣∣εAx ∣∣ ≤ 1

2be−n

E, para o erro relativo: ∣∣δTx ∣∣ ≤ b−n+1∣∣δAx ∣∣ ≤ 1

2b−n+1

O lado direito destas duas últimas desigualdades é uma característicaque mede a qualidade do sistema de vírgula flutuante adoptado, é denomi-nada unidade de arredondamento e designada por u. Da definição (5) de δx,obtemos um modelo para fl:

fl (x) = (1 + δx)x, |δx| ≤ u

1.6 Operações aritméticas em vírgula flutuante

Para um dado sistema de representação numérica, temos agora que definiras operações aritméticas elementares neste sistema. Qualquer que seja adefinição final, estas operações têm que ser compatíveis com as operaçõesaritméticas conhecidas, em particular, para números que são exactamenterepresentáveis no nosso sistema, estas têm que coincidir com as operaçõesaritméticas clássicas.

O problema é que, por exemplo, dados dois números x, y ∈ FP (b, n,m, ∗),pode acontecer que x + y /∈ FP (b, n,m, ∗). E esta afirmação é válida paraas outras operações aritmeticas.

A solução deste problema envolve uma aproximação (normalmente, amesma aproximação que é feita para a representação), logo, introduz maiserros, que têm de ser contabilizados para termos uma ideia de quão fiáveissão estas operações.

4Esta regra fundamenta-se na distribuição estatística dos erros de arredondamento, etende a evitar a acumulação de desvios sistemáticos sempre que um cálculo é repetidomuitas vezes.

12

Adefinição geral é a seguinte: dada uma operação aritmética� ∈ {+,−,×, /}e x, y ∈ FP (b, n,m, ∗), definimos:

fl (x)� fl (y) = fl (x� y)

Ou seja, dados dois números pertencentes ao sistema, primeiro calculamoso resultado da operação aritmética com os algoritmos habituais. Em geral,o resultado não está normalizado, nem vai pertencer ao sistema, por isso,normalizamos e voltamos a aplicar o processo de aproximação.

Exemplo:Calcular, em F (10, 4, 2, T ), x+ y, para x = 1.256879 e y = 0.985441.Temos x = 1.256 e y = 0.9854, logo z = x+ y = 0.1256+0.9854 = 1.111.

Então z = 0.1111.

2 Propagação de erros. Fórmula fundamen-

tal do cálculo de erros.

2.1 Fórmula fundamental do cálculo de erros:

Na secção anterior vimos a necessidade de, nos processos de cálculo, controlaros efeitos dos erros existentes nos valores numéricos (aproximados) que sãoutilizados na prática.

Por exemplo, na subtracção de dois números aproximadamente iguais,erros pequenos podem ser amplificados no resultado final, levando à perdade dígitos significativos.

Exemplo: sejam x = 67.5796 e y = 67.5722, ambos com seis dígitossignificativos. Então x − y = 0.0074, que tem apenas dois dígitos significa-tivos. Este é um exemplo típico do fenómeno de cancelamento subtractivo,que ocorre na subtracção de dois números com valores muito próximos.

Um problema importante no Cálculo Numérico é a quantificação de fenó-menos deste tipo. Qual é o factor de amplificação de erros de aproximação,para uma dada operação? Será que depende da forma como a operação éimplementada, ou seja, do algoritmo escolhido?. Qual é a contribuição parao erro no resultado que provém da própria operação? Neste capítulo, vai ser

13

dada uma introdução às técnicas e resultados que nos permitem responder aeste tipo de questões.

Até que seja dito o contrário, todas as funções são contínuas, com derivadascontínuas e definidas num intervalo I ⊂ R

n limitado e fechado.Seja então f (x), definida em [a, b]. Pretende-se calcular y = f (x), con-

hecendo apenas um valor aproximado, x, de x. O teorema de Lagrange5

garante a existência de um ponto c ∈ ]a, b[ tal que:

f ′ (c) =f (b)− f (a)

b− a

Escrevendo a = x e b = x+ h, temos

f (x+ h) = f (x) + f ′ (c)h

Se x fôr o valor exacto da quantidade e x = x+εx o seu valor aproximado,a expressão acima pode escrever-se na forma

εf(x) = f ′ (c) εx

Na maior parte dos casos práticos, não conhecemos o ponto c, por issocalculamos apenas um limite superior para o valor absoluto do erro:∣∣εf(x)∣∣ ≤ |f ′|M |εx|

onde |f ′|M = supy∈[x,x+h]

|f ′(y)|.Usualmente, f depende de várias variáveis, x1, ..., xn. A generalização da

expressão para n variáveis é

|εf | ≤n∑

i=1

∣∣∣∣ ∂f∂xi

∣∣∣∣M

|εxi|

onde os números∣∣∣ ∂f∂xi

∣∣∣M

são majorações do módulo das derivadas parciais

de f numa vizinhança de (x1, ..., xn). Antes de passarmos a um exemploconcreto, notemos que esta expressão fornece um limite superior para o erroabsoluto de y, na forma de uma soma ponderada dos erros cometidos em cadauma das variáveis xi. Esta expressão vai ser utilizada daqui para a frente,

5É assumido que f satisfaz todas as condições do teorema.

14

sempre que queiramos estimar o erro (absoluto) cometido no cálculo de umafunção. Pela sua importância, é normalmente chamada fórmula fundamentaldo cálculo de erros (absolutos).

Exemplo: calcular a precisão com que é medida a área de um círculode raio r = 1.25m, sendo π aproximado por π = 3.14. Todos os dígitos sãosignificativos.

Temos: |εr| ≤ 0.005m, |επ| ≤ 0.002 (porquê?) e A = πr2 = 4.90625m2.

Sendo∂A

∂r= 2πr e

∂A

∂π= r2, vem:

|εA| ≤∣∣∣∣∂A∂r

∣∣∣∣ |εr|+∣∣∣∣∂A∂π

∣∣∣∣ |επ| == |2πr|M |εr|+

∣∣r2∣∣M|επ|

Substituíndo valores (atenção aos valores utilizados nos factores de peso),temos:

|εA| ≤ |2× 3.142× 1.255| 0.005 + ∣∣1.2552∣∣ 0.002 = 0.04258215m2

De forma mais compacta, |εA| ≤ 0.05m2, ou seja, podemos garantir doisdígitos significativos neste cálculo da área.

Exemplo: calcular a área de uma coroa circular, definida por duascircunferências concêntricas de raios a e b, respectivamente. Sabemos quea = 5.0cm, com todos os dígitos significativos, b ∈ [2.0, 2.1]cm e o valoraproximado de π é o mesmo do exemplo anterior. Temos:

A = π(a2 − b2

)=

= 3.14× (5.02 − 2.052

)=

= 65.30915cm2

A estimativa do erro eA é dada por:

|εA| ≤∣∣∣∣∂A∂a

∣∣∣∣ |εa|+∣∣∣∣∂A∂b

∣∣∣∣ |εb|+∣∣∣∣∂A∂π

∣∣∣∣ |επ| == |−2πb|M |εa|+ |2πa|M |εb|+

∣∣a2 − b2∣∣M|επ|

Temos |εa| ≤ 0.05cm e |επ| ≤ 0.0016. Quanto à estimativa para |εb|, noteque b ∈ [2.0, 2.1], logo os piores casos são b + |εb| = 2.1 e b − |εb| = 2.0,donde tiramos b = 2.05 e |εb| = 0.05. Introduzindo estes valores na expressãoacima, obtemos |εb| ≤ 2.3cm2.

15

2.2 Algumas aplicações

Nesta secção, vamos calcular as estimativas do erro para as operações ari-tméticas elementares.

(1) Soma: y = x1 + x2. Temos:

|εx1+x2| ≤ |εx1

|+ |εx2 |

pois6∂y

∂xi= 1, i = 1, 2

(2) Subtracção: y = x1 − x2. Temos:

|εx1−x2| ≤ |εx1

|+ |εx2 |(Porquê? Compare com a adição.)(3) Produto: y = x1 × x2. Temos:

|εx1×x2| ≤ max {|x1| , |x2|} (|εx1

|+ |εx2|)

(4) Divisão: y =x1

x2. Temos:

∣∣∣εx1

x2

∣∣∣ ≤ max

{∣∣∣∣ 1x2

∣∣∣∣ ,∣∣∣∣x1

x22

∣∣∣∣}(|εx1 |+ |εx2 |)

Note que a propagação dos erros para a soma e a subtracção são dadaspelas mesmas expressões. Isto parece contradizer o exemplo dado no iní-cio deste capítulo, onde falámos do fenómeno de cancelamento subtractivo.Todavia, é preciso não esqueçer que, por enquanto, estamos apenas a falarde erros absolutos. Mais adiante, veremos que estes erros transportam ape-nas parte da informação necessária. Logo, não existe aqui nenhuma con-tradição. Como motivação para o uso desta medida de erro, considere oexemplo seguinte:

Exemplo:x = 2112.9, com |εx| ≤ 0.1. Podemos garantir que x ∈ [2112.8, 2113].Da mesma forma, dado y = 5.3 com |εy| ≤ 0.1, temos y ∈ [5.2, 5.4].

Os majorantes do erro (absoluto) de x e y são iguais. Nesta situação,o que é que podemos dizer acerca da precisão com que estes números estãorepresentados?

6Se y =∑n

i=1xi temos, por indução, |ey| ≤

∑n

i=1|exi

|.

16

Sem entrar em conta com a ordem de grandeza de cada um dos números,não podemos responder a esta questão. É neste sentido que dizemos que oerro absoluto não transporta toda a informação.

Neste exemplo concreto, é intuitivo dizer que a precisão de x é maiorque a de y, mas como é que podemos precisar esta intuição? Para isso, énecessário recorrer aos erros relativos.

2.3 Propagação de erros relativos:

O erro relativo é definido por7 δx =εxx

εxx. Voltando ao exemplo da secção

anterior, temos:

|δx| ≤ |εx||x| =

0.1

2112.9= 4. 7× 10−5

|δy| ≤ |εy||y| =

0.1

5.3= 0.02

Estes resultados tornam clara (e precisa) a diferença de precisão nos doiscasos.

Considere agora uma função y = f (x1, ..., xn), a fórmula fundamental doserros, deduzida atrás, é:

|εy| ≤n∑

i=1

∣∣∣∣ ∂f∂xi

∣∣∣∣M

|εxi|

Temos δy =εyy

=εy

f (x1, ..., xn)e δxi =

εxi

xi. Substituíndo, obtemos a

expressão:

|δy| ≤n∑

i=1

∣∣∣∣∣∣∣∣xi

∂f

∂xi

f (x1, ..., xn)

∣∣∣∣∣∣∣∣M

|δxi| =n∑

i=1

|pi| |δxi|

Esta expressão é análoga à fórmula fundamental para erros absolutos epodemos justificadamente chamá-la de fórmula fundamental para erros rela-

7Esta aproximação é normalmente utilizada para estimar o erro relativo, pois não temosconhecimento do valor exacto de x.

17

tivos. Os factores de peso pi

pi =xi

∂f

∂xi

f (x1, ..., xn)

são denominados números de condição (relativamente ás variáveis xi) e me-dem as contribuições dos erros relativos de cada uma destas variáveis noresultado final.

Voltemos ás operações aritméticas:

(i) Multiplicação: f (x, y) = xy. Os números de condição são px =x∂f∂x

xy=

xy

xy= 1 e py = 1. Então:

|δxy| ≤ |δx|+ |δy|

(ii) Divisão: f (x, y) =x

y. Temos px =

x∂f∂x

x/y= 1 e py = −1. Então:

∣∣δx|y∣∣ ≤ |δx|+ |δy|

(iii) Soma e subtracção: f (x, y) = x±y. Temos px =x

x± ye py = − y

x± y.

Então:

|δx±y| ≤ max

{∣∣∣∣ x

x± y

∣∣∣∣ ,∣∣∣∣ y

x± y

∣∣∣∣}(|δx|+ |δy|)

Note-se que, apesar da semelhança destas expressões, o comportamentoem termos de erros relativos da subtracção é distinto do da soma. Se xe y forem aproximadamente iguais, então os números de condicionamentoda subtracção podem ser muito elevados. Esta é uma das manifestaçõesdo fenómeno de cancelamento subtractivo, de que já falámos antes. Comoilustração, temos o seguinte exemplo:

Exemplo:Determinar o número de algarismos significativos do resultado de cada

uma das operações xy, x/y, x+ y e x− y, sabendo que x = 1010 e y = 1000(todos os algarismos são significativos).

18

Temos |εx| < 0.5 e |εy| < 0.5, logo |δx| = |εx|x

|εx|x

≤ 0.495 × 10−3 e

|δy| ≤ 0.5× 10−3. Utilizando as expressões deduzidas acima:

|δxy| ≤ |δx|+ |δy| = 0.995× 10−3∣∣δx/y∣∣ ≤ |δx|+ |δy| = 0.995× 10−3

Dado que xy = 1.010 × 106 e x/y = 1.010, temos |εxy| = |δxy| |xy| |δxy| |xy| ≤ 1.005× 103. Da mesma maneira, obtemos

∣∣εx/y∣∣ = ∣∣δx/y∣∣ |x/y| ∣∣δx/y∣∣ |x/y| ≤ 1.005×10−3. Então a multiplicação e divisão têm, pelo menos,3 dígitos significativos.

Para a soma e subtracção, temos:

|εx±y| ≤ |εx|+ |εy| ≤ 0.5 + 0.5 = 1

Sendo os resultados aproximados x+y = 2010 (3 algarismos significativos)e x− y = 10 (1 algarismo significativo).

Vamos agora determinar os números de condição de algumas funções co-muns, de modo desenvolver uma ideia melhor da informação dada por esteparâmetro.

(1) f (x) = xn, n ∈ [0,+∞[:

px =nx (x)n−1

xn= n

Assim, se f (x) =√x (n = 1/2), temos px = 1/2, enquanto que se

f (x) = x2, temos px = 2. Podemos dizer, informalmente, que, quanto maiorfôr o expoente n, maior será a amplificação dos erros relativos.

(2) f (x) = cosx. Temos:

px = −x sinx

cosx= x tg x

(3) f (x) = sinx. Temos:

px =x cosx

sinx= x cotg x

No caso (2), podemos dizer que o número de condicionamento é baixonos extremos e elevado nos zeros da função cosx. Para o caso (3), podemosfazer uma interpretação semelhante.

19

Antes de calcularmos o número de condicionamento para outras funç õesde interesse prático, vamos introduzir alguns termos utilizados para quali-ficar o comportamento numérico de uma função relativamente ao número decondicionamento.

Se |px (x0)| � 1, dizemos que a função é mal condicionada em x0. Navizinhança de x0, podemos esperar que pequenos erros em x sejam bastanteamplificados.

Se |px (x0)| � 1, dizemos que a função é bem condicionada em x0. Navizinhança de x0, podemos esperar que erros em x não se propaguem.

Assim, a funções do tipo f (x) = xn são bem condicionadas para n′s pe-quenos (tipicamente 1,2), mas o seu condicionamento piora para valores den elevados. Notemos também que o número de condicionamento é indepen-dente do ponto x. Isto não é verdade para a generalidade das funções, comopodemos ver nos casos seguintes:

(4) f (x) = expx. Temos:

px =x expx

expx= x

(5) f (x) = log x. Temos:

px =x 1x

log x=

1

log x

Nestes dois casos, vemos que o condicionamento de expx piora à medidaque x → +∞ e que, apesar de ser bem condicionada para valores grandes dex, a função log x é muito mal condicionada para x = 1.

Intuitivamente, podemos pensar que o condicionamento está relacionadocom o comportamento local da função, quanto mais elevada (em valor abso-luto) fôr a sua derivada, maior será o efeito dos erros nas variáveis (este éo significado da fórmula fundamental para erros absolutos). Mas esta inter-pretação não pode ser levada à letra, pois pense-se no caso da função log xacima. Numa vizinhança suficientemente pequena de x = 1, a função nãoparece mal comportada, mas o seu condicionamento é muito elevado. A razãodisto é que log 1 = 0 e o cálculo deste valor particular leva à perda de umgrande número de dígitos significativos.

2.4 Efeito dos erros de arredondamento:

Na análise de erros feita na secção anterior, não entrámos em conta comos erros de arredondamento. Estes ocorrem a cada passo do algoritmo uti-

20

lizado para o cálculo do problema, pois estamos a trabalhar dentro de umsistema FP (b, n,m, ∗) fixo e, como já vimos anteriormente, a maior parte dosnúmeros não pertencem a estes sistemas e temos que recorrer a aproximações,que têm de ser feitas a cada passo do algoritmo.

No caso de operações elementares, temos simplesmente:

|δftotal| ≤ |px| |δx|+ |δarr|

O primeiro termo já foi descrito na secção anterior, enquanto que o se-gundo depende do sistema particular de representação adoptado.

Exemplo:Determinar um majorante para o erro absoluto de y = cos (x), quando

x = 1.5, com δx = 0.001 e o cálculo é efectuado no sistema FP (10, 4, 2, T ).Temos cos (x) = fl (0.07073720) = 0.7073× 10−1 e:

|δcos| ≤ (−x tg x)M |δx| |−x tg x| |δx|

Logo:|δtotal| ≤ |δcos|+ |δarr|

Dado que |δarr| ≤ 10−4, temos:

|δtotal| ≤ |δcos|+ |δarr| |−1.5 tg 1.5| |0.001|+ 10−4 2. 125 2× 10−2

e |ey| = |δtotal| |y| |δtotal| |y| 1. 503 3× 10−3.

A decomposição do erro total nestas duas componentes distintas, leva-nosa definir os conceitos, extremamente importantes na prática, de condiciona-mento e estabilidade.

O primeiro, que já foi discutido atrás, depende essencialmente da estru-tura da função ou modelo matemático com que pretendemos fazer os cálculos.Nomeadamente, vimos exemplos de funções bem e mal condicionadas, e vi-mos também que podemos estimar a propagação de erros conhecendo apenasas derivadas parciais da função numa vizinhança dos valores das variáveis.Tudo isto é pré-algorítmico e dizemos que um problema numérico é estável,se pequenas variações (erros) nos valores das variáveis não são amplificadosno resultado final. Na linguagem que temos estado a utilizar, isto significa

21

que nenhum dos pesos que afectam cada um dos factores δxi (os números decondição) pode ser muito elevado.

Quanto ao segundo, quando é que dizemos que um método é numerica-mente estável? Para tornar precisa esta noção, temos que ter em conta asoutras fontes de erro, nomeadamente os erros de arredondamento introduzi-dos em cada passo do algoritmo implementado. Neste caso, não podemosesperar ter à nossa disposição uma fórmula fundamental de erros genérica,mas ainda assim, podemos escrever:

|δf | ≤n∑

i=1

|pi| |δxi|+

k∑i=1

Ai |δarri |

Onde os pesos Ai têm de ser estimados caso-a-caso, através da análise doalgoritmo em questão. Então, um método numérico diz-se estável, se nenhumdos coeficientes |pi| ou Ai é elevado. Este é um conceito mais forte que o bomcondicionamento, onde apenas exigimos que nenhum dos coeficientes |pi| sejaelevado. Então, um problema pode ser bem condicionado, mas o algoritmoque o resolve instável. Por outro lado, um problema mal condicionado não ésempre instável.

Como introdução, vejamos o seguinte exemplo:

Exemplo:Seja f (x, y) = x2 − y2 = (x− y) (x+ y). Usamos apenas operações

elementares para calcular f , mas as duas expressões, algebricamente equiva-lentes, que definem esta função, sugerem duas maneiras distintas de aplicarestas operações, ou seja, dão a dois algoritmos distintos.

Algoritmo A:z1 = x× xz2 = y × yz3 = z1 − z2

Algoritmo B:z1 = x+ yz2 = x− yz3 = z1 × z2

Dados x = 0.3237, y = 0.3134 e supondo que utilizamos o sistemaFP (10, 4, 2, A), vamos comparar o desempenho numérico destes dois algo-ritmos. O resultado exacto é f (x, y) = 0.656213× 10−3.

22

Temos:

z1 = fl (x× x) = 0.1048 z1 = fl (x+ y) = 0.6371z2 = fl (y × y) = 0.9822× 10−1 z2 = fl (x− y) = 0.1030× 10−1

z3 = fl (z1 − z2) = 0.6580× 10−2 z3 = fl (z1 × z2) = 0.6562× 10−2

Destes resultados, podemos então calcular δfAtotal = −0.27232 × 10−2 e

δfBtotal = 0.00198 × 10−2, ou seja, o erro relativo introduzido no resultado

final pelo algoritmo A é superior ao introduzido pelo algoritmo B. Paradetectarmos a fonte desta diferença, temos que analisar os erros introduzidosa cada passo, em cada um dos algoritmos.

Para o algoritmo A, temos:

|δz1 | ≤ |δx|+ |δx|+ |δarr1||δz2 | ≤ |δy|+ |δy|+ |δarr2||δz3 | ≤

∣∣∣z1z3 ∣∣∣M |δz1 |+∣∣∣ z2z3 ∣∣∣M |δz2|+ |δarr3|

Logo, substituindo as duas primeiras expressões na terceira:

|δz3 | ≤∣∣∣ 2x2

x2−y2

∣∣∣M|δx|+

∣∣∣ 2y2

x2−y2

∣∣∣M|δy|+

+∣∣∣ x2

x2−y2

∣∣∣M|δarr1|+

∣∣∣ y2

x2−y2

∣∣∣M|δarr2|+ |δarr3|

Para o algoritmo B, temos:

|δz1| ≤∣∣∣ xx+y

∣∣∣M|δx|+

∣∣∣ yx+y

∣∣∣M|δy|+ |δarr1|

|δz2| ≤∣∣∣ xx−y

∣∣∣M|δx|+

∣∣∣ yx−y

∣∣∣M|δy|+ |δarr2|

|δz3| ≤ |δz1 |+ |δz2 |+ |δarr3|E substituindo, temos:

|δz3 | ≤∣∣∣ 2x2

x2−y2

∣∣∣M|δx|+

∣∣∣ 2y2

x2−y2

∣∣∣M|δy|+

+ |δarr1|+ |δarr2|+ |δarr3|

Notemos que a parte relativa ao condicionamento do problema,∣∣∣ 2x2

x2−y2

∣∣∣M|δx|+∣∣∣ 2y2

x2−y2

∣∣∣M|δy|, é a mesma para os dois algoritmos (como seria de esperar), mas

os termos respeitantes aos erros de arredondamento diferem. Em particular,no algoritmo A, são amplificados pelos factores

∣∣∣ x2

x2−y2

∣∣∣M

e∣∣∣ y2

x2−y2

∣∣∣M. Para

valores de x e y próximos, isto justifica a diferença de desempenho dos doisalgoritmos.

23

3 Bibliografia:

[1] Accuracy and stability of numerical algorithms; Higham, N. J.; SIAM;2002

[2] Numerical Analysis - A mathematical introduction; Schatzam, M.;Oxford University Press; 2002

[3] Métodos Numéricos; Valença, M.; Imprensa Nacional; 1988

24