Вы находитесь на странице: 1из 6

FISP 1/6

110 Computao para Engenharia Turmas EM1A, EM1B, EM2A e EM2B

12 Aula - Exerccios
Implementao Computacional do Mtodo Newton-Raphson
Mtodo das Aproximaes Sucessivas de Newton-Raphson: Utilizado para encontrar a raiz
ou razes de uma funo matemtica complexa. A raiz o ponto exato em que a funo cruza
o eixo x, ou seja, o valor de x que torna o resultado da funo igual a zero.
Aplicao do Mtodo:
1) Dada a funo f(x), ao qual se deseja calcular a raiz, determinar a derivada primeira da
funo: f(x)
2) Montar a expresso do Mtodo de Newton-Raphson (frmula de recorrncia) utilizada
para obter as aproximaes:

f ( xi )
xi +1 = xi
f ' ( xi )
3) Escolher o valor inicial (chute inicial) para comear as aproximaes. Se o grfico da
funo estiver disponvel, deve ser escolhido como chute inicial um valor prximo ao
ponto onde grfico cruza o eixo x (raiz da funo). Desta forma o programa convergir
rapidamente raiz da funo e, consequentemente, sero realizadas menos iteraes.
4) Comear o clculo com a expresso usando x=x1 (valor inicial ou chute inicial). Em
seguida, obter os demais valores de x por meio da expresso do Mtodo de Newton-
Raphson dada acima.
5) Continuar o procedimento at que o resultado atinja a preciso desejada.

Exemplo 1:

Calcular a raiz da funo f ( x) = x 2 5 ou f ( x) = x 2 5 = 0 x = 5

Figura 1 Grfica da funo

a
12 AULA - exerccios
FISP 2/6

110 Computao para Engenharia Turmas EM1A, EM1B, EM2A e EM2B


Frmula de recorrncia utilizada para realizar as aproximaes:
f ( xi ) xi2 5
xi +1 = xi = xi
f ' ( xi ) 2 xi
Comeando o clculo com x1 = 2 teremos a tabela abaixo como exemplo da aplicao
do mtodo de Newton-Raphson:

f (xi ) xi2 5
i xi x i +1 = xi = xi
f ' ( xi ) 2 xi

x1 = 2
22 5
1 x2 = 2 = 2 . 25
22
2 .2 5 2 5
2 x 2 = 2.25 x 3 = 2 . 25 = 2 . 2 36111 1111
2 2 . 25
3 x 3 = 2.236111111 x 4 =2.236067978
4 x 4 = 2.236067978 x 5 =2.236067977
5 x 5 = 2.236067977 x 6 =2.236067977
Logo se continuarmos aplicando a frmula de recorrncia do Mtodo de Newton
obteremos sempre o mesmo resultado, pois o mesmo convergiu para a raiz da funo, ou seja,
5 = 2.236068 (considerando apenas 6 casas aps o separador decimal).

Implementao computacional usando lao contado (FOR) para 10 iteraes.


#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int I;
float X=2; //declarao da varivel X e seu chute inicial
int main()
{
for (I=1;I<=10;I++) //laco contado para 10 iteracoes
{
printf("Valor de X%d=%f\n",I,X);
X=X-((X*X-5)/(2*X)); //formula de recorrencia de Newton que
} //calcula o novo valor de X (raiz da funo)
printf("raiz da funcao=%f\n",X);
system ("PAUSE");
}
Valor de X1=2.000000
Valor de X2=2.250000
Valor de X3=2.236111
Valor de X4=2.236068
Valor de X5=2.236068
SADA (OUTPUT) DO PROGRAMA: Valor de X6=2.236068
Valor de X7=2.236068
Valor de X8=2.236068
Valor de X9=2.236068
Valor de X10=2.236068
raiz da funcao=2.236068
Pressione qualquer tecla para continuar.

a
12 AULA - exerccios
FISP 3/6

110 Computao para Engenharia Turmas EM1A, EM1B, EM2A e EM2B

A implementao computacional do lao condicional (while) com controle de preciso de


0.000001 (1x10-6) para o mesmo exemplo apresentado a seguir. Neste caso no utilizaremos
a condio de exatido da repetio Xi+1=Xi, aplicada nos exemplos da Aula 12 - exemplos de
programas com estruturas de repetio. A explicao para no utilizarmos esta condio reside
no fato de que nem sempre a mesma pode ocorrer de fato, e a maioria dos profissionais opta
por descart-la em suas aplicaes. Alguns optam por substiturem por outra condio que
limita o nmero de repeties ou iteraes (imx=100), conforme pode ser visto no programa
abaixo.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int I=1;
double X=2,Aux=0;
int main()
{
while(fabs(X-Aux)>0.000001 && I<=100) //fabs eh o absoluto de um float
{ //operador E com Imax de 100
printf("Valor de X%d= %f\n",I,X); //apresenta o valor de X atual
Aux=X; //variavel que armazena o valor do X anterior
X=X-((X*X-5)/(2*X)); //formula de recorrencia de Newton
//calcula o novo valor de X (raiz da funo)
I++; //contador do numero de iteracoes
}
printf("Raiz da funcao=%f\n",X);
printf("Valor encontrado com %d iteracoes\n",I);
system("PAUSE");
}
SADA (OUTPUT) DO PROGRAMA: Valor de X1= 2.000000
Valor de X2= 2.250000
Notar que o valor da raiz da funo Valor de X3= 2.236111
apresentado o X5, por esta razo que Valor de X4= 2.236068
o programa indica 5 iteraes. Raiz da funcao=2.236068
Valor encontrado com 5 iteracoes
Pressione qualquer tecla para continuar.

