ex07.m
function ex07()
% Lösung von Aufgabe 7
f = @(x) sin(1./x);
a = 0.107; b = 0.28;
x = 0.1:0.0001:0.3;
y = f(x);
set(0,'defaultfigurecolor','white');
plot(x, y, 'b-', x, 0*x, 'k-', [a b], f([a b]), 'k*')
hold('on')
fprintf('f(a) = %10.6f, f(b) = %10.6f\n', f(a), f(b));
% a ist besser -> vertausche a und b
x = b; b = a; a = x;
zeigeWerte(f, a, b, NaN);
fprintf('\n1. Schritt\n');
x = sekantenSchritt(f, a, b);
fprintf('Sekantenschritt %10.6f, %10.6f\n', x, f(x));
% Wert liegt in [a b] -> wird akzeptiert
% a/b sortieren, c bekommt alten b-Wert
c = b; b = a; a = x;
zeigeWerte(f, a, b, c);
fprintf('\n2. Schritt\n');
x = iqiSchritt(f, a, b, c);
fprintf('IQIschritt %10.6f, %10.6f\n', x, f(x));
% Schritt wird verworfen, stattdessen Bisektion
x = 0.5*(a+b);
fprintf('Bisektionsschritt %10.6f, %10.6f\n', x, f(x));
% schlechter als a, also wird er a
c = b; b = a; a = x;
zeigeWerte(f, a, b, c);
fprintf('\n3. Schritt\n');
x = iqiSchritt(f, a, b, c);
fprintf('IQIschritt %10.6f, %10.6f\n', x, f(x));
% Schritt wird verworfen, stattdessen Bisektion
x = 0.5*(a + b);
fprintf('Bisektionsschritt %10.6f, %10.6f\n', x, f(x));
c = b; b = x; a = c;
zeigeWerte(f, a, b, c);
fprintf('\n4. Schritt\n');
% c = a, also Sekantenschritt
x = sekantenSchritt(f, a, b);
fprintf('Sekantenschritt %10.6f, %10.6f\n', x, f(x));
% Wert liegt in [a b] -> wird akzeptiert
% umsortieren
c = b; b = x;
zeigeWerte(f, a, b, c);
fprintf('\n5. Schritt\n');
x = iqiSchritt(f, a, b, c);
fprintf('IQIschritt %10.6f, %10.6f\n', x, f(x));
% Wert liegt in [a b] -> wird akzeptiert
% umsortieren
c = b; b = x; a = c;
zeigeWerte(f, a, b, c);
fprintf('\n6. Schritt\n');
% c = a, also Sekantenschritt
x = sekantenSchritt(f, a, b);
fprintf('Sekantenschritt %10.6f, %10.6f\n', x, f(x));
% Wert liegt in [a b] -> wird akzeptiert
% umsortieren
c = b; b = x; a = c;
zeigeWerte(f, a, b, c);
% b ist das beste, was wir haben (meistens besser als (a+b)/2)
fprintf('\nErgebnis: %10.6f\n', b);
xlim([0.1 0.3]);
hold('off')
F = getframe(gcf);
imwrite(F.cdata, 'bild84.png');
%% -------------------------------------------------------------------
function zeigeWerte(f, a, b, c)
fprintf('x: %10.6f %10.6f %10.6f\n', a, b, c);
fprintf('f: %10.6f %10.6f %10.6f\n', f(a), f(b), f(c));
plot(b, f(b), 'r*')