Newtonová metóda

Newtonová metóda – metóda dotyčníc je metóda hľadania aproximácie koreňa rovnice f(x) = 0 pomocou zužovania intervalu dotyčnicami. Interval zužujeme dovtedy, kým nezískame potrebnú presnosť.

Výhody

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

Nevýhody

  • Potrebujeme poznať 1. a 2. deriváciu

Algoritmus

  1. Vstupy: funkcia f, f’, f’’, interval <a0; b0>, a0 < b0, ε – požadovaná presnosť, ε > 0
  2. Ak f(a0).f’’(a0) > 0, potom x0 = a0, inak x0 = b0
  3. xk+1 = xk – f(xk) / f‘(xk)
  4. Ak |xk+1 – xk| <= ε, koniec
  5. Choď na 3., k++

Výstup: posledná hodnota xk+1.

Implementácia

f(x)
f'(x)
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, f_x1 = bm.f_x1.value, f_x2 = bm.f_x2.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 || !f_x1 || !f_x2) konzola.value = 'f(x) alebo f\'(x) alebo 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 f = Function("x","return "+f_x); //f(x)
	var f1 = Function("x","return "+f_x1); //f'(x)
	var f2 = Function("x","return "+f_x2); //f''(x)
	var x_k = x_k_predosle = f(a)*f2(a) > 0 ? a : b;
		
	var i = 0
	for(;;)
	{
		++i
		x_k = x_k - f(x_k)/f1(x_k);
		x_k = parseFloat(x_k.toFixed(platne_cislice));
		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;
}