function population()

	% Populationsmessungen aus der Datei "data.mat" laden
	% 1. Spalte: Jahre
    % 2. Spalte: Weltpopulation in Milliarden im entsprechenden Jahr
	data=load('data.mat','-ascii');

	% ========================= < schnipp > ===========================





	% Hier Loesung einfuegen: Parameter des Modells schaetzen und damit
	% Modellfunktion und Messwerte in ein Koordinatensystem plotten.
	% Werte der Modellfunktion und deren Gradient koennen mit "pop" bzw.
	% "popDx" berechnet werden (siehe weiter unten).





	% ========================= 8< schnipp 8< ===========================
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                                                 %
% y = pop(t, params)                                                              %
%                                                                                 %
% Wendet das Populationsmodell an, um die Weltpopulation (in Milliarden) im       %
% angegebenen Jahr zu schaetzen.                                                  %
%                                                                                 %
% Eingabeparameter:                                                               %
%   params ..... Parametersatz (x0, lambda, K) des Modells                        %
%   t .......... Zeitpunkt (Jahr), an dem die Bevoelkerung geschaetzt werden soll.%
%                Wenn t ein Vektor mit mehreren Jahresangaben ist, liefert die    %
%                Funktion ebenfalls einen Vektor mit den Population zu den        %
%                jeweiligen Zeitpunkten zurueck                                   %
%                                                                                 %
% Rueckgabewert: Population (in Milliarden) als Wert bzw. als Vektor, wenn t      %
%                auch ein Vektor ist                                              %
%                                                                                 %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function y = pop(t, params)

    x0     = params(1);
    lambda = params(2);
    K      = params(3);
    l      = 1950;
    u      = 2010;

    y = K./(1+(K./x0-1).*exp(-lambda.*(t-l)./(u-l)));
end


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                                                 %
% dx = popDx(t, params)                                                           %
%                                                                                 %
% Berechnet den Gradienten der Funktion "pop"                                     %                                                                               %
%                                                                                 %
% Eingabeparameter:                                                               %
%   params ..... Parametersatz (x0, lambda, K) des Modells                        %
%   t .......... Zeitpunkt (Jahr), an dem der Gradient von "pop" berechnet werden %
%                soll. Wenn t ein Vektor mit mehreren Jahresangaben ist, liefert  %
%                die Funktion eine Matrix zurueck, deren Zeilen jeweils den       %
%                Gradienten von "pop" zu einem Zeitpunkt enthalten.               %
%                                                                                 %
% Rueckgabewert: Eine Matrix, deren i-te Zeile den Gradient der Funktion "pop"    %
%                zum Zeitpunkt t(i) enthaelt.                                     %
%                                                                                 %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function dy = popDx(t,params)
    x0     = params(1);
    lambda = params(2);
    K      = params(3);
    l      = 1950;
    u      = 2010;
    
    lt = l-t;
    lu = l-u;
    expf = exp(-lambda.*lt./lu);
    expfKx0 = expf.*(K/x0 - 1);

    dy = [ K.^2*expf./(x0^2.*(expfKx0+1).^2) ...
           K.*expfKx0.*lt./(lu.*(expfKx0 + 1).^2) ...
           1./(expfKx0+1) - K.*expf./(x0.*(expfKx0+1).^2) ];
end

