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
