Calculo Numerico Raizes Bisseção
Calculo Numerico Raizes Bisseção
Calculo Numerico Raizes Bisseção
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 Algoritmo
início início algoritmo
escreva Xm, i
Xm(Xa+Xb)/2
fim algoritmo
Programa C++
{
sim int i, Nmax;
f(Xa)*f(Xm)<0 XbXm double Xa,Xb,Xm,Epsilon;
?
i=0;
Xa=StrToFloat(EditXa->Text);
não Xb=StrToFloat(EditXb->Text);
Epsilon=StrToFloat(EditEpsilon->Text);
Nmax=StrToInt(EditNmax->Text);
XaXm
do
{
Xm=(Xa+Xb)/2;
if (f(Xa)*f(Xm)<0)
ii+1 {Xb=Xm;}
else
{Xa=Xm;}
i++;
} while ((fabs(f(Xm))>Epsilon)&&(i<Nmax));
sim Memo1->Lines->Append(FloatToStr(Xm)
|f(Xm)|> + " : " + IntToStr(i));
e i<Nmax }
?
Append()....... Método que adiciona um texto (string) ao objeto;
não 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);
Xm, i FloatToStr()..Função que converte um número (float) em número (string);
fabs ().............Função que retorna o módulo do argumento;
fim
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:
2
Um exemplo:
Vamos encontrar uma raiz da função: f ( x ) x 3 9 x 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.
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:
xa 0 ; x b 0,5
observem o algoritmo do método. O próximo passo é dividir o intervalo ao meio:
x a x b 0 0 ,5 >
xm 0,25 f ( x m ) f (0,25) 0,765625
2 2
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:
f ( x a ).f ( x m ) f (0).f (0,25) 0 3 9.0 3
. 0,25 3 9.0,25 3 2,296875 0
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 f (x 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:
x a 0,25 ; x b 0,5
O próximo passo é dividir o intervalo ao meio:
x m 0,375 f ( x m ) f (0,375) 0,32226562 5 >
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:
f ( x a ).f ( x m ) -0,246734619140625 0
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 f (x 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:
x m 0,3125 f ( x m ) f (0,3125) 0,21801757 8125 >
f ( x a ).f ( x m ) 0,16691970 8251953 0
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 f (x 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:
x m 0,34375 f ( x m ) f (0,34375) 0,05313110 3515625 >
f ( x a ).f ( x m ) -0,0115835145115852 0
Como o produto foi negativo, o intervalo onde se encontra a raiz é [0, 3125; 0,34375]
Devemos continuar já que f (x 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:
x m 0,328125 f ( x m ) f (0,328125) 0,08220291 13769531 >
f ( x a ).f ( x m ) 0,01792167 96532273 0
Como o produto foi positivo, o intervalo onde se encontra a raiz é [0,328125; 0,34375].
Devemos continuar já que f (x m ) e que não ultrapassamos o número máximo de iterações Nmax.
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.