Buscar

Método da Bisseção

Prévia do material em texto

Numérico
Willian de Araujo Rosa
www.profwillian.com
Método da Bisseção
O Método da Bisseção determina uma raiz x de uma função f(x) num intervalo [xa,xb]   onde f(xa)*f(xb)<0. A
idéia é diminuir o intervalo através de repetidas divisões ao meio do intervalo [xa,xb], de tal forma que o valor de xa
tenda ao valor de xb, ou seja, que a raiz x  xa  xb e que a função f(x) seja aproximadamente nula dentro de uma
certa tolerância.
Fluxograma
 início 
Xa, Xb 
, Nmax 
Xm(Xa+Xb)/2 
f(Xa)*f(Xm)<0 
? XbXm 
XaXm 
ii+1 
sim 
não 
i0 
|f(Xm)|> 
e i<Nmax 
? 
sim 
Xm, i 
fim 
não 
Algoritmo
início algoritmo
 declare i, Nmax numérico
 declare Xa, Xb, Xm,  numérico
 i0
 leia Xa, Xb, , Nmax
 
 faça
 Xm(Xa+Xb)/2
 Se f(Xa)*f(Xm)<0
 então XbXm
 senão XaXm
 fim Se 
 ii+1
 enquanto |f(Xm)|> e i<Nmax
 escreva Xm, i
fim algoritmo
Programa C++
{
 int i, Nmax;
 double Xa,Xb,Xm,Epsilon;
 i=0;
 Xa=StrToFloat(EditXa->Text);
 Xb=StrToFloat(EditXb->Text);
 Epsilon=StrToFloat(EditEpsilon->Text);
 Nmax=StrToInt(EditNmax->Text);
 
 do
 {
 Xm=(Xa+Xb)/2;
 if (f(Xa)*f(Xm)<0)
 {Xb=Xm;}
 else
 {Xa=Xm;}
 i++;
 } while ((fabs(f(Xm))>Epsilon)&&(i<Nmax));
 Memo1->Lines->Append(FloatToStr(Xm)
 + " : " + IntToStr(i));
}
Append()....... Método que adiciona um texto (string) ao objeto;
StrToFloat()..Função que converte um texto (string) em número (float);
StrToInt()..... Função que converte um texto (string) em número (int);
IntToStr()..... Função que converte um número (int) em texto (string);
FloatToStr()..Função que converte um número (float) em número (string);
fabs ().............Função que retorna o módulo do argumento;
1
Vamos implementar o programa. Siga os passos abaixo:
1- Comece gravando (Save All) . Crie uma pasta com o nome Bissecao e após abri-la, grave a unidade como
UnitBissecao.h e grave o projeto como ProjectBissecao. . Grave a cada alteração significativa do código do programa;
2- desenhe o formulário abaixo:
 
3- altere a propriedade Caption dos componentes
Label1, Label 2, Label 3 e Label 4 para Xa, Xb,  e Nmax,
respectivamente. Coloque mais um Label com Caption
“Método da Bisseção”;
4- altere a propriedade Name dos componentes Edit1,
Edit2, Edit3 e Edit4 para EditXa, EditXb, EditEpsilon e
EditNmax, respectivamente;
5- altere a propriedade Text dos componentes EditXa,
EditXb, EditEpsilon e EditNmax para 0; 0,5; 0,001 e 50,
respectivamente;
6- altere a propriedade Caption do componente Button1
para Calcula;
7- limpe a propriedade Lines do componente Memo1;
8- digite o código, visto ao lado, no evento OnClick do
componente Button (basta dar um clique duplo à direita
do evento Onclick). Algumas linhas foram modificadas
e/ou acrescentadas;
9- acrescente a linha #include <math.h> logo após a
linha #include <vcl.h> 
 int i, Nmax;
 double Xa,Xb,Xm,Epsilon;
 Memo1->Clear();
 i=0;
 Xa=StrToFloat(EditXa->Text);
 Xb=StrToFloat(EditXb->Text);
 Epsilon=StrToFloat(EditEpsilon->Text);
 Nmax=StrToInt(EditNmax->Text);
 
 do
 {
 Xm=(Xa+Xb)/2;
 if (f(Xa)*f(Xm)<0)
 {Xb=Xm;}
 else
 {Xa=Xm;}
 i++;
 Memo1->Lines->Append(FloatToStr(Xm));
 } while ((fabs(f(Xm))>Epsilon)&&
(i<Nmax));
 Memo1->Lines->Append("|f(Xm)|= " +
FloatToStr(fabs(f(Xm))));
 Memo1->Lines->Append("i= "+IntToStr(i));
