| | | |

Matemática numérica I

Ajude a manter o site livre, gratuito e sem propagandas. Colabore!

1.4 Tipos e medidas de erros

Ao resolvermos problemas matemáticos com computadores, obtemos soluções aproximadas. Chamamos de erro a diferença entre a solução exata e a solução aproximada que calculamos. Comumente, classificamos os erros em duas categorias:

  • •

    Erro de arredondamento

    Este é o erro que ocorre quando representamos números aproximadamente na máquina.

  • •

    Erro de truncamento

    Este é o erro que ocorre quando interrompemos (truncamos) um procedimento com infinitos passos.

Exemplo 1.4.1.(Erro de Arredondamento)

O erro de arredondamento em aproximar π por 3.1415×100 é de aproximadamente 9.3×10−5.

1import numpy as np
2np.pi - 3.1415e0
9.265358979293481e-05
Exemplo 1.4.2.(Erro de Truncamento)

Consideramos a seguinte série numérica ∑n=0∞1/n!=e≈2.7183×100. Ao computarmos esta série no computador, precisamos truncá-la em algum n suficientemente grande. Por exemplo, truncando a série em seu nono termo, temos

∑n=0∞1n! ≈10!+11!+12!+13!+⋯+18! (1.83)
≈2.71827876984127=:e~. (1.84)
1import math
2x = 0
3for n in range(9):
4 x += 1./math.factorial(n)
5print(math.fabs(math.e - x))

A diferença |e−e~|≈3×10−6 é o erro de truncamento associado.

Suponhamos, agora, que x seja o valor exato (valor esperado) de uma quantidade de interesse e x~ o valor computado (aproximação de x). Em matemática numérica, utilizamos frequentemente as seguintes medidas de erro:

  • •

    Erro absoluto:

    εabs:=|x−x~|. (1.85)
  • •

    Erro relativo:

    εrel:=|x−x~||x|(×100%). (1.86)

Com o erro relativo, levamos em conta a ordem de grandeza da quantidade x.

Exemplo 1.4.3.

Estudamos os seguintes casos:

  1. a)

    x=1.0 e x~=1.1:

    εabs=|x−x~| (1.87)
    =|1.0−1.1| (1.88)
    =|−0.1| (1.89)
    =1×10−1. (1.90)
    εrel=|x−x~||x| (1.91)
    =|1.0−1.1||1.0| (1.92)
    =|−0.1||1.0| (1.93)
    =1×10−1=10%. (1.94)
    1x = 1.0
    2xa = 1.1
    3eabs = abs(x - xa); eabs
    0.10000000000000009
    
    1erel = eabs/abs(x)
    2erel
    0.10000000000000009
    
  2. b)

    x=1000.0 e x~=1100.0:

    εabs=|x−x~| (1.95)
    =|1000.0−1100.0| (1.96)
    =1×102. (1.97)
    εrel=|x−x~||x| (1.98)
    =|1000.0−1100.0||1000.0| (1.99)
    =|−100.0||1000.0| (1.100)
    =1×10−1=10%. (1.101)
    1x = 1000.0; xa = 1100.0
    2eabs = abs(x - xa); eabs
    100.0
    
    1erel = eabs/abs(x); erel
    0.1
    

Outra medida de erro comumente empregada é o número de dígitos significativos corretos. Dizemos que x~ aproxima x com n dígitos significativos corretos, quando

|x−x~||x|⏟εrel<5×10−n,x≠0. (1.102)

Isso significa que ao arredondarmos x e x~ ambos com n dígitos, obtemos o mesmo resultado.

Exemplo 1.4.4.

Estudamos os seguintes casos:

  • •

    x=2 e x~=2.4

    εrel=0.2<5×10−1 (1.103)

    Temos que x~=2.4 aproxima x=2 com um dígito significativo correto. Note que ambos são iguais quando os arredondamos para um dígito.

  • •

    x=2 e x~=2.5

    |x−x~||x|=0.25<5×10−1 (1.104)

    Temos que x~=2.5 é uma aproximação com 1 dígito significativo correto de x=2. Note que ambos são iguais quando os arredondamos para um dígito.

  • •

    x=1 e x~=1.5:

    |x−x~||x|=0.5<5×100, (1.105)

    Temos que x~=1.5 é uma aproximação com zero dígito significativo correto de x=1. Note que ao arredondarmos888Assumindo o arredondamento por proximidade com desempate par. x~ para um dígito, obtemos x~≈2, enquanto que x=1.

1.4.1 Propagação de erros

Nesta seção, vamos introduzir uma estimativa para a propagação de erros (de arredondamento) na computação de um problema. Para tanto, vamos considerar o caso de calcularmos o valor de uma função f em um ponto x, isto é, queremos calcular y tal que

