% Importiere Datensatz und bestimme besten Fit bei
% gegebener Funktionsform

% definiere Eingaben für den Import-Befehl
	filename = 'Exp_Zerfall.csv';
	delimiterIn = ';';              % welches Symbol trennt Spalten
	headerlinesIn = 1;              % überspringe erste x Zeilen

% importiere Tabelle in Matlab
	tab = importdata(filename,delimiterIn,headerlinesIn);

% generiere Vektoren für x- und y-Werte aus importierter Tabelle
	t = tab.data(:, 1);
	akt = tab.data(:, 2);

% erzeuge Plot
  plot(t,akt,'.')
	hold on % schreibt nächsten Graphen in das gleiche Fenster

% Achsenbeschriftung
	xlabel('Zeit t');
	ylabel('Aktivit?t A');

% Nichtlineares Fitten
% funktioniert iterativ, d.h. ein Satz von Fitparametern muss "geraten" 
% werden. Diese werden dann schrittweise verbessert.
% Das Verfahren muss nicht konvergieren! Ggf. Anfangswerte variieren.

  % definiere Fitfunktion F(x)
  % Vektor c enthält die zu bestimmenden Parameter
  % Vektor x_data ist das eigentliche Argument der Funktion
  F = @(c,xdata) c(1) * exp(-c(2) * xdata);

% Definiere willkürliche Startparameter für Fitfunktion.
% gute Schützung = bessere Konvergenz
  x0 = [10 1];
  
  % Fitbefehl, sucht passende Parameter x(i)
  [fitparameter,resnorm,~,exitflag,output] = lsqcurvefit(F, x0, t, akt);

% optimale Parameter sind im Vektor "fitparameter" gespeichert.

output % gib Informationen zum Fitting aus
fitparameter % gib finale Fitparameter aus


% plotte Fitkurve über Datensatz

% Fitfunktion konfigurieren
n_x = 200;      % Anzahl x-Werte der Fitfunktion
x_lo = t(1);    % x-Skala Start
x_hi = t(end);  % x-Skala Ende

x_scl = linspace(x_lo, x_hi, n_x);

% Ausgabe
plot(x_scl, F(fitparameter, x_scl)) % Fitfunktion
hold off