10- acrescente o código da função f(x) logo após a linha
#pragma resource "*.dfm"
11- grave e execute o programa .
double f(double x)
{
 return x*x*x-9*x+3;
}
2
Um exemplo:
Vamos encontrar uma raiz da função: 3x9x)x(f 3  utilizando o Método da Bisseção. Adotaremos uma
tolerância de =0,001 e um número máximo de iterações Nmax=50.
Solução: Podemos começar traçando o gráfico da função:
claramente vemos que existe uma raiz no intervalo [-3,5 ; -3,0], uma segunda raiz no intervalo [0 ; 0,5] e uma
terceira raiz no intervalo [2,5 ; 3].
Vamos adotar o intervalo [0,0 ; 0,5], portanto, para a iteração i=1 temos:
5,0x;0x ba 
observem o algoritmo do método. O próximo passo é dividir o intervalo ao meio:
25,0
2
5,00
2
xx
x bam 



 0,765625)25,0(f)x(f m  >
Agora temos dois intervalos. O primeiro é [0 ; 0,25] e o segundo é [0,25 ; 0,5]. Vamos verificar se a raiz se encontra no
primeiro intervalo fazendo:
   02,296875325,0.925,0.30.90)25,0(f).0(f)x(f).x(f 33ma 
Como o produto foi positivo, o intervalo onde se encontra a raiz não é [0 ; 0,25] e sim [0,25 ; 0,5].
Devemos continuar já que )x(f m e que não ultrapassamos o número máximo de iterações Nmax. 
Vamos trabalhar, agora, com o intervalo [0,25 ; 0,5], portanto, para a iteração i=2 temos:
5,0x;25,0x ba 
O próximo passo é dividir o intervalo ao meio:
375,0x m  50,32226562)375,0(f)x(f m  >
Agora temos dois intervalos. O primeiro é [0,25 ; 0,375] e o segundo é [0,375 ; 0,5]. Vamos verificar se a raiz se encontra no
primeiro intervalo fazendo:
019140625-0,2467346)x(f).x(f ma 
Como o produto foi negativo, o intervalo onde se encontra a raiz é [0,25 ; 0,375] e não [0,375 ; 0,5].
Devemos continuar já que )x(f m e que não ultrapassamos o número máximo de iterações Nmax. 
Vamos trabalhar, agora, com o intervalo [0,25 ; 0,375] portanto, para a iteração i=3 temos:
3125,0x m  81250,21801757)3125,0(f)x(f m  >
082519530,16691970)x(f).x(f ma 
Como o produto foi positivo, o intervalo onde se encontra a raiz não é [0,25 ; 0,3125] e sim [0,3125 ; 0,375].
Devemos continuar já que )x(f m e que não ultrapassamos o número máximo de iterações Nmax. 
3
Vamos trabalhar, agora, com o intervalo [0,3125 ; 0,375], portanto, para a iteração i=4 temos:
0,34375x m  35156250,05313110)34375,0(f)x(f m  >
0145115852-0,0115835)x(f).x(f ma 
Como o produto foi negativo, o intervalo onde se encontra a raiz é [0, 3125; 0,34375] 
Devemos continuar já que )x(f m e que não ultrapassamos o número máximo de iterações Nmax. 
Vamos trabalhar, agora, com o intervalo [0, 3125; 0,34375], portanto, para a iteração i=5 temos:
0,328125x m  137695310,08220291)0,328125(f)x(f m  >
0965322730,01792167)x(f).x(f ma 
Como o produto foi positivo, o intervalo onde se encontra a raiz é [0,328125; 0,34375].
Devemos continuar já que )x(f m e que não ultrapassamos o número máximo de iterações Nmax. 
O intervalo é [0,328125; 0,34375] para a iteração i=6 < Nmax, temos:
0,3359375xm  193725590,01447439)0,3359375(f)x(f m  >
07157653530,00118983)x(f).x(f ma 
Como o produto foi positivo, o intervalo onde se encontra a raiz é [0,3359375; 0,34375].
O intervalo é [0,3359375; 0,34375] para a iteração i=7 < Nmax, temos:
 0,33984375x m  260147090,01934391) 0,33984375(f)x(f m  >
039137259371-0,0002799)x(f).x(f ma 
Como o produto foi negativo, o intervalo onde se encontra a raiz é [0,3359375; 0,33984375].
O intervalo é [0,3359375; 0,33984375] para a iteração i=8 < Nmax, temos:
 50,33789062x m  7183437350,00243862 ) 50,33789062(f)x(f m  >
010x6419185-3,5297645)x(f).x(f -5ma 
Como o produto foi negativo, o intervalo onde se encontra a raiz é [0,3359375; 0,337890625].
O intervalo é [0,3359375; 0,337890625] para a iteração i=9 < Nmax, temos:
250,33691406x m  8458044530,00601691 )250,33691406(f)x(f m  >
0x101624578,70912360)x(f).x(f -5ma 
Como o produto foi positivo, o intervalo onde se encontra a raiz é [0,3369140625; 0,337890625].
O intervalo é [0,3369140625; 0,337890625] para a iteração i=10 < Nmax, temos:
3750,33740234x m  4308341440,00178890 )3750,33740234(f)x(f m  >
0x10525351,07636913)x(f).x(f -5ma 
Como o produto foi positivo, o intervalo onde se encontra a raiz é [0,33740234375; 0,337890625].
O intervalo é [0,33740234375; 0,337890625] para a iteração i=11 < Nmax, temos:
43750,33764648x m  18134442340,00032492)43750,33764648(f)x(f m  <
Como )x(f m , a raiz é 43750,33764648xx m 
Tabela Resumo
i Xa Xb Xm f(Xm) f(Xa)*f(Xm)
1 0 0,5 0,25 0,765625 2,296875
2 0,25 0,5 0,375 -0,322265625 -0,246734619140625
3 0,25 0,375 0,3125 0,218017578125 0,166919708251953
4 0,3125 0,375 0,34375 -0,053131103515625 -0,0115835145115852
5 0,3125 0,34375 0,328125 0,0822029113769531 0,0179216796532273
6 0,328125 0,34375 0,3359375 0,0144743919372559 0,00118983715765353
7 0,3359375 0,34375 0,33984375 -0,0193439126014709 -0,000279991372593713
8 0,3359375 0,33984375 0,337890625 -0,00243862718343735 -3,52976456419185E-5
9 0,3359375 0,337890625 0,3369140625 0,00601691845804453 8,70912360162457E-5
10 0,3369140625 0,337890625 0,33740234375 0,00178890430834144 1,0763691352535E-5
11 0,33740234375 0,337890625 0,337646484375 -0,000324921813444234 -5,81254031944506E-7
Exercício: Siga o roteiro acima e encontre a raiz no intervalo [2,5 ; 3]. Sugestão: altere o programa para que a
saída de resultados se assemelhe à tabela resumo acima.
4

Outros materiais

Materiais relacionados

Perguntas relacionadas

Perguntas Recentes