| | | | |

1.4 Tipos e Medidas de Erros

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

Ao utilizarmos computadores na resolução de problemas matemáticos, acabamos obtendo soluções aproximadas. A diferença entre a solução exata e a solução aproximada computada é chamada de erro. O erro é comumente classificado nas seguintes duas categorias:

  • Erro de arredondamento

    Este é o erro que ocorre na representação aproximada de números na máquina.

  • Erro de truncamento

    Este é o erro que ocorre na interrupção (truncamento) de 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×105.

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=01/n!=e2.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=01n! 10!+11!+12!+13!++18! (1.93)
2.71827876984127=:e~. (1.94)
1import math
2x = 0
3for n in range(9):
4  x += 1./math.factorial(n)
5print(math.fabs(math.e - x))

A diferença |ee~|3×106 é 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:=|xx~|. (1.95)
  • Erro relativo:

    εrel:=|xx~||x|(×100%). (1.96)

A vantagem do erro relativo é em levar 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 =|xx~| (1.97)
    =|1.01.1| (1.98)
    =|0.1| (1.99)
    =1×101. (1.100)
    εrel =|xx~||x| (1.101)
    =|1.01.1||1.0| (1.102)
    =|0.1||1.0| (1.103)
    =1×101=10%. (1.104)
    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 =|xx~| (1.105)
    =|1000.01100.0| (1.106)
    =1×102. (1.107)
    εrel =|xx~||x| (1.108)
    =|1000.01100.0||1000.0| (1.109)
    =|100.0||1000.0| (1.110)
    =1×101=10%. (1.111)
    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

|xx~||x|εrel<5×10n. (1.112)

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×101 (1.113)

    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

    |xx~||x|=0.25<5×101 (1.114)

    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:

    |xx~||x|=0.5<5×100, (1.115)

    Temos que x~=1.5 é uma aproximação com zero dígito significativo correto de x=1. Note que ao arredondarmos88endnote: 8Assumindo 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 tando, vamos considerar o caso de se calcular o valor de uma dada função f em um dado ponto x, i.e. queremos calcular y com

y=f(x). (1.116)

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.117)

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.118)

Então, de (1.116) e (1.117), temos

ε(y)=f(x)ε(x)+O(ε2(x)). (1.119)

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

εabs(y) =|f(x)ε(x)+O(ε2(x))| (1.120)
|f(x)|εabs(x)+O(εabs2(x)). (1.121)

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

εabs(y)|f(x)|εabs(x). (1.122)
Exemplo 1.4.5.

Consideramos o problema em se calcular

y=f(x)=x2sen(x) (1.123)

com x=π/3±0.1. Usando (1.122) 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.124)
=|2xsen(x)+x2cos(x)|×εabs(x) (1.125)
=2.3621×101. (1.126)
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, concluímos que um erro em x de tamanho 0.1 é propagado no cálculo de f(x), causando um erro pelo menos duas vezes maior em y. Também, podemos interpretar este resultado do ponto de vista do erro relativo. O erro relativo associado a x é

εrel(x) =εabs(x)|x| (1.127)
=0.1π/3 (1.128)
=9.5493×10210%, (1.129)

acarretando um erro relativo em y de

εrel(y) =εabs(y)|y| (1.130)
=εabs(y)|f(x)| (1.131)
=2.4872×10225%. (1.132)
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|
=|f(x)||y|εabs(x)
=|x||f(x)||f(x)|εabs(x)|x|
=|xf(x)f(x)|εrel(x).

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

κf(x):=|xf(x)f(x)|. (1.133)

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)=x2sen(x) no ponto x=π/3 é calculado por

κf(x) =|xf(x)f(x)| (1.134)
=|x[2xsen(x)+x2cos(x)]x2sen(x)|. (1.135)

Substituindo x por π/3, obtemos

κf(π/3)=2.6046. (1.136)

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.122) 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|fxk|εabs(xk). (1.137)
Exemplo 1.4.7.

Consideremos o problema em se calcular

z=f(x,y)=x2sen(x)cos(y) (1.138)

com

x=π3±0.1, (1.139)
y=π4±0.02. (1.140)

Usando (1.137) 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) =|fx|eabs(x)+|fy|eabs(y) (1.141)
=|(2xsen(x)+x2cos(x))cos(y)|×eabs(x) (1.142)
+|x2sen(x)sen(y)|eabs(y) (1.143)
=1.8046×101. (1.144)
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), as operações e funções elementares são computadas, usualmente, com um erro próximo do épsilon de máquina (eps1016). Entretanto, em algumas situações estas operações fundamentais acarretam erros maiores, causando uma perda de precisão.

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

x =314150000001549, (1.145)
y =314150000002356. (1.146)

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

x~ =314150000002000, (1.147)
y~ =314150000002000. (1.148)

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

erel(x)=|xx~||x|1010%, (1.149)
erel(y)=|yy~||y|1010%, (1.150)

respectivamente. Agora, temos

yx=807, (1.151)
y~x~=0. (1.152)

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

erel(yx) =|(yx)(y~x~)|(yx) (1.153)
=807807=100%! (1.154)
Exemplo 1.4.8.

Na tabela abaixo temos os erros em se computar

(1+x4)1x4 (1.155)

para diferentes valores de x.

x erro
1 0
101 1.1×1013
102 6.1×109
103 8.9×105
104 1.0×100
105 1.0×100

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

Exemplo 1.4.9.

Uma equação de segundo grau ax2+bx+c=0 tem raízes

x1 =b+b24ac2a, (1.156)
x2 =bb24ac2a. (1.157)

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

x1 =b+b24ac2abb24acbb24ac (1.158)
=b2b2+4ac2a(bb24ac) (1.159)
=2cb+b24ac, (1.160)

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.157), 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=01n! (1.161)

Determine o erro relativo da aproximação de e pelo truncamento da série com 4 termos.

Solução.

Denotamos x=e e

x~ =n=031n! (1.162)
=10!+11!+12!+13! (1.163)
=11+11+12+16 (1.164)
=2+12+16 (1.165)
=166 (1.166)

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.

Solução.

Calculamos o número de condicionamento como segue

κf(x) =|xf(x)f(x)| (1.167)
=|xnxn1xn| (1.168)
=|nxnxn| (1.169)
=n,x0. (1.170)
ER 1.4.3.

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

p(x)=106x2+102x+3×103 (1.171)

com 10 dígitos significativos corretos.

Solução.

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

x1 =b+b24ac2a (1.172)
x2 =bb24ac2a (1.173)

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

x1=2cb+b24ac (1.174)

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)

    10e por 27.18.

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

Resposta.

a) 1.593×103; b) 2.818×101;

E. 1.4.2.

Calcule o erro relativo na aproximação de

  1. a)

    π por 3.14.

  2. b)

    10e por 27.18.

Forneça as respostas em porcentagem.

Resposta.

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 10e?

Resposta.

a) 3; b) 3

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.

Resposta.

1/6!1.4×103.

E. 1.4.5.

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

Resposta.

2.002083×103

E. 1.4.6.

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

Resposta.

5.75403×103

E. 1.4.7.

Considere a computação de

y=1cos(h)h (1.175)

para h=109. 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.

Resposta.

5.0×1010


Envie seu comentário

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. Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!