% Leeren des Command Window, des Workspace und schliessen aller
% Plott-Fenster
clc, clear, close all

%% Teilaufgabe 1
% Einlesen des Inhalts der Datei "Temperaturverlauf.mat" in den Workspace
load ('Temperaturverlauf.mat')

%% Teilaufgabe 2
% Erzeugen der symbolischen Variablen a und b
syms a b
% Zusammenfassen der Variablen a und b in einem Vektor x
x=[a;b];
% Erzeugen der anonymen Funktion T1
T1=@(x,t) x(1)*(1-exp(x(2).*t));

%% Teilaufgabe 3
% Erzeugen der anonymen Funktion für die Summe der Fehlerquadrate über alle
% Zeiten
e = @(x) sum((T-T1(x,t)).^2);

%% Teilaufgabe 4
% Definition der Startwerte für die Optimierungsfunktion fminsearch
x_start=[10, -0.01];
% Optimierung der Variablen a und b, sodass e minimal wird
x_opt=fminsearch(e,x_start);

%% Teilaufgabe 5
% Plotten der Ergebnisse
figure(1)
plot(t,T) % Plotten der Temperaturdifferenz T über die Zeit t
hold on % "Halten" des ersten Plotts damit der zweite Plott im gleichen Fenster dargestellt werden kann
plot(t,T1(x_opt,t)) % Plotten der approximierten Temperaturdifferenz T1 über die Zeit t
xlabel('Zeitschritt') % Beschriftung der x-Achse
ylabel('Temperaturdifferenz in °C') % Beschriftung der y-Achse
legend('gemessen','approximiert', "Location","southeast") % Einblenden und Positionieren der Legende




%% Unstetige Funktion
% Erzeugen des Vektors x mit symbolischen Variablen x1, x2 und x3
x=sym('x',[1,3]);
% Erzeugen der anonymen Funktion T2
T2=@(x,t) x(1)*(1-exp(-x(2).*(t-x(3))));
% Ablegen der Ergebnisse der Berechnung der anonymen Funktion T2 als
% Vektor T2 in Abhängigkeit von x
T2=T2(x,t);
% Definition der Sprungstelle der unsetigen Funktion T2
x(3)=10;
% Mit der Kontrolstruktur wird überprüft, ob der aktuelle Zeitschritt
% kleiner als die Sprungstelle x(3) ist. Ist das der Fall, wird der dazu
% gehörende Wert in T2 gleich Null gesetzt, sonst bleibt er unverändert
for i=1:t(end)+1 % Anzahl der Durchläufe (enspricht der Länge von t)
    if(t(i)<x(3)) % Bedingung der Abfrage
        T2(i)=0; % Ersetzen des i-ten Wertes durch Null
    else
        % ist die Bedingung nicht erfüllt, bleibt der Wert unverändert
    end
end
% Erzeugen der anonymen Funktion für die Summe der Fehlerquadrate über alle
% Zeiten
e = @(x) sum((T-T2).^2);
% Definition der Startwerte für die Optimierungsfunktion fminsearch
x_0=[x_opt,10];
% Optimierung der Variablen x(1) und x(2), sodass e minimal wird
x_opt=fminsearch(e,x_0);
