Regula falsi

Regula falsi je metóda hľadania koreňa rovnice f(x) = 0 pomocou zužovania intervalu sečnicami. Interval zužujeme dovtedy, kým nezískame potrebnú presnosť.

Výhody

  • Konverguje k výsledku
  • Rýchlosť konvergencie 1. rádu

Nevýhody

  • Neodporúča sa hľadať blízko pri stanovenom koreni.

Algoritmus

  1. Vstupy: funkcia f, interval <a0; b0>, a0 < b0, ε – požadovaná presnosť, ε > 0
  2. x0 = a0, k = 0
  3. xk+1 = ak – (bk– ak) / (f(bk) – f(ak)) f(ak)
  4. Ak f(xk+1) = 0, koniec
  5. 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
  6. Ak |xk+1 – xk| <= ε, koniec
  7. Choď na 3., 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 = $('#demo');

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, x_k_predosle = a
	var f = Function("x","return "+f_x); //registracia fcie
	
	var i = 0
	for(;;)
	{
		++i
		x_k = a-(b-a)/(f(b)-f(a))*f(a)
		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 (Math.abs(x_k - x_k_predosle) <= odhad_chyby) break;
		x_k_predosle = x_k
		konzola.value += 'x_'+i+' = '+x_k+'\n'
	}
	
	konzola.value += 'x_'+i+' = '+x_k+' +/- '+odhad_chyby+'\n'
	konzola.scrollTop = konzola.scrollHeight;
}