close all; %schließe alle offenen Plotfenster
clear all; %lösche alle Variablen
clc; %lösche den Inhalt der Konsole

%hier ist es notwendig eine Datei einzulesen, in der . statt , als
%Dezimaltrenner verwendet wird. Hier könnte man davor noch etwas schreiben,
%dass das für einen macht

%Dateien einlesen und als Variablen speichern
u1=load("uebung1_bearbeitet.txt");
u2=load("uebung2_bearbeitet.txt");
u3=load("uebung3_bearbeitet.txt");
u3D=load("uebung3D_1_bearbeitet.txt");

%mache_uebung ist eine Funktion, die ich mir in diesem Dokument weiter
%unten definiert habe (dort wird diese erklärt)
uebung1="mache uebung1"
mache_uebung("sinus 1", u1(:,1), u1(:,2), 'a*sin(b*x+c)+d',{'a','b', 'c', 'd'}, [2,0.05,2,1], [3,0.2,4,3])
mache_uebung("sinus gedämpft 1", u1(:,1), u1(:,3), 'a*sin(b*x+c)*exp(-e*x)+d',{'a','b', 'c', 'd', 'e'}, [8,0,-0.5,-0.5,0],[11,1,0.5,0.5,0.05])
mache_uebung("gauss 1", u1(:,1), u1(:,4), 'a*exp(b*(x-c).^2)+d',{'a','b', 'c', 'd'}, [0,-0.01,25,-0.5],[3,-0.001,35,0.5])
mache_uebung("doppelgauss 1", u1(:,1), u1(:,5), 'a*exp(b*(x-c).^2)+e*exp(f*(x-g).^2)+d',{'a','b', 'c', 'd', 'e', 'f', 'g'}, [0,-0.01,25,-0.5, 2, -0.01, 95],[3,-0.001, 35,0.5, 7, -0.001, 105])
mache_uebung("exp. zerfall 1", u1(:,1), u1(:,6), 'a*exp(-b*x-c)+d',{'a','b', 'c', 'd'},[8,0.01,-0.5,-0.5], [12,0.1,0.5,0.5])

uebung3D="mache 3D"
%speichere die Achsen und die Oberfläche in getrennten Variablen
x=u3D(2:end,1);
y=u3D(1,2:end);
z=u3D(2:end, 2:end);
figure() %erstelle ein Plotfenster
surf(x,y,z') %plotte es in 3D

bild=imread("uebung_bild_laser.jpg"); %lese das Bild als Matrix ein
linie=bild(:,500,:); %Wähle eine Pixelline
intensitaet=zeros(1,length(linie)); %Lege einen Vektor an, in dem die Intensität gespeichert werden soll
%Berechne für alle Pixel in der Linie die Intensität und speichere diese
for i=1:length(linie),
    intensitaet(i)=sqrt(double(linie(i,1))^2+double(linie(i,2))^2+double(linie(i,3))^2);
end
figure()
plot(intensitaet) %Plotte die Intnsität
figure()
imshow(bild) %Plotte das Bild

%Diese Funktion plottet die Werte und den Fit
%x,y: x- und y-Messwerte
%name: Name der Funktion (y-Achsenbeschriftung)
%fitfkt: Fitfunktion als String mit Parametern x und a,b,...
%param: Parameter der Fitfunktion, in der Form {'a','b', ...}
%lower, upper und startwerte sind optional. Sie sind die Grenzen und
%Startwerte, in denen die Fitparameter variiert werden. Sie werden in der
%Form [1, 1.5, -1, ...] anggeben
function f=mache_uebung(name, x,y, fitfkt, param, lower, upper,  startwerte)
    figure()
    b=0.025;
    errorbar(x,y, b*y, b*y, b*x, b*x, "x") %plotte Messwerte mit Fehlern
    myfittype=fittype(fitfkt, 'dependent',{'y'},'independent',{'x'},...
    'coefficients',param); %erstelle einen Fittype
    options=fitoptions(myfittype); %Speichere die Fitoptionen
    %wenn startwerde, lower oder upper gesetzt ist werden die Fitoptionen
    %verändert
    if exist('startwerte','var')
        options.StartPoint=startwerte;
    end
    if exist('lower','var')
        options.Lower=lower;
    end
    if exist('upper','var')
        options.Upper=upper;
    end
    
    name
    myfit = fit(x,y,myfittype, options) %Fitte mit Optionen
    hold on %plotte die nächsten Plots im gleichen Fenster
    plot(myfit) %plotte den Fit
    hold off %plotte die nächsten Plots nicht mehr im gleichen Fenster
    legend('Messwerte', 'Fit') %füge eine Legende hinzu
    xlabel("t") %füge eine x-Achsenbeschriftung hinzu
    ylabel(name) %füge eine y-Achsenbeschriftung hinzu
end