clear;

%% Fibonacci-Suche 

% Anzahl Schritte
n=11;
eps=1e-6;


%% Fibonacci-Zahlen F  (F(n) entspricht F_(n+1) aus der Vorlesung)
F=zeros(n+1,1);
F(1)=1; %F_0
F(2)=1; %F_1
for k=3:n+1; 
   F(k)=F(k-1)+F(k-2);
end;
F(1)=1-eps;



%% Verfahren
k=1;    % "Schrittezähler"
a(1)=0; % linke Intervallgrenze 
b(1)=F(n+1);  %rechte Intervallgrenze von f (siehe Vorlesung)

    
% Testfunktion
testfunktion = @(x) cos(5*x);

    
x1=a(1)+F(n-1);     %kleinere Auswertungsstelle
y1=testfunktion(x1/F(n+1));      %Funktionswert an Stelle x1

x2=a(1)+F(n);
y2=testfunktion(x2/F(n+1));




while k < n
    k=k+1;
        if y2 < y1
            a(k)=a(k-1)+F(n-k+1);
            b(k)=b(k-1);
            x1=x2;
            y1=y2;
            if k~=n
              x2=a(k)+F(n-k+1);
              y2=testfunktion(x2/F(n+1));    
            end
        else
            a(k)=a(k-1);
            b(k)=a(k)+F(n-k+2);
            x2=x1;
            y2=y1;
            if k~=n
                x1=a(k)+F(n-k);
                y1=testfunktion(x1/F(n+1)); 
            end
        end
end



lb=a/F(n+1); %untere Intervallgrenze
ub=b/F(n+1); %obere Intervallgrenze 




%% Plot bzw. Movie
t=0:0.01:1;

for i=1:n
    plot(t,testfunktion(t),'LineWidth',1.5);
    axis([0 1 -1.04 1]);
    hold on 
    plot([lb(i),ub(i)],[-1.02,-1.02],'r','LineWidth',2);
    plot([lb(i),lb(i)],[-1.04,-0.98],'r','LineWidth',2);
    plot([ub(i),ub(i)],[-1.04,-0.98],'r','LineWidth',2);
    hold off
    %saveas(gcf,strcat('fibonaccifigure',num2str(i),'.fig'))
    Movie(i) = getframe;
 end
 close all
 disp('Die berechneten Intervalle sind:');
 disp([lb;ub]')
 movie(Movie,10)