Nachdem ich 2011 schonmal ein paar Methoden zur numerischen Nullstellenberechnung in MATLAB online gestellt hatte, hier nur dieselben Beispiele in Lua. Ich habe mit Lua gerade erst angefangen und eigentlich erstmal zur Übung nur den Code übersetzt. Der Code ist natürlich auf GitHub. Eine gute Lua Referenz ist Learn Lua in 15 Minutes von @tylerneylon.
Wie im letzten Beispiel habe ich diese Funktion benutzt:
Außer bei Newton(da braucht man noch die Ableitung) sieht das dann in Lua so aus.
function f(x) return x^6-x-1 end
Zusätzlich habe ich noch die Genauigkeit Eta global festgesetzt:
eta = 0.00001
Bisektion
function bisection(a,b) local i = 0 if (f(b)*f(a)<0) then while (math.abs(b-a)>eta) do if (f((a+b)/2)*f(a)>0) then a = ((a+b)/2) else b = ((a+b)/2) end i = i + 1 end return ((a+b)/2) end end
Newtonverfahren
function newton(x) local i = 0 local diff = 1 while (diff>eta) do nullstelle = x t1, t2 = f(x) x = x - (t1/t2) i = i+1 diff = math.abs(x-nullstelle) end return x end function f(x) return x^6-x-1, 6*x^5-1 end
Regula Falsi
function regula_falsi(a,b) local i = 0 local diff = 1 if (f(b)*f(a)<0) then nullstelle = a while (diff > eta) do x = (a*f(b)-b*f(a))/(f(b)-f(a)); if (f(x)<0) then a = x else b = x end diff = math.abs(x-nullstelle) nullstelle = x i = i+1 end end return nullstelle end
Sekantenverfahren
function secant(a,b) local i = 0 while(math.abs(b-a)>eta) do nullstelle = b b = b-f(b)*(b-a)/(f(b)-f(a)) a = nullstelle i = i+1 end return ((a+b)/2) end