Você está na página 1de 13

Apostila de Mtodos Numricos - Programao Numrica - Clculo Numrico com Programao

Notas de Aula
Mtodos Numricos
Programao Numrica
Clculo Numrico
2013

- UNIDADE 1-3 -

(1)

Apostila de Mtodos Numricos - Programao Numrica - Clculo Numrico com Programao

Unidade 1-3
Mtodos numricos para obteno de razes reais; (2 aulas 6 horas)
Determinando intervalos que contm razes;
Critrios de parada;
Mtodos:
- Bisseco;
- Falsa-posio;
- Newton-Raphson;
- Secante.
Comparativo entre os mtodos.
Algoritmos com linguagem de programao: Estruturas de repetio;
PARA FAA;
REPITA ENQUANTO;
REPITA AT.
Aplicao Numrica com construo de algoritmos/programas.
Algoritmo/programa:
Clculo de raiz para funo polinomial/transcendente com mtodos
numricos.

- UNIDADE 1-3 -

(2)

Apostila de Mtodos Numricos - Programao Numrica - Clculo Numrico com Programao

(3)

Principais mtodos numricos para busca de razes:


Nesta aula usaremos mtodos numricos para determinar solues para equaes
polinomiais e, tambm, para as equaes transcendentais atravs de programas com estruturas de
repetio evitando o uso de mtodos analticos que teriam um processo de resoluo muito
complicado e demorado. Os mtodos que sero aplicados na resoluo das equaes so iterativos e
partem de um intervalo inicial ou uma aproximao inicial para a raiz, e mediante algumas
condies, tal como a preciso dada para a resoluo do problema. Os mtodos seguem um
conjunto de passos que descrevemos a seguir.
Segundo [Toldo], um bom roteiro de trabalho seria:
1 - Estimativa inicial Iniciar a execuo do mtodo a partir da aproximao inicial.
2 - Gerao de aproximaes
3 - Aplicar os mais diversos mtodos iterativos para gerar uma seqncia xk; k = 0,1,2,3,,n
de aproximaes da raiz.
Critrio de parada:
Estabelecer um critrio que indica quando o processo iterativo deve parar, por
exemplo, o critrio |x* | e ou |f(x*)| e, onde e = tolerncia.
Tolerncia ou estimativa de exatido
Estimar o erro cometido em associao com o critrio de parada.

Mtodo da bisseco
Seja f(x) uma funo contnua no intervalo [a,b] de forma que f(a)*f(b) < 0 e que, no
intervalo dado, exista apenas uma raiz x' da equao f(x) = 0. No mtodo da bisseco a raiz
aproximada de x' calculada fazendo a mdia aritmtica de a e b, ou seja,
xi = (a+b)/2
Como condio inicial, o mtodo da bisseco toma a mdia aritmtica ponderada do
intervalo [a,b]. O mtodo pode ser resumido em poucos passos:
1 Escolha um intervalo [a,b] de forma que f(a)*f(b) < 0;
2 Calcule xi=(a+b)/2 e f(xi);
3 Se (f(a)*f(xi) < 0) ento faa b=xi seno faa a=xi;
4 Se (|f(xi)| < e) PARE (x'=xi) seno volte ao passo 2.
onde e a preciso.
Vejamos um exemplo:
Para

f x=e x 2 no intervalo [0,1], usando uma planilha, teremos:

- UNIDADE 1-3 -

Apostila de Mtodos Numricos - Programao Numrica - Clculo Numrico com Programao

Grfico de f(x)=exp(X)-2

f(x)=ex-2
a
0,0000
0,5000
0,5000
0,6250
0,6875
0,6875
0,6875
0,6875
0,6914
0,6914
0,6924

Mtodo da Bisseco para erro < 0,001


b
xi=(a+b)/2
f(a)
f(xi)
f(a)*f(xi) >0; a=xi seno b=xi erro=|f(x)|
1,0000
0,5000 -1,0000
-0,3513
0,3513
a=xi
1,0000
0,7500 -0,3513
0,1170
-0,0411
b=xi
0,2500
0,7500
0,6250 -0,3513
-0,1318
0,0463
a=xi
0,1250
0,7500
0,6875 -0,1318
-0,0113
0,0015
a=xi
0,0625
0,7500
0,7188 -0,0113
0,0519
-0,0006
b=xi
0,0313
0,7188
0,7031 -0,0113
0,0201
-0,0002
b=xi
0,0156
0,7031
0,6953 -0,0113
0,0043
0,0000
b=xi
0,0078
0,6953
0,6914 -0,0113
-0,0035
0,0000
a=xi
0,0039
0,6953
0,6934 -0,0035
0,0004
0,0000
b=xi
0,0020
0,6934
0,6924 -0,0035
-0,0015
0,0000
a=xi
0,0010
0,6934
0,6929 -0,0015
-0,0006
0,0000
a=xi
0,0005

Este mtodo convergente desde que:


a) f(x) seja contnua em [a,b];
b) xi esteja no intervalo [a,b].

