VL14: Iterative Verfahren zur Nullstellenbestimmung
Contents
Bisektion zur Berechnung von sqrt(2)
clear all;
close all;
f = @(x) x.^2 - 2;
a = 1;
b = 2;
k = 0;
while abs(a-b)>eps
x = (a+b)/2;
if sign(f(x)) == sign(f(b))
b = x;
else
a = x;
end
k = k+1;
end
fprintf('Nullstelle: %1.8f\n',x)
fprintf('Anzahl der Iterationen: %d\n',k)
Nullstelle: 1.41421356
Anzahl der Iterationen: 52
Newton-Iteration
fprime = @(x) 2.*x;
k=0;
x=1.5;
xprev = 1;
while abs(x - xprev) > eps
xprev = x;
x = x - f(x) / fprime(x);
k = k+1;
end
fprintf('Nullstelle: %1.8f\n',x)
fprintf('Anzahl der Iterationen: %d\n',k)
Nullstelle: 1.41421356
Anzahl der Iterationen: 5
Sekantenverfahren
a = 1;
b = 2;
k=0;
while abs(b-a) > eps
c = a;
a = b;
b = b + (b-c) / (f(c) / f(b) -1);
k = k+1;
end
fprintf('Nullstelle: %1.8f\n',a)
fprintf('Anzahl der Iterationen: %d\n',k)
Nullstelle: 1.41421356
Anzahl der Iterationen: 7
Inverse quadratische Interpolation
a = 1;
b=1.5;
c=2;
k=0;
while abs(c-b) > eps
x = polyinterp([f(a),f(b),f(c)],[a,b,c],0);
a = b;
b = c;
c = x;
k = k+1;
end
fprintf('Nullstelle: %1.8f\n',a)
fprintf('Anzahl der Iterationen: %d\n',k)
Nullstelle: 1.41421356
Anzahl der Iterationen: 6
Matlab-Implementation von fzero:
x = fzerotx(f,[1,2])
Number of Iterations in fzerotx: 7
x =
1.4142