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);

% das beste, was wir haben, ist (a+b)/2
x = (a + b)/2;
fprintf("\nErgebnis: %10.6f\n", x);
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*")