- UNIDADE 1-3 -

(4)

Apostila de Mtodos Numricos - Programao Numrica - Clculo Numrico com Programao

Programa exemplo mtodo da bisseco


Programa de aplicao do mtodo da bisseco para a funo f(x)=sen(x)-ln(x).
%program bisseccao_funca_transcendente
#12/04/2010;segunda-feira;15:49
#Autor: Adalberto Gassenferth Jr.
#Objetivo: calcula a raiz da f(x)=sen(x)-ln(x)
# pelo metodo da bissecao
clear;
#Programa principal
%begin
clc;
funcao=input("Qual funo:--> ","s");
printf("\n Qual o ponto inicial do intervalo:\n");
a=input("--->");
printf("\n Qual o ponto final do intervalo:\n");
b=input("--->");
Np=20;
# nmero de pontos entre xi e xf
x=linspace(a,b,Np);
#constri um vetor de valores x
y=inline(funcao);
#guarda em y a funo
f=y(x);
#guarda em f(x) um vetor de valores y(x)
printf("\n Qual a precisao de parada\n");
pe=input("--->");
a1=a;
# guarda os valores originais de a e b
b1=b;
#--------------------Processo de busca da raiz
do
fa=y(a);
fb=y(b);
xi=(a+b)/2;
fxi=y(xi);
pre=((fxi)^2)^0.5;
if ((fxi*fa)<0)
b=xi;
else
a=xi;
endif;
until (pre<pe);
clc;
printf("\n\n A raiz de %s e xi=%g no intervalo (%g,%g).",funcao,xi,a1,b1);
input("");
#-------------------faz o grfico da funcao

- UNIDADE 1-3 -

(5)

Apostila de Mtodos Numricos - Programao Numrica - Clculo Numrico com Programao

LinhaEnomeFuncao=strcat("-; ",funcao," ;");


plot(x,f,LinhaEnomeFuncao,xi,0,"-o-; raiz ;");
xlabel("x");
ylabel("f(x)");
grid;
title("Grficos");
replot;
input("");
close;
%end.

- UNIDADE 1-3 -

(6)

Apostila de Mtodos Numricos - Programao Numrica - Clculo Numrico com Programao

(7)

Mtodo da falsa posio


Para f(x) uma funo contnua no intervalo [a,b] de forma que f(a)*f(b) < 0 e que, no
intervalo dado, exista apenas uma raiz x da equao f(x) = 0. Como condio inicial, o mtodo da
falsa posio toma a mdia aritmtica ponderada do intervalo [a,b] com pesos |f(a)| e |f(b)|, que pode
ser expressa da seguinte forma:
a. f b b. f a a. f bb. f a
=
f b f a
f b f a
j que f(a) e f(b) tm sinais opostos.
x k=

Segundo [Toldo], graficamente, esta mdia o ponto x, que a interseco da reta que une
os pontos (a,f(a)) e (b,f(b)) com o eixo dos x. Aps a diviso do intervalo, escolhe-se o novo
subintervalo de acordo com a variao do sinal da curva f. O mtodo da falsa posio aplicado na fi
gura abaixo nos mostra que f(a)*f(x0) < 0, logo o novo intervalo que contm a raiz dado por [a,x0].
Seguindo esse mesmo raciocnio, deve-se continuar o processo para determinar o novo intervalo
que contm a raiz.

Podemos descrever o algoritmo para o mtodo da forma como segue:


1 determinar um intervalo [a,b] que possua uma raiz. Calculamos f(a) e f(b) verificando
que f(a).f(b) < 0.
a.f bb.f a
2 calcular o valor pressuposto da raiz usando a frmula: x k =
.
f b f a
- UNIDADE 1-3 -

