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*')