% T8_A3uA4 - Kurvenanpassung
   %  Wenn man Nervenzellen mit Strom reizt, reagieren sie darauf mit einer Folge von Aktionspotentialen (auch Spikes genannt).
   %  Stellen Sie sich ein Neuron vor, das auf einen Stromimpuls von 1 nA mit einer Frequenz von 32 Spikes/s reagiert, bei 2 nA produziert es 60 Spikes/s.
%% Welche Antwortfrequenz erwarten Sie bei einer Strominjektion von 1.5 nA?

sprintf('Die erwartete Antwortfrequenz lautet 44.') 

%% Wie lautet die lineare Gleichung für die Gerade, die beide Punkte verbindet?

sprintf('Die lineare Gleichung, die beide Punkte verbindet, lautet p(x)=28x+4')

%% Plotten Sie die Gerade und die beiden Datenpunkte

% Datenpunkte
x=[1,2];      % Werte der beiden Punkte
y=[32 60];
plot(x,y,'o')
hold on 

xlabel('Zeit [sek]')  % Beschriftung der x-Achse
ylabel('Spikeanzahl') % Beschriftung der y-Achse
xlim([0 3])           %Wertebereich x-Achse
ylim([0 70])          %Werteberecih y-Achse
    
% Gerade 
X=0:3;     
P=28.*X+4;
plot(X,P)


% Sie führen jetzt eine weitere Messung durch und stellen fest, dass bei 1.5 nA Strominjektion 44 Spikes/s erzeugt werden.

%% a) Erweitern Sie Ihren plot um den neuen Datenpunkt.

xn=[1.5];     % Werte des neuen Messpunkts
yn=[44];
plot(xn,yn,'go')

%% b) Berechnen Sie den quadratischen vertikalen Abstand des Datenpunkts von der Geraden.

ygerade=28*1.5+4 ;   % Berechnung des y-Werts der Geraden bei x=1.5

r=yn-ygerade ;     % Berechnung der Distanz zwischen den y-Werten des neuen Messpunkts und der Geraden bei x=1.5 
rsquare=(r.^2);    % quadratischer vertikaler Abstand

sprintf('Der quadratische vertikale Abstand des neuen Datenpunkts (grün) von der Geraden beträgt %g.',rsquare)

%% c) Schätzen Sie "per Auge" eine Gerade, die alle drei Punkte gut annähert und plotten sie zusammen mit den Datenpunkten.

% p(x)=28x+3  vorherige Gerade wird um einen y-Wert nach unten verschoben
% um zwischen den 3 Messpunkten zu liegen

Xn=0:3;  
Pn=28.*Xn+3;
plot(Xn,Pn,'r')

sprintf('Die neue Gerade (rot) lautet p(x)=28x+3.')

%% d) Berechnen Sie Ihren mittleren quadratischen Fehler.

ygeraden=28*1.5+3 ;   % Berechnung des y-Werts der neuen Geraden bei x=1.5

rn=yn-ygeraden ;     % Berechnung der Distanz zwischen den y-Werten des neuen Messpunkts und der neuen Geraden bei x=1.5 
rsquaren=(rn.^2);    % quadratischer vertikaler Abstand

sprintf('Der quadratische vertikale Abstand des neuen Datenpunkts von der neuen Geraden beträgt %g.',rsquaren)

%% f) Benutzen Sie jetzt die Befehle polyfit, um die beste lineare Nährung zu finden und polyval um den Fehler zu berechnen und die Gerade zu plotten. Plotten Sie die von Matlab berechnete Kurve und deren delta-Werte als Fehlerbalken gemeinsam mit den Datenpunkten in eine Abbildung.
      
 
para=[1 1.5 2];   % Parameterwerte
data=[32 44 60];  % Datenwerte
poly=[1];         % für poly (order of polynom) muss in dieser Aufgabe 1 eingesetzt werden da es sich um eine Gerade handelt

[koeff,stru]=polyfit(para,data,poly);   % lineare Näherung
 

[yschaetz,delta]=polyval(koeff,para,stru);  % Fehler

figure
errorbar(para,yschaetz,delta)  % plotten der Matlab-Geraden mit den delta-Werten als Fehlerbalken
hold on

xlabel('Zeit [sek]')  % Beschriftung der x-Achse
ylabel('Spikeanzahl') % Beschriftung der y-Achse
xlim([0 3])           %Wertebereich x-Achse
ylim([0 70])          %Werteberecih y-Achse

plot(para,data,'or')    % plotten der Datenpunkte  