y=f⁢(x). (1.106)

Agora, assumindo que x seja conhecido com um erro ε⁢(x), este se propaga no cálculo da f, levando a um erro ε⁢(y) no valor calculado de y. Ou seja, temos

y+ε⁢(y)=f⁢(x+ε⁢(x)). (1.107)

Denotamos εabs⁢(x)=|ε⁢(x)| o erro absoluto associado a x e εabs⁢(y)=|ε⁢(y)| o erro absoluto associado a y.

Nosso objetivo é estimar εabs⁢(y) com base em εabs⁢(x). Para tanto, tomamos a aproximação de f⁢(x+ε⁢(x)) dada pelo polinômio de Taylor de grau 1 de f em torno de x, i.e.

f⁢(x+ε⁢(x))=f⁢(x)+f′⁢(x)⁢ε⁢(x)+O⁢(ε2⁢(x)). (1.108)

Então, de (1.106) e (1.107), temos

ε⁢(y)=f′⁢(x)⁢ε⁢(x)+O⁢(ε2⁢(x)). (1.109)

Daí, passando ao valor absoluto e usando a desigualdade triangular, obtemos

εabs⁢(y)=|f′⁢(x)⁢ε⁢(x)+O⁢(ε2⁢(x))| (1.110)
≤|f′(x)|εabs(x)+O(εabs2(x)). (1.111)

Deste resultado, obtemos a seguinte estimativa de propagação de erro

εabs⁢(y)≈|f′⁢(x)|⁢εabs⁢(x). (1.112)
Exemplo 1.4.5.

Consideramos o problema em se calcular

y=f⁢(x)=x2⁢sen⁡(x) (1.113)

com x=π/3±0.1. Usando (1.112) para estimarmos o erro absoluto εabs⁢(y) no cálculo de y com base no erro absoluto εabs⁢(x)=0.1, calculamos

εabs⁢(y)=|f′⁢(x)|⁢εabs⁢(x) (1.114)
=|2xsen(x)+x2cos(x)|εabs(x) (1.115)
=2.3621×10−1. (1.116)
1import math
2x = math.pi/3; eabsx = 0.1
3eabsy = math.fabs(2*x*math.sin(x) \
4 + x**2 * math.cos(x)) * eabsx
5print(f"{eabsy:.4e}")
2.3621e-01

Com isso, estimamos que um erro em x de tamanho 0.1 produz, no cálculo de f⁢(x), um erro absoluto cerca de 2.4 vezes maior. Também podemos interpretar esse resultado do ponto de vista do erro relativo. O erro relativo associado a x é

εrel⁢(x)=εabs⁢(x)|x| (1.117)
=0.1π/3 (1.118)
=9.5493×10−2≈10%, (1.119)

acarretando um erro relativo em y de

εrel⁢(y)=εabs⁢(y)|y| (1.120)
=εabs⁢(y)|f⁢(x)| (1.121)
=2.4872×10−2≈25%. (1.122)
1import math
2x = math.pi/3; eabsx = 0.1
3erelx = eabsx/math.fabs(x)
4print(f"{erelx*100: .0f} %")
10 %
1f = lambda x: x**2 * math.sin(x)
2df = lambda x: 2*x*math.sin(x) \
3 + x**2 * math.cos(x)
4eabsy = math.fabs(df(x)) * eabsx
5erely = eabsy/math.fabs(f(x))
6print(f"{erely*100: .0f} %")
25 %

Associada à estimativa (1.4.5), temos

εrel⁢(y)=εabs⁢(y)|y| (1.123)
=|f′⁢(x)||y|εabs(x) (1.124)
=|x|⋅|f′⁢(x)||f⁢(x)|εabs⁢(x)|x| (1.125)
=|x⁢f′⁢(x)f⁢(x)|εrel(x). (1.126)

Desta última equação, definimos o número de condicionamento de f, denotado por

κf⁢(x):=|x⁢f′⁢(x)f⁢(x)|. (1.127)

Observamos que κf⁢(x) é a escala com que erros em x são propagados no cálculo de y=f⁢(x).

Exemplo 1.4.6.

O número de condicionamento da função f⁢(x)=x2⁢sen⁡(x) no ponto x=π/3 é calculado por

κf⁢(x)=|x⁢f′⁢(x)f⁢(x)| (1.128)
=|x⁢[2⁢x⁢sen⁡(x)+x2⁢cos⁡(x)]x2⁢sen⁡(x)|. (1.129)

Substituindo x por π/3, obtemos

κf⁢(π/3)=2.6046. (1.130)

