Tente evitar perda de dígitos significantes no cálculo das seguintes funções:
© log (1+x)-log (x), para x grande.

Passo 1

Beleza, aqui a questão é sobre evitar perda de dígitos significantes (aquele tal “cancelamento catastrófico”) quando a gente calcula
f(x)=log(1+x)-log(x)
para x bem grande. O conteúdo principal é estabilidade numérica e operações com logaritmo. Para resolver, vamos precisar:
1. Das propriedades de logaritmo (especialmente log a - log b = log(a/b)).
2. Da ideia de função log(1+y) para y pequeno (às vezes chamada de log1p).
3. Se quiser, da expansão em série de Taylor para log(1+y).

Passo 2

Primeiro vamos aplicar a propriedade de logaritmo que diz
log(1+x)-log(x)=log!l(1+xxr)
Isso já simplifica para
f(x)=log!l(1+1xr)
Por que isso ajuda? Porque agora a gente não subtrai dois números gigantes ( log(1+x) e log(x)) que ficam quase iguais quando x cresce — em vez disso, calcula um único logaritmo de algo bem próximo de 1.

Passo 3

Quando x é muito grande, 1/x é um número muito pequenininho. Aí vale usar a função especializada
log1p(y)equiv log(1+y)
com y=1/x. Em muitas linguagens (C, Python, MATLAB etc.) tem a função log1p que faz exatamente isso sem perder precisão. Então, computacionalmente, você faz
resultado = log1p(1.0/x);
e evita qualquer cancelamento.

Passo 4

Se quiser até uma aproximação teórica, dá para expandir em série de Taylor pra log(1+y) em torno de y=0:
log(1+y)=y-y^22+y^33-cdots
Substituindo y=1/x, para xgg1 a gente tem
f(x)=logl(1+1xr)approx 1x-12x^2+cdots,
que mostra direitinho que o valor é pequeno e bem comportado numericamente.

Resposta

Reescrevendo a função de maneira estável, para x grande, temos
boxed,log(1+x)-log(x)=log!l(1+1xr),,
e, na prática numérica, use a função especializada
log1p(1.0/x)
para não perder dígitos significantes.

Exercícios relacionados