Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
.
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.