Apostila de Mtodos Numricos - Programao Numrica - Clculo Numrico com Programao

(8)

3 calcular f ( xk ) . Se f x k Er , onde Er = preciso, parar o proceso e informar a


raz, se no, se f(a)*f(xk) < 0, o novo intervalo [a, xk ], volte para o passo 1.
se f(b)*f(xk) < 0, o novo intervalo [ xk ,b], volte para o passo 1.

Programa exemplo mtodo da falsa posio


Programa de aplicao do mtodo da falsa-posio para a funo f(x)=sen(x)-ln(x).
%program falsa_posicao_funca_transcendente
#12/04/2010;segunda-feira;15:49
#Autor: Adalberto Gassenferth Jr.
#Objetivo: calcula a raiz da f(x)=sen(x)-ln(x)
# pelo metodo da falsa-posio
clear;
#Programa principal
%begin
clc;
funcao=input("Qual funo:--> ","s");
printf("\n Qual o ponto inicial do intervalo:\n");
a=input("--->");
printf("\n Qual o ponto final do intervalo:\n");
b=input("--->");
Np=20;
# nmero de pontos entre xi e xf
x=linspace(a,b,Np);
#constri um vetor de valores x
y=inline(funcao);
#guarda em y a funo
f=y(x);
#guarda em f(x) um vetor de valores y(x)
printf("\n Qual a precisao de parada\n");
pe=input("--->");
a1=a;
# guarda os valores originais de a e b
b1=b;
#--------------------Processo de busca da raiz
do
fa=y(a);
fb=y(b);
xi=(a*fb-b*fa)/fb-fa);
fxi=y(xi);
pre=((fxi)^2)^0.5;
if ((fxi*fa)<0)
b=xi;
else
a=xi;
endif;
until (pre<pe);
clc;
- UNIDADE 1-3 -

Apostila de Mtodos Numricos - Programao Numrica - Clculo Numrico com Programao

(9)

printf("\n\n A raiz de %s e xi=%g no intervalo (%g,%g).",funcao,xi,a1,b1);


input("");
#-------------------faz o grfico da funcao
LinhaEnomeFuncao=strcat("-; ",funcao," ;");
plot(x,f,LinhaEnomeFuncao,xi,0,"-o-; raiz ;");
xlabel("x");
ylabel("f(x)");
grid;
title("Grficos");
replot;
input("");
close;
%end.

Exerccios
1. Altere os programas-exemplo e calcule as razes para as seguintes funes:
a) f x =cos x ln x , construa um grfico para obter um intervalo inicial.
b) f x=e x x procure no intervalo [-1,0].
c) f x=tg x 2x , construa um grfico para obter um intervalo inicial.
d) f x= x 32x2 x1 , construa um grfico para obter um intervalo inicial.
2. Pesquise sobre os mtodos de Newton-Raphson e da Secante para construir um programa
para cada mtodo.

Referncias
1 -Toldo, Jos Humberto Dias
Mtodos numricos : livro didtico / Jos Humberto Dias Toldo ; design instrucional Karla Leonora Dahse
Nunes. Palhoa : UnisulVirtual, 2009.

1) Principais Estruturas de Repetio:


Temos trs estruturas de repetio que trabalharemos: Para faa, repita enquanto e repita at.
Para cada estrutura criaremos um programa que ilustra como fazer um acumulador de nmeros e
outro para o produto de nmeros.
Para faa
para elementos enumerados fazer
Conjunto de aes ou atos
fim para
- UNIDADE 1-3 -

Apostila de Mtodos Numricos - Programao Numrica - Clculo Numrico com Programao

(10)

Esta estrutura repete um conjunto de comandos at que uma condio seja verdadeira. Como
exemplo em OCTAVE, vamos ler n nmeros, acumular seus valores na varivel soma e o
produto na varivel prod.
PROGRAMA PARA ESTRUTURA PARA FAA
%program Estru_rep
#24/04/2009;sexta-feira;15:49
#Autor: Adalberto Gassenferth Jr.
#Objetivo: Demonstrar funcionamento de estruturas de repetio
clear;
#Programa principal
%begin
clc;
printf("Quantos numeros serao lidos");
n=input("?");
clc;
soma=0;
prod=1;
for i=1:n
printf("Qual o numero %g",i);
nu=input("? ");
soma=soma+nu;
prod=prod*nu;
endfor;
clc;
printf("Soma= %g\n",soma);
printf("Produto= %g\n",prod);
%end

