Você está na página 1de 25

matemática computacional (lmac)

Aula 2

Departamento de Matemática
Instituto Superior Técnico
2023/2024

1
CAPÍTULO 1 – Conceitos básicos da teoria dos erros

• Aula 1: Erro absoluto e erro relativo. Representação de números no


computador e sistemas de ponto flutuante. Arredondamentos.
Algarismos significativos.

• Aula 2: Propagação de erros em cálculos com funções. Condicionamento


e estabilidade.

2
revisão

• O computador usa um número finito de dígitos para representar números


reais. Por conseguinte, diferentes números reais podem ter a mesma
representação no computador.
• O sistema de ponto flutuante PF(β, n, t1 , t2 ) é o conjunto formado pelo
zero e pelos números da forma

x = σ (0.a1 a2 · · · an )β · β t , a1 6= 0, σ ∈ {+, −} .

• A representação f l(x) de um real x no sistema PF(β, n, t1 , t2 ) é obtida


pelo arredondamento que no Matlab é, por defeito, simétrico.
• Matlab utiliza o sistema PF(2, 53, −1021, 1024).

3
propagação de erros em cálculos com funções

Pretende-se calcular o valor de uma função f num ponto x que não tem
representação exata no computador.
Seja x̃ = f l(x) o valor arredondado de x. Qual é o erro de f (x̃) em relação
ao valor exato f (x)?
Se x for próximo de x̃, e x̃ 6= x, será que f (x) é próximo de f (x̃)?

Seja f ∈ C 1 (Vx ), onde Vx é uma vizinhança de x que contém x̃.

Tem-se
f (x) − f (x̃)
ef (x̃) := f (x) − f (x̃) = (x − x̃) ≈ f 0 (x)(x − x̃) = f 0 (x) ex̃ .
x − x̃ | {z }
ex̃

4
propagação de erros em cálculos com funções

Temos assim as seguintes aproximações para o cálculo do erro de f (x̃):

• Erro de f (x̃) (em relação a f (x)):

ef (x̃) ≈ f 0 (x)ex̃ (1)

• Erro absoluto de f (x̃):

|ef (x̃) | ≈ |f 0 (x)| |ex̃ |

Quanto ao erro relativo de f (x̃), usando a fórmula (1), obtém-se:


ef (x̃) f 0 (x)ex̃ x f 0 (x) ex̃ x f 0 (x)
δf (x̃) = ≈ = = δx̃ . (2)
f (x) f (x) f (x) x f (x)

• Erro relativo de f (x̃):

x f 0 (x)
|δf (x̃) | ≈ |δx̃ | .
f (x)

5
propagação de erros em cálculos com funções

Definição: 1 Seja
x f 0 (x)
pf (x) = .
f (x)
Diz-se que condf (x) = |pf (x)| é número de condição (relativa) de f em x. 

É possível também definir número de condição absoluta de f em x por

condabsf (x) = |f 0 (x)| .

O número de condição mede a sensibilidade de f relativamente a variações


de x.

Definição 2: Diz-se que o cálculo de f (x) é um problema bem condicionado


(ou f é bem condicionada em x) se a qualquer pequena variação em x
(arredondamentos, erros de medição) corresponde sempre uma pequena
variação no valor de f (x). Caso contrário, diz-se que f é mal condicionada
em x. 
6
propagação de erros em cálculos com funções

Tendo em conta a definição do número de condição, conclui-se que:

• Se condf (x) ∼ 1 (ordem das unidades), então a função f é bem


condicionada em x, no sentido em que δf (x̃) é da mesma ordem de
grandeza do que δx̃ .
• Se
lim condf (x) = +∞
x→a

então f é mal condicionada para valores de x perto de a.

• Nas restantes situações deverá ser feita uma análise caso a caso.

7
propagação de erros em cálculos com funções


Exemplo 1: Seja f (x) = x. O número de condição de f em x é

x 1
condf (x) = √ √ = 1/2 ∀x ⇒ |δf (x̃) | ≈ |δx̃ | .
2 x x 2

Logo, f é bem condicionada para qualquer x. Neste caso, há até uma


redução de |δf (x̃) | em relação a |δx̃ |.

Note-se no entanto que o número de condição absoluta de f em x é


1
condabsf (x) = |f 0 (x)| = √ ,
2 x
pelo que uma pequena variação (absoluta) em x na vizinhança de zero pode

resultar a um erro grande na variação (absoluta) de f (x) = x.

8
propagação de erros em cálculos com funções

