Bisekcia

Bisekcia je metóda hľadania koreňa rovnice f(x) = 0 pomocou delenia intervalu, v ktorom by sa mal koreň nachádzať, na dve časti. Interval zužujeme dovtedy, kým nezískame potrebnú presnosť.

Výhody

  • Jednoduchosť
  • Vždy nájdeme výsledok
  • Konečný počet iterácií

Nevýhody

  • Pomalosť

Algoritmus

  1. Vstupy: funkcia f, interval <a0; b0>, a0 < b0, v ktorom by sa mal koreň nachádzať, ε – požadovaná presnosť, ε > 0
  2. xk+1 = (ak + bk)/2
  3. Ak f(xk+1) = 0, koniec
  4. Ak f(ak).f(xk+1) < 0, potom ak+1 = ak a bk+1 = xk+1, inak ak+1 = xk+1 a bk+1 = bk
  5. Ak bk+1 – ak+1 <= ε, koniec
  6. Choď na 2., k++

Výstup: posledná hodnota xk+1.

Implementácia

f(x)
Dostupné funkcie objektu Math:

<a0, b0>
platných číslic
ε

JavaScript kód

var bm = document.forms[0];

function vypocitaj()
{
    var f_x = bm.f_x.value
    var a = parseFloat(bm.a0.value)
    var b = parseFloat(bm.b0.value)
    var platne_cislice = parseFloat(bm.platne_cislice.value)
    var odhad_chyby = parseFloat(bm.odhad_chyby.value)	
    var konzola = bm.konzola
    
    konzola.value = ''		
    if (!f_x) konzola.value = 'f(x) je nesprávne zadaná'
    if (a >= b) konzola.value = 'Nesplená podmienka: a_0 < b_0'
    if (platne_cislice < 0) konzola.value = 'Záporný počet platných číslic'
    if (!odhad_chyby) konzola.value = 'Nesplená podmienka: ε > 0'
    if (konzola.value != '') return;
    
    var x_k 
    var f = Function("x","return "+f_x); //registracia fcie
    
    var i = 0
    for(;;)
    {
        ++i;
        x_k = (a+b)/2;
        x_k = parseFloat(x_k.toFixed(platne_cislice));

        if (f(x_k) == 0) break;
        if (f(a)*f(x_k) < 0) b = x_k; else a = x_k;
        if (b-a <= odhad_chyby) break;
        konzola.value += 'x_'+i+' = '+x_k+'\n';
    }
    
    konzola.value += 'x_'+i+' = '+x_k+' +/- '+odhad_chyby+'\n';
    konzola.scrollTop = konzola.scrollHeight;
}