Sei sulla pagina 1di 13

UNIVERSIDADE FEDERAL DE PERNAMBUCO

CENTRO ACADMICO DO AGRESTE


NCLEO DE TECNOLOGIA
CURSO: ENGENHARIA DE PRODUO






TRABALHO 02: CLCULO DE RAZES DE FUNES
NO LINEARES









Danielle Maysa de Lima Oliveira
Denis Ferreira da Silva Filho




Caruaru, 21 de maio de 2014.

UNIVERSIDADE FEDERAL DE PERNAMBUCO
CENTRO ACADMICO DO AGRESTE
NCLEO DE TECNOLOGIA
CURSO: ENGENHARIA DE PRODUO






TRABALHO 02: CLCULO DE RAZES DE FUNES
NO LINEARES






Relatrio referente ao segundo trabalho
da disciplina de Clculo Numrico,
solicitado pelo professor Alessandro,
que diz respeito ao clculo de razes de
funes no lineares a partir de: mtodo
da bisseco, mtodo da iterao linear,
e o mtodo de Newton-Raphson.






Caruaru, 21 de maio de 2014.
1. Introduo
O presente trabalho tem como objetivo principal proporcionar o clculo de razes de
funes no lineares a partir dos seguintes mtodos: mtodo da bisseco, mtodo
da iterao linear, e o mtodo de Newton-Raphson. A criao do programa
comparacaodemetodos.m foi desenvolvida utilizando-se o programa MATLAB, que
foi fundamental para o desempenho do cdigo de execuo, em que este vai
mostrar o funcionamento de cada um dos mtodos para o clculo das razes.
O mtodo da bisseco um mtodo numrico para encontrar as razes de uma
funo, esta sendo f(x) contnua com x pertencente aos reais definida
num intervalo [a,b], tendo f(a) e f(b) sinais opostos, ou seja, f(a).f(b)0. Como f(a) e
f(b) tm sinais opostos e f(x) contnua, pelo teorema do valor
intermedirio podemos afirmar que existe uma raiz neste intervalo [a,b]. Vamos
considerar tambm que esta raiz seja a nica no intervalo.

O mtodo consiste em
dividir o intervalo em dois no seu ponto mdio c (c=(a+b)/2), e ento verificar em
qual dos dois novos intervalos se encontra a raiz. Ao encontrar o ponto c existem
apenas trs opes, ou f(a).f(c)<0 e neste caso sabemos que a raiz se encontra no
intervalo [a,c], tornando c o nosso "novo b", ou f(b).f(c)<0 (f(a).f(c)>0) e neste caso
sabemos que o zero da funo se encontra no intervalo [c,b], tornando c o nosso
"novo a", ou f(c)=0 e com isso sabemos que c a raiz de nossa funo. O processo
pode ser repetido, tornando cada intervalo a metade do anterior e, com isso,
dividindo o erro tambm por dois. O erro absoluto mximo ser sempre metade do
intervalo em questo.
O mtodo da iterao linear um processo iterativo que apresenta vantagens e
desvantagens em relao ao mtodo da bisseco. Seja uma funo f(x) contnua
em um intervalo [a,b] que contenha uma raiz de f(x). O Mtodo de Iterao Linear
inicia-se reescrevendo a funo f(x) como, f(x) = (x) x. Essa forma de escrever
f(x) bastante til. No ponto x que corresponde raiz de f(x), isto , f(x) = 0, teremos
que:
f(x) = (x) x =0
(x) = x
ou seja, no ponto x que corresponde raiz de f(x), ao substituirmos o valor de x na
funo (x), teremos como resultado o prprio valor de x. Portanto, a raiz de f(x)
ser o ponto fixo de (x), ou seja, o valor que ao ser substitudo em (x) retorna o
prprio valor de x. Para encontrarmos esse valor de x, vamos utilizar um processo
iterativo, onde comeamos a calcular o valor de (x) com um valor inicial de x, e
recalculamos repetidamente o valor de (x) sempre usando o resultado de uma
dada iterao como a nova estimativa de x, ou seja, fazendo: Xk+1=(Xk) , onde, k
a ordem da iterao em que estamos (k = 0, 1, 2, 3, 4, ...). A funo (x) chamada
de funo de iterao. Pode-se notar que dada uma funo f(x) existem diversas
funes de iterao que podem ser usadas no processo.
O mtodo de Newton-Raphson utilizado para estimar razes de equaes no
lineares desde que a funo sob anlise seja contnua e diferencivel e sua equao
possua uma soluo suficientemente prxima a uma estimativa inicial. necessria
tambm a convergncia do mtodo, ou seja, a estimativa inicial deve estar em um
intervalo delimitado que contenha uma s raiz de f e nem a primeira nem a segunda
derivada do intervalo devem trocar de sinal, alm de sua primeira derivada nunca
ser nula. O primeiro passo do mtodo de Newton-Raphson a escolha de um
intervalo apropriado. Em seguida escolhe-se a estimativa inicial como um dos
extremos do intervalo, sendo o mais adequado aquele que f(x1)*f (x1) > 0. A
estimativa seguinte obtida com o cruzamento do eixo x pela reta tangente a f(x) no
ponto (x1, f(x1)), seguindo-se este passo at ser determinada a raiz. Sendo este
mtodo generalizado por:

.
Para se obter um resultado coerente e preciso com um processo iterativo,
necessrio que a cada iterao a resposta se aproxime mais e mais da soluo real,
ou seja, que o mtodo convirja para o valor real. No mtodo da iterao linear, a
convergncia no garantida a priori. A cada iterao podemos nos aproximar ou
nos afastar da soluo real. Portanto, antes de resolver um problema atravs desse
mtodo preciso se verificar se haver ou no a convergncia. O seguinte Teorema
coloca condies suficientes, porm no necessrias para que o mtodo de iterao
linear seja convergente. Teorema: Seja uma funo f(x) contnua em um intervalo
[a,b] e uma raiz de f(x) contida em [a,b].
Seja (x) uma funo de iterao obtida a partir de f(x).
Se:
i) (x) e (x) forem contnuas em [a,b];
ii) |(x)| < 1 para todo x E [a,b];
iii) X0 E [a,b].
Ento: lim Xn =
n
Abaixo se encontra o cdigo comentado:
%Programa para calcular razes de funes no lineares
%Criado por: Danielle Maysa e Denis Ferreira
%Nome do cdigo: comparacaodemetodos.m
% informado um men em que este proporciona a execuo dos cdigos na
seguinte ordem: mtodo da bisseco, mtodo da iterao linear, mtodo de
Newton-Rhapson
clc;
clear all;
sair = 0;
%varivel que percorrer por todos os cases do switch comeando pela
primeira opo
op = 1;
%sair do lao quando chegar na ltima opo onde o valor da varivel
'sair' ser igual a '1'
while sair ==0
clc;
fprintf('MENU\n');
fprintf('1 - Mtodo da Bisseco\n');
fprintf('2 - Mtodo da Iterao Linear\n');
fprintf('3 - Mtodo de Newton-Raphson\n');
fprintf('4 - Comparao dos 3 Mtodos (Necessrio clicar antes nas
opes 1, 2 e 3)\n');
fprintf('5 - Sair\n');

