Professional Documents
Culture Documents
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
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.