Observamos que o resultado é compatível com os obtidos no Exemplo 1.4.5.

1import math
2f = lambda x: x**2 * math.sin(x)
3df = lambda x: 2*x*math.sin(x) \
4 + x**2 * math.cos(x)
5x = math.pi/3
6kf = math.fabs(x*df(x)/f(x))
7print(f"{kf:.4f}")
2.6046

A estimativa (1.112) pode ser generalizada para uma função de várias variáveis. No caso de uma função y=f⁢(x1,x2,…,xn), temos

εabs⁢(y)≈∑k=1n|∂f∂xk|⁢εabs⁢(xk). (1.131)
Exemplo 1.4.7.

Consideremos o problema em se calcular

z=f⁢(x,y)=x2⁢sen⁡(x)⁢cos⁡(y) (1.132)

com

x=π3±0.1, (1.133)
y=π4±0.02. (1.134)

Usando (1.131) para estimarmos o erro absoluto eabs⁢(z) no cálculo de z com base nos erros absolutos eabs⁢(x)=0.1 e eabs⁢(y)=0.02, calculamos

eabs⁢(z)=|∂f∂x|⁢eabs⁢(x)+|∂f∂y|⁢eabs⁢(y) (1.135)
=|(2xsen(x)+x2cos(x))cos(y)|eabs(x)
+|−x2⁢sen⁡(x)⁢sen⁡(y)|⁢eabs⁢(y) (1.136)
=1.8046×10−1. (1.137)
1import math
2x = math.pi/3
3eabsx = 0.1
4y = math.pi/4
5eabsy = 0.02
6eabsz = math.fabs((2*x*math.sin(x) \
7 + x**2*math.cos(x))*math.cos(y))*eabsx \
8 + math.fabs(-x**2*math.sin(x)*math.sin(y))*eabsy
9print(f"{eabsz:1.4e}")
1.8046e-01

1.4.2 Cancelamento catastrófico

No computador (com aritmética de ponto flutuante de 64 bits), computamos, em geral, as operações e funções elementares com erro relativo da ordem do épsilon de máquina (eps≈10−16). Entretanto, em algumas situações essas operações fundamentais acarretam erros maiores, causando perda de precisão.

O chamado cancelamento catastrófico ocorre quando computamos a diferença entre dois números próximos. Para ilustrá-lo, consideremos os seguintes números

x=314150000001549, (1.138)
y=314150000002356. (1.139)

Assumindo os arredondamentos de x e y com 12 dígitos significativos, temos

x~=314150000002000, (1.140)
y~=314150000002000. (1.141)

Os erros relativos associados às aproximações de x e y por x~ e y~ são

er⁢e⁢l⁢(x)=|x−x~||x|≈10−10%, (1.142)
er⁢e⁢l⁢(y)=|y−y~||y|≈10−10%, (1.143)

respectivamente. Agora, temos

y−x=807, (1.144)
y~−x~=0. (1.145)

Ou seja, o erro relativo na aproximação de y−x por y~−x~ é

er⁢e⁢l⁢(y−x)=|(y−x)−(y~−x~)|(y−x) (1.146)
=807807=100%! (1.147)
Exemplo 1.4.8.

Na tabela abaixo temos os erros em se computar

(1+x4)−1x4 (1.148)

para diferentes valores de x.

x erro
1 0
10−1 1.1×10−13
10−2 6.1×10−9
10−3 8.9×10−5
10−4 1.0×100
10−5 1.0×100

Observamos que, para o valor de x=0.001 o erro na computação já é da ordem de 10−5 e para valores de x menores ou iguais a 0.0001 o erro é catastrófico. Isto ocorre, pois se x≤10−4, então x4≤10−16<eps e, portanto, (1+x4)−1=0.

Exemplo 1.4.9.

Uma equação de segundo grau a⁢x2+b⁢x+c=0 tem raízes

x1=−b+b2−4⁢a⁢c2⁢a, (1.149)
x2=−b−b2−4⁢a⁢c2⁢a. (1.150)

Entretanto, no caso de b ser positivo, a fórmula (1.149) não é adequada para a computação da raiz x1, pois pode ocorrer cancelamento catastrófico. Podemos contornar este problema reescrevendo (1.149) da seguinte forma

x1=−b+b2−4⁢a⁢c2⁢a⋅−b−b2−4⁢a⁢c−b−b2−4⁢a⁢c (1.151)
=b2−b2+4⁢a⁢c2⁢a⁢(−b−b2−4⁢a⁢c) (1.152)
=−2⁢cb+b2−4⁢a⁢c, (1.153)

a qual não sofre mais de cancelamento catastrófico. Observamos que também pode ocorrer cancelamento catastrófico no cálculo de x2 pela fórmula (1.150), no caso de b ser negativo.

