Cálculo Numérico / Métodos Numéricos Solução de equações: Método da bissecção 13:53 14:29 Exemplos: f: R → R; f(x) = 2-2 2 x (x+1) e -1=0 14:29 Idéia da bisseção f(-1.5) = + ou - ? x -3 -2 -1 0 1 2 3 f(x) 4385.5 6.4 -1 -0.9 0.5 65.5 17545.1 14:29 Bissecção (algoritmo) Dado um intervalo ]a,b[ com f(a) . f(b) < 0 Escolha c = (a+b)/2 Se f(c) = 0 → FIM Se f(c) . f(a) < 0 Existe uma raiz no intervalo ]a,c[ Se f(c) . f(b) < 0 Existe uma raiz no intervalo ]c,b[ Podemos recomeçar com o novo intervalo e melhorar a aproximação da raiz! 14:29 Bissecção (Exemplo) Achar a raiz cúbica de 5 f(x) = x3 -5 =0 existe raiz entre x=1 e x=2 f(x=1) = -4 f(x=2) = 3 14:29 Programando a bissecção exemplo: Excell e f(x) = (x/2)2 - sen(x) 14:29 Programando a bissecção exemplo: Excell e f(x) = (x/2)2 - sen(x) Iter 1 2 3 4 5 6 7 8 9 10 a 1,50000 1,75000 1,87500 1,87500 1,90625 1,92188 1,92969 1,93359 1,93359 1,93359 b 2,00000 2,00000 2,00000 1,93750 1,93750 1,93750 1,93750 1,93750 1,93555 1,93457 c 1,75000 1,87500 1,93750 1,90625 1,92188 1,92969 1,93359 1,93555 1,93457 1,93408 f(a) -0,434995 -0,2183609 -0,0751795 -0,0751795 -0,0358138 -0,0156014 -0,0053634 -0,0002115 -0,0002115 -0,0002115 f(b) 0,0907026 0,0907026 0,0907026 0,0049623 0,0049623 0,0049623 0,0049623 0,0049623 0,0023727 0,0010799 f(c) -0,218361 -0,07518 0,0049623 -0,035814 -0,015601 -0,005363 -0,000212 0,0023727 0,0010799 0,000434 f(a)xf(c) 0,094985917 0,016416274 -0,000373062 0,002692464 0,000558746 8,36766E-05 1,13439E-06 -5,01829E-07 -2,28402E-07 -9,17978E-08 14:29 Bissecção encontra uma raiz! 14:29 Critérios de parada |a-b| < ε1 |f(c)| < ε2 14:29 Erro relativo Pode ser mais interessante considerar-se o erro relativo. |xk+1 - xk| <ε |xk+1| Escrevemos esse erro na forma: |xk+1-xk| < ε . max{1,|xk+1|} (Por que ?) 14:29 Estudo da convergência (1/3) Ruggiero e Lopes Cap. 2 [a0,b0] {ak}: não decrescente e limitada superiormente por b0 [a1,b1] [a2,b2] {bk}: não crescente e limitada inferiormente por a0 ... [ak,bk] {xk } a + bk por construção xk = k , ak < xk < bk , ∀k 2 14:29 Estudo da convergência (2/3) A cada iteração, a amplitude do intervalo é dividida pela metade: ambos convergentes {ak} e {bk} = x* temos que provar que f(x*) = 0 14:29 Estudo da convergência (3/3) em cada iteração temos f(ak).f(bk) ≤ 0 f(x*) = 0 Convergência lenta pois se b0-a0>> e se ∋ for muito pequeno, o numero de iterações tende a ser muito grande. Dada uma precisão ε e um intervalo inicial [a,b], é possível estimar, a priori, o numero de iterações que serão efetuadas pelo método da bissecção até que se obtenha b-a < ε . bk − ak = bk −1 − ak −1 b0 − a0 = , 2 2k deve-se obter um valor de k tam que bk-ak< ε , ou seja, b0 − a0 b0 − a0 k < ε ⇒ 2 > ⇒ k log( 2 ) > log( b0 − a0 ) − log( ε ) ε 2k ⇒k > log( b0 − a0 ) − log( ε ) . log( 2 ) Por exemplo, se desejamos encontrar z, o zero da função f(x)=xlog(x)-1 que está no intervalo [2,3], com precisão ε = 10 −2 , quantas iterações, no mínimo, devemos efetuar? K=7. Faça ao = a e bo = b e calculamos x1 = (a +b) . 2 Se f(x1)=0, então z = x = x1 Senão Se f(x1) tem o mesmo sinal de f(ao) então z ∈ [x1 ,b0 ] e então faça a1 = x1 e b1 = b0 Se f(x1) tem o mesmo sinal de f(b) então z ∈ [a0 , x1 ] e então faça a1 = a0 e b1 = x1 Desta maneira conseguimos um novo intervalo [a1,b1] onde se encontra a raiz z. Para encontrarmos um novo intervalo [a2,b2] basta aplicar o mesmo procedimento. 14:29 Pseudo-código Retirado de Chapra&Canale, Métodos numéricos para engenharia 14:29 Pseudo-código II Retirado de Chapra&Canale, Métodos numéricos para engenharia