importante observar a diferena entre os dois exemplos apresentados:


Embora ambos gerem o mesmo resultado para a raiz aproximada da funo, o
exemplo com o lao condicional while chegou ao resultado da raiz da funo em
5 iteraes, sendo 1 chute inicial e 4 aplicaes do mtodo de Newton-Raphson
ou frmula de recorrncia com preciso de clculo de 1x10-6. J o exemplo com
lao contado for foram geradas 11 aproximaes da raiz da funo, sendo 1
chute inicial e 10 aplicaes do mtodo de Newton-Raphson.

a
12 AULA - exerccios
FISP 4/6

110 Computao para Engenharia Turmas EM1A, EM1B, EM2A e EM2B

Exemplo 2: Calcular a raiz da funo f ( x) = x cos( x)


Comece o clculo com x1 = 1
Expresso utilizada para realizar as aproximaes:

f ( xi ) x cos( xi )
xi +1 = xi = xi i
f ' ( xi ) 1 + sen( xi )
Comeando o clculo com x1 = 1 teremos a tabela abaixo como exemplo da aplicao do
mtodo de Newton-Raphson:
f ( xi ) x i cos( x i )
i xi x i +1 = x i = xi
f ' ( xi ) 1 + sen ( x i )
1 1 0.750363867840244
2 0.750363867840244 0.739112890911362
3 0.739112890911362 0.739085133385284
4 0.739085133385284 0.739085133215161
5 0.739085133215161 0.739085133215161
6 0.739085133215161 0.739085133215161
7 0.739085133215161 0.739085133215161
8 0.739085133215161 0.739085133215161
9 0.739085133215161 0.739085133215161
10 0.739085133215161 0.739085133215161
Implementao computacional usando lao contado (FOR)

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int I;
float X=2;
int main()
{
for (I=1;I<=10;I++)
{
X=X-((X-cos(X))/(1+sin(X)));
printf("Valor de X%d=%f\n",I,X);
}
printf("raiz da funcao=%f\n",X);
system ("PAUSE");
}
SADA (OUTPUT) DO PROGRAMA: Valor de X1=0.734536
Valor de X2=0.739090
Valor de X3=0.739085
Valor de X4=0.739085
Valor de X5=0.739085
Valor de X6=0.739085
Valor de X7=0.739085
Valor de X8=0.739085
Valor de X9=0.739085
Valor de X10=0.739085
raiz da funcao=0.739085
Pressione qualquer tecla para continuar.

a
12 AULA - exerccios
FISP 5/6

110 Computao para Engenharia Turmas EM1A, EM1B, EM2A e EM2B

Implementao computacional usando lao condicional (WHILE) com controle de preciso de


0.000001.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int I=1;
double X=2,Aux=0;
int main()
{
while(fabs(X-Aux)>0.000001 && I<=100)
{
printf("Valor de X%d= %f\n",I,X);
Aux=X;
X=X-((X-cos(X))/(1+sin(X)));
I++;
}
printf("Raiz da funcao=%f\n",X);
printf("Valor encontrado com %d iteracoes\n",I);
system("PAUSE");
}

Valor de X1= 2.000000


Valor de X2= 0.734536
SADA (OUTPUT) DO PROGRAMA: Valor de X3= 0.739090
Valor de X4= 0.739085
Notar que o valor da raiz da funo
Raiz da funcao=0.739085
apresentado o X5, por esta razo que
Valor encontrado com 5 iteracoes
o programa indica 5 iteraes.
Pressione qualquer tecla para continuar..

Se considerarmos uma preciso de 1x10-3 obteramos a seguinte sada:


Valor de X1= 2.000000
Valor de X2= 0.734536
Valor de X3= 0.739090
Raiz da funcao=0.739085
Valor encontrado com 4 iteracoes
Notar que o mdulo da subtrao do valor da raiz da funo pelo valor de X3 igual a 5x10-6,
valor inferior preciso desejada de 1x10-3.
Nota: possvel alterar o nmero de algarismos do resultado da funo da seguinte forma:
printf("Raiz da funcao=%1.9f\n",X);
Para o exemplo acima a sada do programa ficaria:
Valor de X1= 2.000000
Valor de X2= 0.734536
Valor de X3= 0.739090
Valor de X4= 0.739085
Raiz da funcao=0.739085133
Valor encontrado com 5 iteracoes

Experimente alterar os valores de %N.Nf e verifique o resultado.

a
12 AULA - exerccios
FISP 6/6

110 Computao para Engenharia Turmas EM1A, EM1B, EM2A e EM2B


Exerccios propostos
1) Calcule a raiz das funes matemticas abaixo atravs de um lao contado
para um mximo de 15 iteraes.

a) f ( x) = x 3 19 (adote x1=3)
b) f ( x) = e 2 x + 5 x (adote x1=0)
c) f ( x) = ln x e 3 x (adote x1=2)

2) Calcule as razes das funes matemticas abaixo com controle de preciso


de 0.000001, e tambm determinando quantas iteraes sero necessrias
para se atingir esta preciso. O programa dever ter um limite de iteraes da
frmula de recorrncia de Newton-Raphson, tal como mostrado nos exemplos
desta nota de aula.

a) f ( x) = ln x e 3 x (adote x1=2)
b) f ( x) = ln x ( x 2 4) (adote x1=1)
c) f ( x) = x 7 + 4 x 3 + 12 (adote x1=-1.5)

Respostas:
1)
a) 2.668402
b) -0.148584
c) 1.044525

2)
a) 1.044525 com 7 iteraes
b) 2.186888 com 7 iteraes
c) -1.236927 com 6 iteraes

a
12 AULA - exerccios