Faa enquanto
enquanto condio de continuidade fazer
Conjunto de aes ou atos
fim enquanto

Esta estrutura repete um conjunto de comandos enquanto uma condio for verdadeira. O programa
a seguir ilustra o uso da estrutura com o mesmo exemplo da estrutura anterior.
PROGRAMA PARA ESTRUTURA REPITA ENQUANTO
%program Estru_rep-enqu
#24/04/2009;sexta-feira;15:49
#Autor: Adalberto Gassenferth Jr.
- UNIDADE 1-3 -

Apostila de Mtodos Numricos - Programao Numrica - Clculo Numrico com Programao

(11)

#Objetivo: Demonstrar funcionamento de estruturas de repetio - enquanto


clear;
#Programa principal
%begin
clc;
printf("Quantos numeros serao lidos");
n=input("?");
clc;
soma=0;
prod=1;
contador=1;
while (contador<=n)
printf("Qual o numero %g",i);
nu=input("? ");
soma=soma+nu;
prod=prod*nu;
contador=contador+1;
endwhile;
clc;
printf("Soma= %g\n",soma);
printf("Produto= %g\n",prod);
%end

Repetia at
fazerConjunto de aes ou atos
at que condio de encerramento

Esta estrutura repete um conjunto de comandos at que uma condio seja verdadeira. O programa a
seguir demonstra o uso da estrutura com um exemplo similar ao da estrutura anterior.
PROGRAMA PARA ESTRUTURA REPITA AT
%program Estru_rep-ate
#24/04/2009;sexta-feira;15:49
#Autor: Adalberto Gassenferth Jr.
#Objetivo: Demonstrar funcionamento de estruturas de repetio - enquanto
clear;
#Programa principal
%begin
clc;
printf("Quantos numeros serao lidos");
n=input("?");
clc;
soma=0;
- UNIDADE 1-3 -

Apostila de Mtodos Numricos - Programao Numrica - Clculo Numrico com Programao

(12)

prod=1;
contador=0;
do
printf("Qual o numero %g",i);
nu=input("? ");
soma=soma+nu;
prod=prod*nu;
contador=contador+1;
until (contador<n);
clc;
printf("Soma= %g\n",soma);
printf("Produto= %g\n",prod);
%end

Atividades:
1 - Construir um programa que:
leia os coeficientes de um polinmio de grau 2,
ax 2 bx c =0

leia o valor da varivel x,


calcule o valor do polinmio para a varivel x,
valor = a*x^2+b*x+c;
informe na tela o valor calculado.
printf(O valor calculado e: %g,valor);
2 - Construir um programa que:
3. leia os coeficientes de dois polinmios de grau 2,
DICA: use a entrada do primeiro programa duas vezes, mudando as variveis,
polinmio 1
a1x 2 b1x c1=0
2
polinmio 2
a2x b2x c2=0
4. compare se os coeficientes so iguais,
Use condies compostas, fica mais fcil.
5. informe na tela o resultado.
DICA: repita a estrutura de sada do programa 1 e faa as alteraes.
3 - Construir um programa que:
1. leia os coeficientes de um polinmio de grau 2,
ax 2 bx c =0

2. calcule as razes imaginrias caso as tenha.


Calcule delta = b*b - 4*a*c, caso seja menor que zero (use uma estrutura de
deciso adequada) teremos duas razes complexas. Teremos a parte real e a parte imaginria, ou
seja:
- UNIDADE 1-3 -

Apostila de Mtodos Numricos - Programao Numrica - Clculo Numrico com Programao

raiz1 - parte real:


raiz1 - parte imaginria:
raiz2 - parte real:
raiz2 - parte imaginria:

real1 = -b/(2*a)
imag1 = -((- delta)^0.5)/(2*a)
real2 = -b/(2*a)
imag2 = ((- delta)^0.5)/(2*a)

Use como exemplo o polinmio x 24x5=0 cujas razes so:


( 2 . 5i ) e ( 2 . 5i ).
3. informe na tela o resultado.

- UNIDADE 1-3 -

(13)