switch op
case 1
clc;
%incio do intervalo
inicio = 0;
%fim do intervalo
fim = 1;
%estabelecendo a preciso
precisao = 10^-3;
%salvando o polinmio na forma de vetor
equacao = [1 0 -9 3];
%inicializando o contador
i = 1;
%salvando cada iterao num vetor. Esse vetor ser usado para a
contruo do grfico de erro do Mtodo da Bisseco
biss(i) = i;
%a varivel 'x' ser a metade da soma dos limites do intervalo
x = (inicio+fim)/2;
%caso o produto do polinmio no intervalo inicial com o mesmo
polinmio no intervalo 'x' for positivo (f(a)*f(b)>0)
if polyval(equacao,inicio)*polyval(equacao,x)>0
%valor de 'inicio' recebe o valor de 'x'
inicio = x;
%caso o produto do polinmio no intervalo inicial com o mesmo
polinmio no intervalo 'x' for negativo (f(a)*f(b)<0)
else
%valor de 'fim' recebe o valor de 'x'
fim = x;
end
%a tolerncia ser a diferena entre os limites do intervalo
onde ser salvo numa posio de um vetor
toleranciabisseccao(i) = fim-inicio;
%enquanto a tolerncia, salva num posio do vetor, for maior
que a preciso ir continuar no lao
while toleranciabisseccao(i) > precisao
%a varivel 'x' ser a metade da soma dos limites do
intervalo
x = (inicio+fim)/2;
%caso o produto do polinmio no intervalo 'a' com o mesmo
polinmio no intervalo 'x' for positivo (f(a)*f(b)>0)
if polyval(equacao,inicio)*polyval(equacao,x)>0
%valor de 'inicio' recebe o valor de 'x'
inicio = x;
%caso o produto do polinmio no intervalo inicial com o
mesmo polinmio no intervalo 'x' for negativo (f(a)*f(b)<0)
else
%valor de 'fim' recebe o valor de 'x'
fim = x;
end
%aumentando as posies de vetor
i = i +1;
%salvando a prxima tolerncia no vetor para que seja
verificado na condio do while. E tambm salvando cada
incremento num outro vetor que ser depois utilizado para
plotar o grfico
toleranciabisseccao(i) = fim-inicio;
biss(i) = i;
end
%salvando todo o vetor onde est salvo cada erro numa outra
varivel
bissec = toleranciabisseccao;
%significa que o usurio ainda no digitou a opo para sair
sair = 0;
%plotando o grfico tendo como abscissas as iteraes (1,2,3)
e nas ordenadas os valores dos erros
plot(biss, bissec)
%renomeando o eixo das abscissas
xlabel('Iterao');
%renomeando o eixo das ordenadas
ylabel('Erro');
%criando um ttulo
title('Mtodo da Bisseco','Fontsize', 18, 'Fontname',
'Arial');
%introduzindo grades
grid on
%fazendo com que o programa avance para a segunda opo onde
ele ir resolver o Mtodo da Iterao Linear
op=2;
%fazendo com que ainda no saia do lao
sair=0;
c = input('Pressionne..');
case 2
clc;
%salvando o polinmio na forma de vetor
equacao = [1 0 -9 3];
%salvando uma equao equivalente da equao 'equacao' sob
forma de polinmio
equivalente = [1/9 0 0 1/3];
%considerando um ponto inicial
x0 = 0.5;
%estabelecendo a preciso
precisao = 5*10^-4;
%armazenando numa certa posio de um vetor o valor do
polinmio 'equivalente' num determinado ponto
xiteracao(1) = polyval(equivalente, x0);
%estabelecendo a primeira tolerncia que ser o valor do
polinmio 'equacao' num determinado ponto 'xiteracao'. Cada
valor encontrado para as paradas sero armazenados em um vetor
toleranciaiteracao1(1) = polyval(equacao,xiteracao(1));
%estabelecendo a segunda tolerncia que ser a diferena
entre o ponto sucessor com seu antecessor. Cada valor
encontrado para as paradas sero armazenados em um vetor
toleranciaiteracao2(1) = xiteracao(1) - x0;
%inicializando o contador
i=1;
%enquanto o valor absoluto da primeira tolerncia ou da segunda
forem maiores que a preciso, continua no loop
while
abs(toleranciaiteracao1(i))>precisao||abs(toleranciaiteracao2(i))>precisao
%E tambm salvando cada incremento num outro vetor que
ser depois utilizado para plotar o grfico do Mtodo da
Iterao Linear
it(i) = i;
%salvando o valor do prximo ponto(sucessor), que ser
calculado encontrando o valor da equao equivalente
(polinmio 'equivalente') num no ponto anterior
(antecessor)
xiteracao(i+1) = polyval(equivalente, xiteracao(i));
%estabelecendo o prximo valor da tolerncia que ser o
valor da equao (polinmio 'equacao') num determinado
ponto 'xiteracao'. Cada valor encontrado para as
tolerncias sero armazenadas em um vetor
toleranciaiteracao1(i+1) = polyval(equacao,xiteracao(i+1));
%estabelecendo o prximo valor da segunda tolerncia que
ser a diferena entre o ponto sucessor com seu antecessor.
Cada valor encontrado para as paradas sero armazenadas em
um vetor
toleranciaiteracao2(i+1) = xiteracao(i+1) - xiteracao(i);
%aumentando as posies de vetor
i = i+1;
end
%salvando o incremento num outro vetor que ser depois
utilizado para plotar o grfico
it(i) = i;
%salvando todo vetor onde est salvo cada erro numa outra
varivel
iter = toleranciaiteracao1;
%significa que o usurio ainda no digitou a opo para sair
sair = 0;
%plotando o grfico tendo como abscissas as iteraes (1,2,3)
e nas ordenadas os valores dos erros
plot(it, iter)
%renomeando o eixo das abscissas
xlabel('Iterao');
%renomeando o eixo das ordenadas
ylabel('Erro');
%criando um ttulo
title('Mtodo da Iterao Linear','Fontsize', 18, 'Fontname',
'Arial');
%introduzindo grades
grid on
%fazendo com que o programa avance para a terceira opo onde
ele ir resolver o Mtodo de Newton-Raphson
op=3;
%fazendo com que ainda no saia do lao
sair=0;
c = input('Pressionne..');
case 3
clc;
%estabelecendo a preciso
precisao = 10^-4;
%salvando o polinmio na forma de vetor
equacao = [1 0 -9 3];
%salvando outro polinmio na forma de vetor (y = x)
g = [1 0];
%calculando a derivada do polinmio f
derivada = polyder (equacao);
%encontrando o numerador da equao g-f/f' onde g x, f o
polinmio x^3-9x+3 e f' a derivada do polinmio f (3x-9)
a = conv(g, derivada) - equacao;
%considerando um ponto inicial
x0 = 0.5;
%salvando o valor do polonmio num determinado ponto na
varivel 'nume'
nume = polyval(a, x0);
%salvando o valor do polinmio num determinado ponto na
variavel 'deno'
deno = polyval(derivada, x0);
%o primeiro valor de 'xnewton' ser o ponto informado
inicialmente. Cada ponto ser armazenado numa posio do vetor
xnewton(1) = x0;
%salvando cada iterao num vetor. Esse vetor ser usado para a
contruo do grfico de erro do Mtodo de Newnton-Raphson
ne(1) = 1;
%encontrando a tolerncia que calculada pelo valor do
polinmio 'equacao' num determinado ponto.
tolerancianewnton(1) = polyval (equacao, xnewton(1));
%inicializando o contador
i=2;
%enquanto o valor absoluto da tolerncia for maior que
a preciso informada, continua no loop
while abs(tolerancianewnton(i-1)) > precisao
%E tambm salvando cada incremento num outro vetor
ne(i) = i;
%cada ponto ser calculado pela diviso dos valores do
numerador de denominador encontrados. Esses pontos sero
armazenados num vetor
xnewton(i) = nume/deno;
%encontrando a tolerncia que calculada pelo valor
do polinmio 'equacao' num determinado ponto
tolerancianewnton(i) = polyval(equacao, xnewton(i));
%salvando o valor do polonmio num determinado ponto na
varivel 'nume'
nume = polyval(a, xnewton(i));
%o primeiro valor de 'x' ser o ponto informado
inicialmente. Cada ponto ser armazendo numa posio do
vetor
deno = polyval(derivada, xnewton(i));
%aumentando as posies do vetor
i= i+1;
end
%salvando todo vetor onde est salvo cada erro numa outra
varivel
new = tolerancianewnton;
%significa que o usurio ainda no digitou a opo para sair
sair = 0;
%plotando o grfico tendo como abscissas as iteraes (1,2,3)
e nas ordenadas os valores dos erros
plot(ne, new)
%renomeando o eixo das abscissas
xlabel('Iterao');
%renomeando o eixo das ordenadas
ylabel('Erro');
%criando um ttulo
title('Mtodo de Newton-Raphson','Fontsize', 18, 'Fontname',
'Arial');
%introduzindo grades
grid on
%fazendo com que o programa avance para a quarta opo onde
ele ir comparar os trs Mtodos
op=4;
%fazendo com que ainda no saia do lao
sair=0;
c = input('Pressionne..');
case 4
clc;
%plotando o grfico de mltiplos vetores onde cada erro estar
associado a cada incremento
plot(biss, bissec, 'r--',it, iter, 'g-.', ne, new, 'b');
%renomeando o eixo das abscissas
xlabel('Iterao');
%renomeando o eixo das ordenadas
ylabel('Erro');
%criando um ttulo
title('Comparao dos Mtodos','Fontsize', 18, 'Fontname',
'Arial');
%inserindo legendas
legend('Bisseco', 'Iterao Linear', 'Newnton-Raphson');
%introduzindo grades
grid on
%fazendo com que saia do lao, pois a varivel 'op' j
percorreu por todas as opes
sair=1;
c = input('Pressionne..');
otherwise
disp('Opo Invlida');

