Babylonská metóda

Babylonskou metódou vieme aproximovať odmocninu z ľubovoľného čísla S.

  1. Zvoľme približne x0 > 0, ktoré je čo najbližšie k sqrt(S), S > 0
  2. xk+1  = 0.5(xk + S/xk)
  3. Opakujeme 2. kým |xk+1 – xk| >= ε, ε > 0
  4. Výsledkom je posledný člen xk+1

ε – odhad absolútnej chyby (napr. 10-2 = 0,01)

Príklad:

Vypočítajte sqrt(1000) pomocou Babylonskej metódy, ε = 10-4.

S = 1000
x0 = 31
x1 = 0.5(31 + 1000/31) = 31,629032
x2 =0.5(31,629032 + 1000/31,629032) = 31,622777
x3 = ... = 31,622776 

Výsledkom je člen x3, lebo |x3 – x2| < ε = 10-4 = 0,0001.

Implementácia

S
x_0
platných číslic
ε

JavaScript kód

function x_nPlus1 (x_n, S)
{
    return 0.5 * (x_n + S/x_n)
}

var bm = document.forms[0];

function vypocitaj()
{
    var S = parseFloat(bm.S.value)
    var x_0 = parseFloat(bm.x_0.value), x_1
    var platne_cislice = parseFloat(bm.platne_cislice.value)
    var odhad_chyby = parseFloat(bm.odhad_chyby.value), rozdiel	
    var konzola = bm.konzola
    
    konzola.value = ''		
    if (!S) konzola.value = 'Nesplená podmienka: S > 0'
    if (!x_0 ) konzola.value = 'Nesplená podmienka: x_0 > 0'
    if (!odhad_chyby) konzola.value = 'Nesplená podmienka: ε > 0'
    if (konzola.value != '') return;
    
    var i = 1;
    do {
        x_1 = x_nPlus1(x_0,S)
        x_1 = parseFloat(x_1.toFixed(platne_cislice));
        rozdiel = Math.abs(x_1 - x_0)
        x_0 = x_1
        konzola.value += 'x_'+i+' = '+x_1+'\n'
        i++
    } 
    while (rozdiel >= odhad_chyby) 
    
    konzola.scrollTop = konzola.scrollHeight;
}


1Aký je vzorec na výpočet n+1 člena aproximácie?