Escolar Documentos
Profissional Documentos
Cultura Documentos
MÉTODOS ITERATIVOS:
Implementação dos métodos de Newton-Raphson, Método da Bissecção e Método da
Substituição Sucessiva
Diamantina
2015
UNIVERSIDADE FEDERAL DOS VALES DO JEQUITINHONHA E MUCURI
INSTITUTO DE CIÊNCIA E TECNOLOGIA
CURSO DE BACHARELADO EM ENGENHARIA QUÍMICA
MÉTODOS ITERATIVOS:
Implementação dos métodos de Newton-Raphson, Método da Bissecção e Método da
Substituição Sucessiva
Diamantina
2015
1.0 INTRODUÇÃO
Dentre os programas pagos mais utilizados estão o Matlab e o Maple, cuja utilização no
meio acadêmico nem sempre é viável devido ao preço impostos pelos proprietários e a
dificuldade de distribuição legal para os estudantes. A fim de apresentarem as diferenças entre
softwares pagos e livres, alguns autores descrevem uma metodologia comparando dois softwares
de naturezas diferentes e que possuem praticamente as mesmas funções. Segundo POLON et.
all., (2006) alguns programas como planilhas de cálculo Gnumeric versus Excel, o software de
manipulação simbólica Maxima versus Maple, o software de manipulação numérica Octave
versus Matlab apresentaram desempenho muito próximos quanto ao tipo de problema analisado,
com pequenas vantagens para os proprietários .
A maioria dos softwares gratuitos possui “funções como cálculos matriciais, resolução de
integrais, derivadas, manipulação de vetores em geometria, análise numérica, além da construção
e visualização de gráficos de funções” (GREPINO & RODRIGUES, 2015). Dentre suas maiores
vantagens está o fato de permitir distribuição livre e acesso ao código fonte do programa
2
garantindo ao usuário informações de alta qualidade, além da linguagem e estrutura serem mais
interativas e de fácil utilização (GREPINO & RODRIGUES, 2015).
Dentre os softwares livres mais utilizados está o Scilab, um software científico para
computação numérica bem próximo do Matlab, cuja distribuição é gratuita e por essa razão é
muito utilizado em diversos ambientes industriais e educacionais ao redor do mundo. Dentre suas
ferramentas mais utilizadas as que serão importantes no decorrer da disciplina são: construção de
gráficos em duas e três dimensões, álgebra linear e matrizes, polinômios e funções racionais,
interpolação, e a simulação que envolve um solver de sistemas de equações diferenciais.
Nas mais diversas áreas das ciências exatas ocorrem, frequentemente, situações que
envolvem a resolução de uma equação do tipo f(x)=0. Um número real ξ é um zero da função
f(x) ou uma raiz da equação f(x)=0 se f(ξ)=0. Para encontrar zeros da função em polinômios, por
exemplo, caso a equação seja do segundo grau, utilizamos a fórmula de Báskara, mas a solução
de polinômios de graus maiores envolvem cálculos com aproximações possíveis graças aos
métodos numéricos. A ideia central destes métodos numéricos é partir de uma aproximação
inicial para a raiz (um intervalo onde imaginamos a raiz estar contida) e em seguida refinar essa
aproximação através de um processo iterativo.
A primeira fase para resolução desses problemas consiste em identificar um intervalo que
contém a raiz. No caso do problema apresentado nesse relatório, o intervalo já foi dado. A
segunda fase consiste em escolher aproximações iniciais que estão dentro do intervalo e
melhorá-las sucessivamente até obter uma aproximação para a raiz dentro de uma margem de
erro fixada. Para isso três métodos numéricos serão testados a fim de identificar qual apresenta
melhor precisão e qual método é o mais rápido, ou seja, qual exige menos iterações.
3
Tomando-se a função f(x) tal que se deseja procurar a sua raiz. Para isso tem-se uma
função f(x)=0, colocando esta função na forma de g(x)=x, o x é isolado, e o mesmo nada mais é
que a raiz que será o ponto fixo da função g(x) e é o que deve ser procurada, contudo é gerada
uma nova função, que por sinal é função do x que é a raiz. Dessa forma, para encontrar uma raiz
de f(x), pode-se encontrar um valor numérico que substituindo em g(x) retorna o próprio valor
de x. A ideia nada mais é que estabelecer uma interpretação interativa para esta forma
alternativa, para isso é necessária uma aproximação inicial, tal que não seja muito distante da
raiz pretendida.
Para encontrar o valor de x, deve-se utilizar um processo interativo (como já citado
acima), portanto para começar a calcular o valor de g(x), é necessário estimar um valor inicial
para x (𝑥0), onde será recalculado repetidas vezes o valor de g(x), sempre usando o resultado de
uma dada interação com a nova estimativa de x (daí a denominação Substituição Sucessiva), ou
seja, é expresso da seguinte forma:
𝑥𝑘+1=g(𝑥𝑘)
onde, k é a ordem da interação (0, 1, 2, ..., n). E a função g(x) é denominada como função de
interação. Contudo para uma função 𝑓(𝑥), existe diversas funções interativas que podem ser
usadas no processo em busca do x que é a raiz. Vale ressaltar que o método só para quando os
dois últimos valores possuem casas decimais que atendam a tolerância exigida. O método de
convergência é:
Graficamente, o método procura o ponto no qual a curva de interação f(x)=g(x), na qual coincide
na reta tal que f(x)=x. Pode ser observado na figura 1 .
4
Figura 1: Interpretação gráfica do Método da Substituição sucessiva na qual a função converge. Fonte: (PINTO,
1997).
O que o Método de Newton-Raphson faz para acelerar a convergência é escolher para função
de iteração a função (x) tal que ’(ξ)=0. Dessa forma, é dada a equação f(x)=0 e partindo da
forma geral para (x), queremos obter a função A(x) tal que ’(ξ)=0. A forma geral para a
função de iteração:
𝑓(𝑥)
Então, dada f(x), a função de iteração (x) 𝑥 − 𝑓′(𝑥) será tal que ’(ξ) 0, pois como pode-se
verificar:
𝑓(𝑥)𝑓′′(𝑥)
’(x) = [𝑓′(𝑥)]2
5
𝑓(𝑥𝑘)
Assim, escolhido xo, a sequência {xk} será determinada por xk+1 = xk - 𝑓′(𝑥𝑘), k = 0, 1, 2…
Este método apresenta algumas condições de convergências, tais são apresentadas por
possuir:
dado o ponto (xk, f(xk)) traçamos a reta Lk(x) tangente à curva neste ponto: Lk(x) = f(xk)+
f’(xk)(x-xk) . Lk(x) é um modelo linear que aproxima a função f(x) numa vizinhança de xk.
Encontrando o zero deste modelo, obtemos:
𝑓(𝑥𝑘)
Lk(x)=0 ↔ x= xk - 𝑓′(𝑥𝑘).
Figura 2. Representação gráfica do Método de Newton-Raphson. Fonte: (RUGGIERO & LOPES, 1996).
6
1.4 Método da Bissecção
Seja y = f(x) uma função contínua em um intervalo [a,b] que contém uma, e só uma, raiz,
ξ, da equação f(x) = 0. Este método consiste em dividir o intervalo [a, b], de forma iterativa, ao
meio. Para verificar se a raiz está contida na primeira ou na segunda metade do intervalo inicial,
é utilizado o teorema de Bolzano. Em seguida, o processo é repetido para aquela metade que
contém a raiz de f(x) = 0, ou seja, aquela em que a função, y = f(x), tem valores numéricos com
sinais opostos nos seus extremos.
Considerando que em cada iteração é atualizado o ponto “a” ou “b”, tem-se que a função
𝑎+𝑏
de iteração desse método é dada por: xk = , onde k=1, 2, 3...
2
Dada uma precisão ξ, o processo iterativo é finalizado quando se obtém um intervalo cujo
tamanho é menor ou igual a ξ, então qualquer ponto nele contido pode ser tomado como uma
estimativa para a raiz; ou quando for atingido um número máximo de iterações.
Se y = f(x) for contínua em [a, b] e f(a).f(b) < 0, então o método da Bisseção gera uma
sequência que converge para uma raiz de f(x) = 0.
É possível também prever o número mínimo de iterações para calcular uma raiz ξ com
uma precisão ξ a partir de um intervalo [a, b], mas não será abordado nesse relatório.
2.0 METODOLOGIA
Método de Newton-Raphson;
Métodos da Bissecção
Método da Substituição Sucessiva (utilizando a forma recursiva);
7
A equação utilizada para a construção dos algoritmos para o cálculo de c, variando os
valores de φ2, e comparando a relação de não linearidade da função f(c), para os três métodos, é
dada abaixo:
𝑑𝑐
= 15𝑐 − 15𝑐2 + 𝜑 2 𝑓(𝑐)
𝑑𝑡
𝑐2 = 1,0
A) 𝜑 2 = 1, 𝑓(𝑐) = 𝑐
B) 𝜑 2 = 40, 𝑓 (𝑐) = 𝑐
C) 𝜑 2 = 1, 𝑓 (𝑐) = 𝑐 2
D) 𝜑 2 = 1000, 𝑓 (𝑐) = 𝑐⁄(1 + 𝛼𝑐)2 , 𝛼 = 20
(15𝑐2 − 𝜑 2 𝑓(𝑐𝑘 ))
𝑐𝑘+1 =
15
𝑑𝑦
A) , para 𝜑 2 = 1; 𝑐2 = 1,0, f(c) = c
𝑑𝑐
𝑑𝑦
= 15 + 𝜑 2
𝑑𝑐
8
𝑑𝑦
B) , para 𝜑 2 = 40; 𝑐2 = 1,0, f(c) = c
𝑑𝑐
𝑑𝑦
= 15 + 𝜑 2
𝑑𝑐
𝑑𝑦
C) , para 𝜑 2 = 1; 𝑐2 = 1,0, f(c) = c2
𝑑𝑐
𝑑𝑦
= 15 + 2𝑐𝜑 2
𝑑𝑐
𝑑𝑦
D) , para 𝜑 2 = 1; 𝑐2 = 1,0, 𝑓(𝑐) = 𝑐⁄(1 + 𝛼𝑐)2 , 𝛼 = 20
𝑑𝑐
𝑑𝑦 (1 − 𝛼𝑐)
= 15 + 𝜑 2 (
𝑑𝑐 (1 + 𝛼𝑐)3
Para realizar o método da bissecção, foi definido o valor de ‘a’ e ‘b’ de acordo
com o intervalo estabelecido pelo problema [0,5;1], onde determinou f(a) e f(b),
posteriormente calculou a raiz (c) contida naquele intervalo utilizando o ponto médio do
intervalo dado pela seguinte equação ((a+b)/2), calculou-se f(c). Caso o valor de f(c)
tenha o mesmo sinal de f(a) o novo intervalo de busca deve ser [b,c], e quando f(c) possui
o mesmo sinal de f(b), o novo intervalo será [a,c]. O procedimento é repetido até o
intervalo e/ ou f(a) e f(b) sejam menores que a tolerância especificada.
3.0 RESULTADOS
3.1.1 Alternativa A
𝜑 2 = 1; 𝑐2 = 1,0, 𝑓(𝑐) = 𝑐
3.1.2 Alternativa B
3.1.3 Alternativa C
𝜑 2 = 1; 𝑐2 = 1,0, 𝑓(𝑐) = 𝑐 2
10
Tabela 3. Resultado para a alternativa C do Método da Substituição Sucessiva
Método Substituição Sucessiva
Raiz encontrada 0.9409715
Tolerância 1,00x10-6
Número de iterações 6
Chute inicial 1
3.1.4 Alternativa D
3.2.1 Alternativa A
𝜑 2 = 1; 𝑐2 = 1,0, 𝑓(𝑐) = 𝑐
Método Newton-Raphson
Raiz encontrada 0.9375
Tolerância 1,00x10-6
Número de iterações 1
Chute inicial 1
11
3.2.2 Alternativa B
Método Newton-Raphson
Raiz encontrada 0.2727273
Tolerância 1,00x10-6
Número de iterações 1
Chute inicial 1
3.2.3 Alternativa C
𝜑 2 = 1; 𝑐2 = 1,0, 𝑓(𝑐) = 𝑐 2
Método Newton-Raphson
Raiz encontrada 0.9409715
Tolerância 1,00x10-6
Número de iterações 2
Chute inicial 1
3.2.4 Alternativa D
Método Newton-Raphson
Raiz encontrada 0.819303
Tolerância 1,00x10-6
12
Número de iterações 3
Chute inicial 1
3.3.1 Alternativa A
𝜑 2 = 1; 𝑐2 = 1,0, 𝑓(𝑐) = 𝑐
Método Bissecção
Raiz encontrada 0.937500
Tolerância 1,00x10-6
Número de iterações 2
Chute inicial 1
3.3.2 Alternativa B
Método Bissecção
Raiz encontrada 1.000000
Tolerância 1,00x10-6
Número de iterações 19
Chute inicial 1
3.3.3 Alternativa C
𝜑 2 = 1; 𝑐2 = 1,0, 𝑓(𝑐) = 𝑐 2
13
Tabela 11. Resultado para a alternativa C do Método da Bissecção
Método Bissecção
Raiz encontrada 0.940972
Tolerância 1,00x10-6
Número de iterações 19
Chute inicial 1
3.3.4 Alternativa D
Método Bissecção
Raiz encontrada 0.819303
Tolerância 1,00x10-6
Número de iterações 19
Chute inicial 1
4.0 CONCLUSÃO
14
entre as raízes entre o Método de Newton-Raphson e do Método da Bissecção, que pode ser
explicado pelo fato do valor encontrado no Método da Bissecção possa ser igual 1, isso não
corresponder a uma raiz, uma vez que a raiz tem que estar dentro do intervalo.
5.0 BIBLIOGRAFIA
BURDEN, R. L., FAIRES, D., LIVRO ANÁLISE NUMÉRICA (8ª Edição), 2008.
PILLING, S. Métodos numéricos para encontrar raízes (zeros) de funções reais – UNIVAP.
Disponível em: http://www1.univap.br/spilling/CN/CN_Capt2.pdf. Acessado em 27/11/2015.
15
UNESP, Método das Aproximações Sucessivas ou Método de Integração Linear (MIL),
disponível em: <http://www2.sorocaba.unesp.br/professor/amartins/aulas/numerico/mil.pdf>.
Acessado em 27/11/2015.
ANEXOS:
Método Bissecção:
//BISSECÇÃO - ALTERNATIVA A
clc;
clear;
mode(0);
lines(0);
disp(" MÉTODO DA BISSEÇÃO");
endfunction
if f(c0)*f(c1)>0 then
16
c2=1;
fi2=1;
intervalo_superior=1;
intervalo_inferior=0.5;
num_max_it=150;
tolerancia=10^(-6);
[c,num_iter]=bissec(intervalo_inferior,intervalo_superior,tolerancia,num_max_it);
//BISSECÇÃO - ALTERNATIVA B
clc;
clear;
mode(0);
lines(0);
disp(" MÉTODO DA BISSEÇÃO");
endfunction
if f(c0)*f(c1)>0 then
c2=1;
fi2=40;
intervalo_superior=1;
intervalo_inferior=0.5;
num_max_it=150;
17
tolerancia=10^(-6);
[c,num_iter]=bissec(intervalo_inferior,intervalo_superior,tolerancia,num_max_it);
//BISSECÇÃO - ALTERNATIVA C
clc;
clear;
mode(0);
lines(0);
disp(" MÉTODO DA BISSEÇÃO");
endfunction
if f(c0)*f(c1)>0 then
c2=1;
fi2=1;
intervalo_superior=1;
intervalo_inferior=0.5;
num_max_it=150;
tolerancia=10^(-6);
[c,num_iter]=bissec(intervalo_inferior,intervalo_superior,tolerancia,num_max_it);
18
//BISSECÇÃO - ALTERNATIVA D
clc;
clear;
mode(0);
lines(0);
disp(" MÉTODO DA BISSEÇÃO");
endfunction
if f(c0)*f(c1)>0 then
c2=1;
fi2=1000;
intervalo_superior=1;
intervalo_inferior=0.5;
alfa=20;
num_max_it=150;
tolerancia=10^(-6);
[c,num_iter]=bissec(intervalo_inferior,intervalo_superior,tolerancia,num_max_it);
19
Método de Newton Rapson:
// NEWTON-RAPHSON - ALTERNATIVA A
clc;
clear;
mode(0);
lines(0);
disp(" MÉTODO DE NEWTON-RAPHSON");
disp('-------------------------------');
function func=f(c)
c2=1;
fi2=1;
func=15*c-15*c2+fi2*c;
endfunction
function func=derivada(c)
c2=1;
fi2=1;
func=15+fi2;
endfunction
return(c);
erro=0;
end
N=N-1;
cc=cn;
end
erro=1
c=cn;
return(c);
abort
endfunction
nmac=5000;
c2=1;
fi2=1;
tolerancia=10^(-6);
c0=1;
c0=1;
erro=0;
[c]=newton(c0,tolerancia,nmac,erro)
if erro==1 then
20
disp (" O ALGORITMO NÃO CONVERGIU!");
disp('-------------------------------');
else
disp('A solução é:');
disp(c);
disp('-------------------------------');
end
// NEWTON-RAPHSON - ALTERNATIVA B
clc;
clear;
mode(0);
lines(0);
disp(" MÉTODO DE NEWTON-RAPHSON");
disp('-------------------------------');
function func=f(c)
c2=1;
fi2=40;
func=15*c-15*c2+fi2*c;
endfunction
function func=derivada(c)
c2=1;
fi2=40;
func=15+fi2;
endfunction
return(c);
erro=0;
end
N=N-1;
cc=cn;
end
erro=1
c=cn;
return(c);
abort
endfunction
21
nmac=5000;
c2=1;
fi2=40;
tolerancia=10^(-6);
c0=1;
erro=0;
[c]=newton(c0,tolerancia,nmac,erro)
if erro==1 then
disp (" O ALGORITMO NÃO CONVERGIU!");
disp('-------------------------------');
else
disp('A solução é:');
disp(c);
disp('-------------------------------');
end
// NEWTON-RAPHSON - ALTERNATIVA D
clc;
clear;
mode(0);
lines(0);
disp(" MÉTODO DE NEWTON-RAPHSON");
disp('_________________________');
function func=f(c)
c2=1;
fi2=1000;
func=(15*c)-(15*c2)+fi2*(c/((1+alfa*c)^2));
endfunction
function func=derivada(c)
c2=1;
fi2=1000;
func=15+fi2*((1-20*c)/((1+20*c)^3));
endfunction
return(c);
22
erro=0;
end
N=N-1;
cc=cn;
end
erro=1
c=cn;
return(c);
abort
endfunction
alfa=20;
nmac=5000;
c2=1;
fi2=1;
tolerancia=10^(-6);
c0=1;
erro=0;
[c]=newton(c0,tolerancia,nmac,erro)
if erro==1 then
disp (" O ALGORITMO NÃO CONVERGIU!");
disp('____________________________');
else
disp('A solução é:');
disp(c);
disp('_________________________________');
end
// NEWTON-RAPHSON - ALTERNATIVA C
clc;
clear;
mode(0);
lines(0);
disp(" MÉTODO DE NEWTON-RAPHSON");
disp('-------------------------------');
function func=f(c)
c2=1;
fi2=1;
func=15*c-(15*c2)+fi2*(c^2);
endfunction
function func=derivada(c)
c2=1;
fi2=1;
func=15+2*fi2*c;
endfunction
23
disp(f(cc));
disp(derivada(cc));
disp(cn);
disp('----------------');
if abs(cc-cn)<tolerancia then
c=cn;
printf("O número de interações é %d:\n\n",(nmac-N))
return(c);
erro=0;
end
N=N-1;
cc=cn;
end
erro=1
c=cn;
return(c);
abort
endfunction
nmac=5000;
c2=1;
fi2=1;
tolerancia=10^(-6);
c0=1;
erro=0;
[c]=newton(c0,tolerancia,nmac,erro)
if erro==1 then
disp (" O ALGORITMO NÃO CONVERGIU!");
disp('-------------------------------');
else
disp('A solução é:');
disp(c);
disp('-------------------------------');
end
Substituição Sucessiva:
clc;
clear;
mode(0);
lines(0);
disp(" MÉTODO DA SUBSTITUIÇÃO SUCESSIVA");
disp('_________________________________');
function func=f(c)
c2=1
fi2=1
func=(15*c2-(fi2*c))/15
endfunction
24
function c=substituicaosucessiva(c0, num_max_int, tolerancia)
N=num_max_int;
cc=c0;
while N>0
cn=f(cc);
if abs(cc-cn)<tolerancia then
c=cn;
disp ("O número de interações é:")
disp (num_max_int-N);
return(c);
end
N=N-1;
cc=cn;
end;
error ("Algoritmo não convergiu.")
abort
endfunction
c2=1;
fi2=1;
//ITERAÇÕES Usadas
num_max_int=150;
f0=1;
tolerancia=10^-6;
c0=f0;
c=substituicaosucessiva(c0,num_max_int,tolerancia)
disp("A solução do problema é:")
disp(c);
clc;
clear;
mode(0);
lines(0);
disp(" MÉTODO DA SUBSTITUIÇÃO SUCESSIVA");
disp('_________________________________');
function func=f(c)
c2=1
fi2=40
func=(15*c2-(fi2*c))/15
endfunction
25
disp ("O número de interações é:")
disp (num_max_int-N);
return(c);
end
N=N-1;
cc=cn;
end;
error ("Algoritmo não convergiu.")
abort
endfunction
c2=1;
fi2=40;
//ITERAÇÕES Usadas
num_max_int=150;
f0=1;
tolerancia=10^-6;
c0=f0;
c=substituicaosucessiva(c0,num_max_int,tolerancia)
disp("A solução do problema é:")
disp(c);
clc;
clear;
mode(0);
lines(0);
disp(" MÉTODO DA SUBSTITUIÇÃO SUCESSIVA");
disp('__________________________________');
function func=f(c)
c2=1
fi2=1
func=(15*c2-(fi2*(c^2)))/15
endfunction
26
//c2=1;
//fi2=1;
//Iterações Usadas//
nmax=15000;
f0=1;
tolerancia=10^-6;
c0=f0;
c=substituicaosucessiva(c0,nmax,tolerancia)
disp("A solução é:")
disp(c);
clc;
clear;
mode(0);
lines(0);
disp(" MÉTODO DA SUBSTITUIÇÃO SUCESSIVA");
disp('__________________________________');
function func=f(c)
c2=1
fi2=1000
func=(15*c2-(fi2*(c/(1+alfa*c)^2)))/15
endfunction
alfa=20;
nmax=150;
f0=1;
27
tolerancia=10^-6;
c0=f0;
c=substituicaosucessiva(c0,nmax,tolerancia)
disp("A solução é:")
disp(c);
28