Você está na página 1de 2

Fernando Henrique Gomes Zucatelli 1

1. CÁLCULO NUMÉRICO
Algoritmo de Newton-Raphson
A Figura 1 mostra o gráfico das funções cujas raízes serão determinadas pelo método.

a) b)
3 2
Figura 1 – Gráfico da funções: a) x + 3 x − 1 e b) x − co s( x ) gerados por Matlab.
A partir da Figura 1 foram decididos os valores para o “chute” inicial. Algoritmo do item a) e
sublinhada as linhas alteradas para o item b). Algoritmo:
function x0 = newton_raphson_itema(F, dF, x0, imax, tipo_tol)
%Função que calcula a raiz da de F(x) = 0
%F = função
%dF = derivada da função em relação a uma variável.
%x0 = valor do chute
%imax = número máximo de iterações
F = inline(F); %o usuário digita apenas 'f(x)'
dF = inline(dF); %o usuário digita apenas 'df(x)'
tol = 10^-6;
%Vamos calcular a raiz
for i = 1:imax,
if feval(dF,x0) == 0,%verifico se não é ponto crítico
if feval(F,x0) == 0,%verifico se é pt. critico e raiz
fprintf('Uma solução exata x = %11.6f foi obtida num ponto crítico\n\n', x1);
break;
else
fprintf('Erro: %11.6f é ponto crítico e não é raiz da função.',x0);
break;
end
end
x1 = x0 - (feval(F,x0)/feval(dF,x0)); %Solução numérica aproximada até aqui método de Newton-
Raphson
Fx1 = feval(F,x1);%valor da iteração x(n+1)
%Tolerância atual, abs é o módulo
if tipo_tol == 1; %tipo de tolerancia escolhida pelo usuário
toli = abs((Fx1-feval(F,x0))/2); %tolerancia a ser usada em 'x^3+3*x^2-1'
else
toli = abs(x1-x0)/2; %tolerancia a ser usada em 'x-cos(x)'
end
fprintf('%3i x(n-1) = %11.6f raiz = %11.6f F(raiz) = %11.6f tolerancia =
%11.6f\n\n',i,x0,x1,Fx1,toli);
if Fx1 == 0; %análise
fprintf('Uma solução exata x = %11.6f foi obtida\n\n', x1);
break;
end
if toli < tol,
fprintf('Tolerância atingida!\n\n', x1);
break;
end
if i == imax,
fprintf('Número máximo de iterações atingido!\n\n', x1);
break;
end
x0 = x1; %preparando próximo condição do próximo ciclo.
end

Resultado a). f ( x ) = x 3 + 3 x 2 − 1

• Chute x0 = -2.5:
newton_raphson_itema( 'x^3+3*x^2-1', '3*x^2+6*x', -2.5, 20 , 1)
1 x(n-1) = -2.500000 raiz = -3.066667 F(raiz) = -1.626963 tolerancia = 1.875981
2 x(n-1) = -3.066667 raiz = -2.900876 F(raiz) = -0.165860 tolerancia = 0.730551

sexta-feira – 01/10/2010 – 21:45


Fernando Henrique Gomes Zucatelli 2
3 x(n-1) = -2.900876 raiz = -2.879720 F(raiz) = -0.002543 tolerancia = 0.081659
4 x(n-1) = -2.879720 raiz = -2.879385 F(raiz) = -0.000001 tolerancia = 0.001271
5 x(n-1) = -2.879385 raiz = -2.879385 F(raiz) = -0.000000 tolerancia = 0.000000
Tolerância atingida! ans = -2.87938532466927
Dada a precisão de 6 casas: raiz = -2.879385
• Chute x0 = -2:
newton_raphson_itema( 'x^3+3*x^2-1', '3*x^2+6*x', -2, 20 , 1)
Erro: -2.000000 é ponto crítico e não é raiz da função.
ans = -2
• Chute x0 = -1.9:
newton_raphson_itema(-1.9,20)
1 x(n-1) = -1.900000 raiz = 3.312281 F(raiz) = 68.253316 tolerancia = 32.641158
2 x(n-1) = 3.312281 raiz = 2.019293 F(raiz) = 19.466392 tolerancia = 24.393462
3 x(n-1) = 2.019293 raiz = 1.219799 F(raiz) = 5.278682 tolerancia = 7.093855
4 x(n-1) = 1.219799 raiz = 0.771790 F(raiz) = 1.246703 tolerancia = 2.015990
5 x(n-1) = 0.771790 raiz = 0.577530 F(raiz) = 0.193254 tolerancia = 0.526724
6 x(n-1) = 0.577530 raiz = 0.534256 F(raiz) = 0.008781 tolerancia = 0.092236
7 x(n-1) = 0.534256 raiz = 0.532094 F(raiz) = 0.000022 tolerancia = 0.004380
8 x(n-1) = 0.532094 raiz = 0.532089 F(raiz) = 0.000000 tolerancia = 0.000011
9 x(n-1) = 0.532089 raiz = 0.532089 F(raiz) = 0.000000 tolerancia = 0.000000
Tolerância atingida! ans = 0.53208888627014.
Dada a precisão de 6 casas: raiz = 0.532089. Percebe-se que para este valor o algoritmo convergiu
para uma raiz mais distante do valor do chute (confira próximo resultado).
• Chute x0 = -1.5:
newton_raphson_itema( 'x^3+3*x^2-1', '3*x^2+6*x', -1.5, 20 , 1)
1 x(n-1) = -1.500000 raiz = -0.444444 F(raiz) = -0.495199 tolerancia = 1.435099
2 x(n-1) = -0.444444 raiz = -0.683201 F(raiz) = 0.081398 tolerancia = 0.288298
3 x(n-1) = -0.683201 raiz = -0.653042 F(raiz) = 0.000892 tolerancia = 0.040253
4 x(n-1) = -0.653042 raiz = -0.652704 F(raiz) = 0.000000 tolerancia = 0.000446
5 x(n-1) = -0.652704 raiz = -0.652704 F(raiz) = 0.000000 tolerancia = 0.000000
Tolerância atingida! ans = -0.65270368975208
Dada a precisão de 6 casas: raiz = -0.652704.

Resultado b) f ( x ) = x − co s( x )

• Chute x0 = 0.75:
newton_raphson_itema( 'x-cos(x)', '1+sin(x)', 0.75, 20 , 0)
1 x(n-1) = 0.750000 raiz = 0.739111 F(raiz) = 0.000044 tolerancia = 0.005444
2 x(n-1) = 0.739111 raiz = 0.739085 F(raiz) = 0.000000 tolerancia = 0.000013
3 x(n-1) = 0.739085 raiz = 0.739085 F(raiz) = 0.000000 tolerancia = 0.000000
Uma solução exata x = 0.739085 foi obtida
ans = 0.73908513336448
Dada a precisão de 6 casas: raiz = 0.739085.

sexta-feira – 01/10/2010 – 21:45