%% Blatt 9 - Programmieraufgaben:
%% Quadratur (4 Punkte)
% Vorname Nachname Mat.-Nr.
% Schreiben Sie hier am Ende dieses Live Scripts MATLAB-Funktionen,
% I = midpoint(f, a, b, n) ,
% I = trapez(f, a, b, n) ,
% I = simpson(f, a, b, n) ,
% welche die zusammengesetzte Mittelpunkts-, Trapez- respektive Simpsonregel numerisch umsetzen. Dabei werde die zu integrierende Funktion f \colon \mathbb{R} \to \mathbb{R} als Funktion handle f übergeben, welche auch auf einem Vektor, einer Matrix oder allgemein einem n-Array angewendet werden können soll, wobei f dann elementweise auf die Einträge angewandt wird. Weiter bezeichnen a und b die Grenzen des Integrationsintervalles und n sei das erlaubte Budget an Funktionsauswertungen.
% Betrachten wir die Mittelpunktsregel, dann koennen wir mit einem Budget von n Funktionsauswertungen das Intervall in N = n Teilintervalle schneiden;
% betrachten wir stattdessen die Tragezregel, so koennen wir mit einem Budget von n Funktionsauswertungen das Intervall nur in N = n-1 Teilintervalle schneiden.
% Schliesslich gilt für die Simpsonregel, dass wir mit dem Budget von n Funktionsauswertungen das Intervall nur in N = \Big\lfloor \frac{n-1}{2} \Big\rfloor Teilintervalle schneiden können.
% Wir betrachten damit zuerst als Testbeispiel die Konvergenz aller drei Verfahren mit der Funktion f(x) = x^4 , den Intervallsgrenzen a = -1 und b = 1und den Funktionsauswertungsbudgets n = 2^2, 2^3, \ldots, 2^{15}.

f = @(x) x.^4;
a = -1;
b = 1;
If = 2/5;

ns = 2.^(2:15).';
em = zeros(size(ns));
et = zeros(size(ns));
es = zeros(size(ns));
for jj=1:numel(ns)
    em(jj) = abs(If - midpoint(f, a, b, ns(jj)));
    et(jj) = abs(If - trapez(f, a, b, ns(jj)));
    es(jj) = abs(If - simpson(f, a, b, ns(jj)));
end
loglog(ns, em, ns, et, ns, es, ns, ns.^(-2), '--', ns, ns.^(-4), '--');
legend('midpoint', 'trapez', 'simpson', 'Rate n^{-2}', 'Rate n^{-4}',...
       'Location','southwest');

% Betrachten Sie nun alle drei Verfahren mit der Funktion f(x) = \frac{1}{1+25x^2}, den Intervallsgrenzen a = -1 und b = 1und den Funktionsauswertungsbudgets n = 2^2, 2^3, \ldots, 2^{15}. Berechnen Sie wie im obigen Beispiel für jedes Verfahren und jedes Funktionsauswertungsbudget den Absolutfehler zwischen der Approximation und dem echten Wert des Integrals \int_a^b f(x) \,\mathrm{d}x = \frac{2}{5} \tan^{-1}(5) und stellen Sie die für jedes Verfahren resultierende Konvergenzkurven in einem loglog-Plot dar.

%% TODO

% Schliesslich, wiederholen Sie das vorhergende Beispiel mit der Funktion f(x) = \sqrt{4 (\cos(x))^2 + (\sin(x))^2}, den Intervallsgrenzen a = 0 und b = 2\pi und den Funktionsauswertungsbudgets n = 3, 4, \ldots, 66. Es ist dabei \int_a^b f(x) \,\mathrm{d}x \approx 9.688448220547674. Wählen Sie hier aber einen semilogy-Plot!

%% TODO

%
% Funktionen:

function I = midpoint(f, a, b, n)
    %% TODO
    
end

function I = trapez(f, a, b, n)
    %% TODO
    
end

function I = simpson(f, a, b, n)
    %% TODO
    
end