Exemplo 2: [Cancelamento de dígitos significativos] Considere o cálculo de


f (x) = a − x para valores de x próximos de a. Temos

x
lim condf (x) = lim − = ∞.
x→a x→a a−x

Se a = 0.22222, x = 0.22221 e x̃ = 0.2222, temos a − x = 0.00001 e

condf (0.22221) = 0.22221 · 105 .

O erro relativo de f (x̃) é assim:

x − x̃
|δf (x̃) | ≈ condf (0.22221) |δx̃ | = 0.22221 · 105 ·
x
0.00001
= 0.22221 · 105 × =1 (100%)
0.22221

9
propagação de erros em cálculos com funções

A função f é linear pelo que o valor obtido pela fórmula (2) coincide com o
valor exato do erro relativo:
a − x − (a − x̃) −0.00001
|δf (x̃) | = = =1 (100%) .
a−x 0.00001

Note-se que embora x̃ aproxime x com uma precisão de 4 algarismos signi-


ficativos (ver aula anterior), a maior parte desses algarismos são cancelados
nas subtrações a − x e a − x̃ por x̃ e x serem muito próximos de a.
Este cancelamento levará a que a − x̃ seja uma aproximação de a − x com 0
algarismos. De facto, a − x = 0.1 · 10−4 e

|a − x − (a − x̃)| = |(0.1 − 0.2) · 10−4 | = | − 0.1 × 10−4 |


= 0.1 × 10−4−0 ≤ 0.5 × 10−4−0

Diz-se que ocorreu uma perda de precisão por cancelamento subtrativo.

10
generalização para funções reais de variável vetorial

Definição 3: Seja f : D ⊂ RN → R, f ∈ C 1 (D), x = (x1 , . . . , xN ) ∈ D e


x̃ ∈ D um valor aproximado de x. Então, o erro de f (x̃) é aproximado por
N
X ∂f
ef (x̃) = f (x) − f (x̃) ≈ (x) ex̃k .
∂xk
k=1

e, se f (x) 6= 0 e x 6= 0,
N
ef (x̃) X
δf (x̃) = ≈ pf,k (x) δx̃k .
f (x)
k=1

O número
∂f
xk ∂xk
(x)
condf,k (x) = |pf,k (x)| = ,
f (x)
diz-se número de condição de f em x em relação a xk . 

11
generalização para funções reais de variável vetorial

Exemplo 3: [Operações aritméticas elementares] Seja f : R2 → R.


1. f (x, y) = xy. Temos
ef (x̃,ỹ)
δf (x̃,ỹ) = ≈ pf,x (x, y) δx̃ + pf,y (x, y) δỹ = δx̃ + δỹ .
f (x, y) | {z } | {z }
=1 =1

2. f (x, y) = x/y. Temos

δf (x̃,ỹ) ≈ pf,x (x, y) δx̃ + pf,y (x, y) δỹ = δx̃ − δỹ .


| {z } | {z }
=1 =−1

3. f (x, y) = x ± y. Temos
 
x y f (x, y) − f (x̃, ỹ)
δf (x̃,ỹ) = δx̃ ± δỹ = .
x±y x±y f (x, y)

12
generalização para funções reais de variável vetorial

Quando f (x, y) = x − y e x ≈ y ou quando f (x, y) = x + y e x ≈ −y, o erro


relativo |δf (x̃,ỹ) | pode ser muito grande, comparado com δỹ e δx̃ . Neste
caso, estaremos perante a situação de cancelamento subtrativo.
Note-se também que a fórmula de erro é exata no caso 3 visto que a função
f (x, y) = x ± y é linear.

Exemplo 4: Considere os números x = 0.3721478693 e y = 0.3720230572 e


os seus representantes num sistema com 5 dígitos e arredondamento
simétrico x̃ = 0.37215 e ỹ = 0.37202.
Os erros relativos de arredondamento de x̃ e ỹ são
|δx̃ | ≈ 0.6 × 10−7 , |δỹ | ≈ 0.8 × 10−7 .

Sejam z = x − y e z̃ = x̃ − ỹ. Temos z = 0.124812 · 10−3 e


|z − z̃|
z̃ = 0.13000 · 10−3 ⇒ |δz̃ | = ≈ 0.42 · 10−1 ,
|z|
o que representa um aumento significativo do erro relativo em relação aos
erros das variáveis (há perda de precisão).
13
propagação de erro em algoritmos

Na prática, para aplicar um método numérico ou até para avaliar uma


