[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: a^b e b^a



On Thu, 27 May 1999, Fabio Dias wrote:

> Eu não sei se a fórmula de Newton funciona para funções que não são
  polinomiais, mas fazendo por ele, eu obtive 1.7649219145, que funcionou.

[para resolver 5^x = x^5 no intervalo 1 < x < 2]

O método de Newton nada tem de especial para polinômios.
Para quem não sabe, o método de Newton propõe-se a encontrar
(uma aproximação muito boa de) uma raiz de f(x) = 0
da seguinte forma. Se x_0 é uma raiz grosseiramente aproximada
definimos recursivamente uma sequencia x_n por

x_{n+1} = x_n - (f(x_n)/f'(x_n)) 

A sequencia tende rapidamente para a raiz se x_0 estiver suficientemente
próximo da raiz. Para ver isto, veja que estamos iterando a função

g(x) = x - (f(x)/f'(x))

Os pontos fixos de g, i.e., soluções de g(x) = x,
são as raizes de f, como pode-se ver facilmente pela fórmula.
Mais ainda, nestes pontos fixos temos g'(x) = 0 pois

g'(x) = (f(x) f''(x))/(f'(x) f'(x))

Assim, temos uma convergência muito rápida, com o número de casas
decimais corretas duplicando a cada iteração. Veja para o problema
do Wagner as 10 primeiras iterações (com 60 casas decimais):

      x_0 = 2.0

      x_1 = 1.82396160314087762035186760956148376126446776010871910021313

      x_2 = 1.76981155757272173159279927307535682266855941536716810195031

      x_3 = 1.76495898315579714441445821159899552833657258847387122230610

      x_4 = 1.76492191667642673997881594197180150375264581556217610599180

      x_5 = 1.76492191452577588999855009694526714223465227445279979234980

      x_6 = 1.76492191452577588275872359091145918341369327187630142639407

      x_7 = 1.76492191452577588275872359091145910137010325929468380899538

      x_8 = 1.76492191452577588275872359091145910137010325929468380899537

      x_9 = 1.76492191452577588275872359091145910137010325929468380899537

      x_10= 1.76492191452577588275872359091145910137010325929468380899537

Observe que as 60 casas já estavam essencialmente fixas em x_7.
Idem começando com x_0 = 1:

      x_0 = 1.0

      x_1 = -.31268499001775746780337724911043641120235781634885335468944

      x_2 = -.969348945031818065611907439335846882303667916572262328362349

      x_3 = -.707852893388296541096661556859958415031031829219070422866367

      x_4 = -.035339794721569226020881456270237795338901025119189258387864

      x_5 = -.656677952529219026913567601052316658353912970705735753309353

      x_6 = .611144574844926302627002097430914009338957075692438555595247

      x_7 = -.106725277909310153684948662830341872765813825977681926435996

      x_8 = -.728367939324361140849946676702971380538306949251068564612048

      x_9 = -.162097899325002229686980684385095803985250612037988093366303

      x_10= -.785258126350405280951472908980617587480914273676236765772256

Neste caso visivelmente começamos longe demais da solução... por
curiosidade continuei a calcular iteradas e obtive

      x_31 = 5.00000395070353994529512164951654054061897169734623343627173

      x_32 = 5.00000000002292504610552261815694719165221733820527317523875

      x_33 = 5.00000000000000000000077194161396618534093751775323781710474

      x_34 = 5.00000000000000000000000000000000000000000087525162394699554

      x_35 = 5.00000000000000000000000000000000000000000000000000000000000

      x_36 = 5.00000000000000000000000000000000000000000000000000000000000

Aliás, aqui estão os comandos maple utilizados:

> f := x -> x^5 - 5^x; fp := x -> 5 * x^4 - log(5) * 5^x;
> g := x -> evalf(x - f(x)/fp(x),60);
> x := 2.0;
> for i to 10 do x := g(x); od;        


[]s, N.
http://www.mat.puc-rio.br/~nicolau