kap04.m
% Nebenrechnungen zu Kapitel 4
%% Standardbeispiele
F1 = @(x) tan(x) - x.*log(0.1*x);
x0 = 4.8;
x1 = 5.5;
F2 = @(x) sign(x - 2).*sqrt(abs(x - 2));
x02 = 0.5;
x12 = 3.5;
% Berechnen der Ableitung mit der Symbolic Toolbox
% auskommentieren, falls Toolbox vorhanden ist
%syms x
%f1 = tan(x) - x.*log(0.1*x);
%diff(f1)
%% Bisektionsverfahren
a = x0;
b = x1;
sa = sign(F1(a));
sb = sign(F1(b));
fprintf('\nBisektion\n')
fprintf('%f %f %f %f\n\n', a, b, F1(a), F1(b));
while b - a > eps*abs(a)
xm = (a + b)/2;
fprintf('%18.15f %18.15f %18.15f %+9.2e\n', a, b, xm, F1(xm));
sm = sign(F1(xm));
if sm == sa
a = xm;
else
b = xm;
end
end
%% Newtonverfahren
F1diff = @(x) tan(x)^2-log(1/10*x);
F2diff = @(x) 1./(2*sqrt(abs(x - 2)))
xLast = 0;
x = x0;
fprintf('\nNewton\n')
fprintf('Beispiel1\n')
fprintf('%18.15f\n', x);
while abs(x - xLast) > eps*abs(x)
xLast = x;
x = x - F1(x)/F1diff(x);
fprintf('%18.15f\n', x);
end
fprintf('Beispiel2\n')
x = x02;
for k=1:5
xLast = x;
x = x - F2(x)/F2diff(x);
fprintf('%18.15f\n', x);
end
%% Sekantenverfahren
xl = x0;
xll = x1;
fprintf('\nSekantenverfahren\n')
fprintf('Beispiel1\n')
fprintf('%18.15f\n', xll);
fprintf('%18.15f\n', xl);
while abs(xl - xll) > eps*abs(xl)
m = (F1(xll) - F1(xl))/(xll - xl);
x = xl - F1(xl)/m;
xll = xl;
xl = x;
fprintf('%18.15f\n', x);
end
%% Inverse quadratische Interpolation
xlll = x0;
xll = x1;
xl = (x0 + x1)/2;
fprintf('\nIQI\n')
fprintf('Beispiel1\n')
fprintf('%18.15f\n', xlll);
fprintf('%18.15f\n', xll);
fprintf('%18.15f\n', xl);
while abs(xl - xll) > eps*abs(xl)
xi = [xlll xll xl]';
yi = F1(xi);
A = [yi.^2, yi, ones(3,1)];
para = A \ xi;
xlll = xll;
xll = xl;
xl = para(3);
fprintf('%18.15f\n', para(3));
end
%% und schließlich mit fzero
fzero(F1, 4.8)
options = optimset('Display', 'iter');
fzero(F1, 5.5, options)