função temos de efetuar operações elementares, de forma sucessiva, até
chegar ao resultado. A sequência destas operações corresponde a um
algoritmo.
Definição 4: Uma função f : I ⊂ R → R diz-se elementar num sistema
PF(β, n) se o valor aproximado de f (x) em PF(β, n) é dado por

f˜(x) = f l(f (x)) ∀x ∈ I ∩ PF(β, n) . 

Exemplo 5: As funções exp, log, sin, cos, tan, sinh, cosh, ..., são funções
elementares assim como as operações aritméticas +, −, ∗, /.

14
propagação de erro em algoritmos

Se f for uma função elementar, podemos escrever

ef˜(x) = f (x) − f˜(x) = f (x) δarr,f (x) , δf˜(x) = δarr,f (x) ,

onde δarr,f (x) ≤ u, sendo u a unidade de arredondamento do sistema


PF(β, n). Se, além disso, x̃ for um valor aproximado de x, tem-se

ef˜(x̃) = f (x) − f˜(x̃) = f (x) − f (x̃) + f (x̃) − f˜(x̃)

≈ f 0 (x) ex̃ + f (x̃) δarr,f (x̃) ,


ef˜(x̃) f (x̃)
δf˜(x̃) = ≈ pf (x) δx̃ + δarr,f (x̃) .
f (x) f (x)

Portanto, mesmo quando um problema é bem condicionado, i.e. quando f é


uma função bem condicionada, o erro relativo do resultado pode ser grande
devido a erros de arredondamento que são multiplicados por valores
elevados ao longo do algoritmo como iremos ver no próximo exemplo.

15
propagação de erro em algoritmos


Exemplo 6: Seja f (x) = x − x2 − 1. Para calcularmos z = f (1000),
podemos, por exemplo, optar pela sequência de passos (algoritmo):

x = 1000, z1 = x2 , z2 = z1 − 1, z3 = z2 , z = x − z3 . (3)

Vejamos primeiro se o cálculo de f (1000) é um problema bem condicionado.

1 − √2x2
2 x −1 x
condf (x) = x √ = −√ ≈ 1.0000005 .
x − x2 − 1 x2 − 1

Portanto, f é bem condicionada para x = 1000.

16
propagação de erro em algoritmos

Utilizando Matlab, apliquemos o algoritmo (3) para calcular f (1000):

• z1 = x2 = 106
• z2 = z1 − 1 = 999 999
√ √
• z3 = z2 = 999 999 ≈ 999.999499999875
• z = 1000 − z3 ≈ 0.500000125 · 10−3 .

Portanto, f (1000) ≈ 0.500000125 · 10−3 que podemos considerar como valor


exato.

17
propagação de erro em algoritmos

Apliquemos agora o algoritmo (3) para calcular f (1000) utilizando o


sistema PF(10, 5, −100, 100), com arredondamento simétrico.

• z1 = (103 )2 = 0.10000 · 107 ∈ P F (10, 5, −100, 100)

• z2 = z1 − 1 = 999999 = 0.999999 · 106 ∈


/ P F (10, 5, −100, 100)
⇒ z̃2 = f l(z2 ) = 0.10000 · 107 .

(Foi introduzido um erro de arredondamento).



• z̃3 = z̃2 = 1000 = 0.1 · 104 ∈ P F (10, 5, −100, 100).

(Note-se que o resultado difere do valor real z3 ≈ 999.999499999875, i.e.


o erro adicionado a z2 propagou-se a z3 ).

• z̃ = 1000 − z̃3 = 0.

18
propagação de erro em algoritmos

O erro relativo do resultado obtido face ao resultado pretendido é


0.500000125 × 10−3 − 0
= 1 = 100% .
0.500000125 × 10−3

• No passo 2, foi introduzido um erro de arredondamento, tendo-se obtido


z̃2 = z2 + u onde u é a unidade de arredondamento.

• No passo 3, a operação z3 , apesar de bem condicionada (z3 = z2 ), foi
aplicada a um número aproximado, propagando assim esse erro (sem no
entanto o amplificar). Obteve-se a aproximação z̃3 6= z3 (que não precisou
de ser arredondada por ter representação exata no sistema).

• Finalmente, no último passo, foi aplicada uma operação mal condicio-


nada x − z̃3 que amplificou o erro presente em z̃3 , dando origem a um
resultado com 100% de erro.

Percebe-se assim que o erro no resultado final depende, quer do erro no