1.4.3 Exercícios resolvidos

ER 1.4.1.

O número de Euler é definido por

e=∑n=0∞1n! (1.154)

Vamos determinar o erro relativo da aproximação de e obtida pelo truncamento da série em 4 termos.

Resolução.

Denotamos x=e e

x~=∑n=031n! (1.155)
=10!+11!+12!+13! (1.156)
=11+11+12+16 (1.157)
=2+12+16 (1.158)
=166 (1.159)

O erro relativo é

1import math as m
2x = m.e
3xa = 16./6
4eabs = m.fabs(x-xa)
5erel = eabs/m.fabs(x)
6print(f"{erel*100:1.1f} %")
1.9 %

Concluímos que o erro relativo é de 1.9%.

ER 1.4.2.

Calcule o número de condicionamento κf⁢(x) para f⁢(x)=xn.

Resolução.

Calculamos o número de condicionamento como segue

κf⁢(x)=|x⁢f′⁢(x)f⁢(x)| (1.160)
=|x⋅n⁢xn−1xn| (1.161)
=|n⁢xnxn| (1.162)
=n,x≠0. (1.163)
ER 1.4.3.

Calcule as raízes do seguinte polinômio quadrático

p⁢(x)=10−6⁢x2+102⁢x+3×10−3 (1.164)

com 10 dígitos significativos corretos.

Resolução.

As raízes do polinômio quadrático podem ser calculados pela fórmula de Bhaskara

x1=−b+b2−4⁢a⁢c2⁢a (1.165)
x2=−b−b2−4⁢a⁢c2⁢a (1.166)

No entanto, a computação da raiz x1 sofre de cancelamento catastrófico. Para contornar este problema, usamos (1.153), i.e.

x1=−2⁢cb+b2−4⁢a⁢c (1.167)

Com o código

1import math as m
2
3a = 1e-6
4b = 1e2
5c = 3e-3
6
7delta = b**2 - 4*a*c
8
9x1 = -2*c/(b + m.sqrt(delta))
10x2 = (-b - m.sqrt(delta))/(2*a)
11
12print(f"{x1:1.9e}, {x2:1.9e}")

obtemos as saídas

  x_1 = -3.000000000e-05
  x_2 = -1.000000000e+08

1.4.4 Exercícios

E. 1.4.1.

Calcule o erro absoluto na aproximação de

  1. a)

    π por 3.14.

  2. b)

    10⁢e por 27.18.

Forneça as respostas com 4 dígitos significativos.


a) 1.593×10−3; b) 2.818×10−1;

E. 1.4.2.

Calcule o erro relativo na aproximação de

  1. a)

    π por 3.14.

  2. b)

    10⁢e por 27.18.

Forneça as respostas em porcentagem.


a) 0.051%; b) 0.01%;

E. 1.4.3.

Com quantos dígitos significativos corretos

  1. a)

    3.13 aproxima π?

  2. b)

    27.21 aproxima 10⁢e?


a) 2; b) 2

E. 1.4.4.

Obtenha uma estimativa do erro de truncamento em se aproximar o valor de sen⁡(1) usando-se p5⁢(1), onde p5⁢(x) é o polinômio de Taylor de grau 5 da função sen⁡(x) em torno de x=0.


1/6!≈1.4×10−3.

E. 1.4.5.

Considerando que x=2±0.1, estime o erro absoluto em se calcular y=e−x2⁢cos⁡(π⁢x/3). Forneça a estimativa com 7 dígitos significativos por arredondamento.


2.002083×10−3

E. 1.4.6.

Considerando que x=2±2% e y=1.5±0.3, estime o erro absoluto em se calcular y=e−x2⁢cos⁡(π⁢y/3). Forneça a estimativa com 6 dígitos significativos por arredondamento.


5.75403×10−3

E. 1.4.7.

Considere a computação de

y=1−cos⁡(h)h (1.168)

para h=10−9. Compute o valor de y reescrevendo esta expressão de forma a mitigar o cancelamento catastrófico. Forneça o valor computado de y com 2 dígitos significativos por arredondamento.


5.0×10−10


Envie seu comentário

Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!

Opcional. Preencha seu nome para que eu possa lhe contatar.
Opcional. Preencha seu e-mail para que eu possa lhe contatar.
As informações preenchidas são enviadas por e-mail para o desenvolvedor do site e tratadas de forma privada. Consulte a política de uso de dados para mais informações.

Licença Creative Commons
Este texto é disponibilizado nos termos da Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional. Ícones e elementos gráficos podem estar sujeitos a condições adicionais.

Pedro H A Konzen
| | | |