end
end







2. Resultados
Funo utilizada: x-9x+3





Funo utilizada: x-9x+3


Mtodo da
Bisseco

Mtodo da
Iterao Linear
Equao Equivalente:
x
3
/9 + 1/3



Mtodo de Newton-
Rhapson
Dados iniciais [0,1] X
0
= 0.5 X
0
= 0.5
Preciso 10
-3
5x10
-4
10
-4

X 0.3369 0.337623 0.337606837606838
f(x) 0.006016918458045 1.2374x10^-4 1.834088509511389x10
-5

Erro em x 9.765625x10
-4
-0.003253020662174 1.834088509511389x10
-5

Nmero de
iteraes
10 3 3

3. Discusso
Dentre as principais dificuldades encontradas para a criao do cdigo, destacam-
se:
Salvar a funo numa varivel para que ela pudesse ser utilizada no
programa;
Calcular o valor do polinmio num dado ponto;
Criar grficos;
Calcular o valor absoluto;
Calcular a multiplicao de polinmios;
Calcular a derivada de um polinmio;

4. Concluso
Resolver uma equao no linear, consiste basicamente em determinar os zeros de
f(x)=0 em [a,b]. Para que possamos usar algum mtodo numrico temos de localizar
um intervalo para um zero. Para termos uma ideia onde o zero se localiza teremos
de fazer uma anlise grfica da funo. Achar zeros de uma funo pode ser uma
tarefa no muito fcil. Na maioria das vezes, para termos sucesso nesta tarefa,
necessrio combinar dois ou mais mtodos. O problema de calcular as razes de
uma equao sempre foi objeto de estudo da matemtica ao longo dos sculos. No
sculo XVII, um matemtico noruegus, Niels Abel (1802-1829), que apesar de sua
curta vida, contribuiu com vrios resultados notveis e importantes para o
desenvolvimento da matemtica, e provou que no existe uma frmula geral para o
clculo das razes exatas de uma equao polinomial de grau maior ou igual a 5.
Nesses casos, e mesmo em casos mais simples, muitas vezes necessrio recorrer
a mtodos numricos para calcular aproximaes para as razes reais de uma dada
equao.


Referncias
A. GILAT, V. SUBRAMANIAM, Mtodos Numricos para Engenheiros e Cientistas: Uma introduo
com aplicaes usando o Matlab, Bookman, 2008.

RUGGIETO, Mrcia A. Gomes; LOPES, Vera Lcia da Rocha. Calculo Numrico: aspectos tericos e
computacionais. 2. Ed. So Paulo: Editora Pearson Makron Books, 1996.

Potrebbero piacerti anche