dado de entrada (aqui a variável x) quer de possíveis arredondamentos
feitos ao longo do algoritmo.
19
estabilidade de algoritmos

Proposição 1: Suponha que o cálculo de z = f (x), f : RN → R, é efetuado


por um algoritmo com r passos. Então o erro relativo total de z̃ em relação
a f (x) é dado pela fórmula
N
X r
X
δz̃ = pf,k (x) δx̃k + qj (x) δarr,j ,
k=1 j=1

onde as funções pf,k , k ∈ {1, ..., N } medem a sensibilidade de f (condicio-


namento) relativamente a erros nas variáveis (x1 , ..., xN ) e onde a função
peso qj , j ∈ {1, ..., r} está relacionada com o condicionamento da operação
efetuada no passo j do algoritmo. 
Definição 5: Um algoritmo diz-se computacionalmente estável (numerica-
mente estável) se a pequenos erros relativos dos dados introduzidos, e a
pequenos valores da unidade de arrendondamento do sistema, correspon-
derem resultados com pequenos erros relativos. Caso contrário, diz-se
instável. 

20
estabilidade de algoritmos

Observação: No exemplo anterior, o erro no resultado deveu-se à introdução


de erros de arredondamento e não à utilização de dados aproximados.
Exercício 1: Tendo em conta que
p 1
f (x) = x − x2 − 1 = √ ,
x + x2 − 1
determine f (1000) no sistema P F (10, 5, −100, 100) pelo algoritmo

z1 = x2 , z2 = z1 − 1, z3 = z2 , z4 = x + z3 , z = 1/z4 .

Resolução: Temos f (1000) ≈ z̃ = 0.5 · 10−3 com o erro relativo

0.500000125 × 10−3 − 0.5 · 10−3


= 2.5 · 10−7 .
0.500000125 × 10−3

Note-se que δz̃3 = 5.0 · 10−7 e δz̃4 = 2.5 · 10−7 .

21
estabilidade de algoritmos

Causas de instabilidade numérica

• Problema original mal condicionado: quando alguma das sensibilidades


pf,k é muito elevada.
• Passos com operações mal condicionadas: quando algum dos pesos qj é
muito elevado (passo j mal condicionado).

1 1
Exemplo: Considere a função φ(x) = 1+x
− x
para valores grandes de x.
Determinemos o número de condição de φ(x):
 
1 1
xφ0 (x) x − (1+x) 2 + x2
condφ (x) = = 1 =
φ(x) 1+x
− x1
   
1 1 x
=x + = 1+ → 2, quando x→∞
1+x x 1+x

O cálculo de φ(x) quando x  1 é um problema bem condicionado.


22
estabilidade de algoritmos

Seja x = 10000 e considere, num sistema de ponto flutuante com 3 algaris-


mos na mantissa, o seguinte algoritmo para o cálculo de z = φ(x):

z1 = 1 + x, z2 = 1/x, z3 = 1/z1 , z = z3 − z2 . (4)

Temos
z1 = f l(10001) = 0.100 · 105 , z2 = 0.100 · 10−3 ,

z3 = 0.100 · 10−3 , z = 0.

O valor exato com 12 casas decimais é φ(10000) = −0.999900009999 · 10−8 .


Assim, o erro relativo do valor obtido pelo algoritmo (4) é

| − 0.999900009999 · 10−8 − 0|
= 1 = 100% .
| − 0.999900009999 · 10−8 |

23
estabilidade de algoritmos

1 1
Note-se que no algoritmo associado à expressão φ(x) = − ocorre
1+x x
cancelamento subtrativo quando x  1, pois, neste caso, x + 1 ≈ x.

Escrevendo φ(x) na forma equivalente


1
φ(x) = − ,
(1 + x)x
podemos considerar o algoritmo associado a esta expressão:

z1 = 1 + x, z2 = x z1 , z = −1/z2 .

Este algoritmo evita o cancelamento subtrativo quando x  1.

24
estabilidade de algoritmos

Efetuando os cálculos:
z1 = f l(1 + 10000) = 0.100 · 105 ,

z2 = 0.100 · 105 × 0.100 · 105 = 0.100 · 109 ,

z = −0.100 · 10−7

Erro relativo do resultado:


| − 0.999900009999 · 10−8 + 0.100 · 10−7 |
= 0.1 · 10−3 = 0.01%
| − 0.999900009999 · 10−8 |

Este exemplo ilustra a noção de instabilidade numérica (ou de um


algoritmo instável).

25

Você também pode gostar