%% Mathematik II - Angewandte Mathematik
%% DHBW Wintersemester 20/21 - Zusammenfassung
% Table of Contents
% Mathematik II - Angewandte Mathematik
% DHBW Wintersemester 20/21 - Zusammenfassung
%     Wiederholung/Vorkenntnisse
%         Analysis (Funktionen)
%             Stetigkeit, Ableitbarkeit und Integrierbarkeit
%             Ableitungsberechnung (und Ableitungen elementarer Funktionen)
%             Taylorreihe
%             Integration
%         Lineare Algebra (Matrizen)
%             Determinantenberechnung
%             Eigenwerte / Eigenvektoren und Definitheit einer Matrix
%         Andere/Kombinierte Themen
%             Lineare Gleichungssysteme
%             Vektoren und Vektorräume
%     Funktionen in mehreren Veränderlichen
%         Definition von Funktionen
%             Klassische Definition in einer Variablen ()
%             Definition von skalaren Funktionen ()
%             Vektorwertige Funktionen ()
%     Stetigkeit von Funktionen in mehreren Variablen
%     Ableitungen in mehreren Veränderlichen
%         Partielle Ableitungen
%         Totale Ableitung
%             Der Gradient
%             Jacobi-Matrix
%             Die Hesse-Matrix (~ Die 2. Ableitung)
%         Einschub: Warum die Hesse-Matrix nur für skalare Funktionen funktioniert
%         Divergenz und Rotation
%             Divergenz
%             Rotation
%         Bestimmung von Extremstellen
%             Schritt 0: Die Funktion
%             Schritt 1: Gradient bestimmen (= 1. Ableitung) und LGS auf 0 lösen
%             Schritt 2: Hessematrix bestimmen und an den möglichen Punkten auswerten
%             Schritt 3: Definitheit der Matrizen bestimmen
%         Koordinationentransformationen
%             Polarkoordinaten
%             Zylinderkoordinaten
%             Kugelkoordinaten
%         Integralrechnung in mehreren Variablen ( + Anwendung der Koordinatentransformation)
%             Volumen-/Flächen-/Schwerpunktberechnung mit Integralen
%         Taylorentwicklung in mehreren Variablen (bis 2. Ordnung)
%     Lösungsverfahren und Lösungsstrukturen für Differentialgleichungen
%         Trennung der Variablen
%             Variation der Konstanten
% Schlusswort

syms x y z x_1 x_2 x_3;

%
%% Wiederholung/Vorkenntnisse
%% Analysis (Funktionen)
%% Stetigkeit, Ableitbarkeit und Integrierbarkeit
% Stetigkeit: Stetigkeit ist eine Eigenschaft von Funktionen. Eine Funktion ist dann stetig, wenn keine Sprünge vorhanden sind. Formal wird diese Eigenschaft ausgedrückt mit der Gleichung \lim \limits_{x \rightarrow x_0} f(x) \mathop{=}\limits^! f(x_0)\\
% \text{für beide Richtungen (}x<x_0 \text{ oder } x>x_0\text{)}
% Anschaulich bedeutet das, dass man sich von beiden Seiten an eine beliebige Stelle näheren kann und dabei immer dem Funktionswert näher kommt. Ein Gegenbeispiel stellt die Funktion

unstetig(x) = abs(x) + 2*sign(x)

% dar. Am Graphen der Funktion erkennt man den Sprung. Nähert man sich nun der Stelle x=0 von links, so erhält man als Grenzwert y=-2. Nähert man sich hingegen von rechts, so erhält man y=2. Diese Werte sind natürlich unterschiedlich und daher ist die Funktion an der Stelle unstetig. Zudem hat die Funktion an der Stelle x=0 den Wert y=0. Dieser ist auch noch unterschiedlich von den Grenzwerten.

figure("Name","Unstetige Funktion");
title("Unstetige Funktion (unstetig in x=0)")
hold on;
fp = fplot(unstetig, [-5 -0.01]);
fp.Color = [1 0 0];
fp = fplot(unstetig, [0.01 5]);
fp.Color = [1 0 0];
fp = fplot(unstetig, [-0.01, 0.01]);
fp.Color = [0.4 0.4 0.4];
fp.LineStyle = ":";
hold off;
grid on;

%
% Ableitbarkeit: Ableitbarkeit ist eine weitere Funktionseigenschaft. Ableitbarkeit ist ein anderer Begriff für die Stetigkeit der Ableitung. Jedoch sind die Begriffe Stetigkeit und Ableitbarkeit NICHT äquivalent. Ein Beispiel für eine Funktion, die zwar stetig, aber nicht ableitbar ist stellt f(x) =|x|dar. Diese Funktion ist zwar in allen Punkten stetig, jedoch im Punkt x=0 nicht ableitbar.
% Anmerkung: Aus Ableitbarkeit folgt Stetigkeit, jedoch nicht umgekehrt. Das heißt, wenn eine Funktion unstetig ist, dann ist sie auch nicht (stetig) ableitbar/differenzierbar.

figure("Name","Nicht ableitbare Funktion");
title ("Nicht ableitbare Funktion (in x=0)");
hold on;
fplot(@(x) abs(x));
hold off;
grid on;
ylim([-2,5]);

%
% Integrierbarkeit: Eine weitere Funktionseigenschaft. Wenn eine Funktion stetig ist, dann ist sie auch immer integrierbar (im Endeffekt genau die Umkehrung zur Ableitbarkeit :D). Eine Funktion muss jedoch nicht stetig sein um integrierbar zu sein (z.B. sig(x) ist unstetig (s.oben), aber integrierbar zu F(x) = |x|) Die Integrierbarkeit kann als Stetigkeit der Stammfunktion verstanden werden. Damit eine Funktion integrierbar ist muss das Integral einen Grenzwert haben. Ein Beispiel für eine nicht (stetig) Integrierbare Funktion ist f(x) = \frac{1}{x}. Die Stammfunktion zu dieser Funktion ist F(x) = ln(x). Wobei \mathbb{D}_F = ]0;\infty[ und damit nicht für alle Zahlen definiert ist. Somit ist fnicht über x=0 integrierbar.

figure("Name", "Nicht (stetig) integrierbare Funktion");
title("Nicht stetig integrierbare Funktion mit Stammfunktion");
hold on;
unintegrierbar(x) = 1/x;
fplot(unintegrierbar);
fplot(@(x) log(x));
hold off;
grid on;

%
%% Ableitungsberechnung (und Ableitungen elementarer Funktionen)
% Die Definition der Ableitung erfolgt über einen Grenzwert. Um diesen auszudrücken gibt es 2 Ansätze:
% Der "klassische" Ansatz: Ein Wert nähert sich dem anderen: f'(x_0) = \lim \limits_{x\rightarrow x_0}\frac{f(x) -f(x_0)}{x-x_0}
% Die sog. h-Methode: Die Differenz der Werte wird geringer: f'(x) =\lim \limits_{h\rightarrow 0} \frac{f(x+h) -f(x)}{(x+h)-x} =\lim \limits_{h\rightarrow 0} \frac{f(x+h) -f(x)}h}
% Mit beiden Ansätzen kommt man auf die gleichen Ergebnisse (c,n \in \mathbb{R}):
% Ableitung eines Polynoms: [c\cdot x^n]' = n\cdot c \cdot x^{n-1}
% [sin(x)]' =cos(x)
% [cos(x)]' = -sin(x)
% [e^x]'=e^x (allgemeiner: [a^x]' = ln(a)\cdot a^x)
% [ln(x)]'=\frac{1}x
%  [|x|]' =\frac{|x|}x = sign(x) \text{ für }x\neq 0
% Gesetze für Ableitungen:
% Konstanten: [c\cdot f(x)]' = c\cdot f'(x) und [c]' = 0
% Addition/Subtraktion: [f(x) + g(x)]' = f'(x) + g'(x)
% Multiplikation: [f(x)\cdot g(x)]' = f'(x)\cdot g(x) + f(x) \cdot g'(x)
% Division: [\frac{f(x)}{g(x)}]' = \frac{f'(x) \cdot g(x) - f(x)\cdot g'(x)}{g(x)^2}
% Verkettung: [f(g(x))]' = f'(g(x)) \cdot g'(x)
%
%% Taylorreihe
% Die Taylorentwicklung ist eine Möglichkeit beliebige Funktionen näherungsweise durch ein Polynom beschreiben zu können. Dies hat den Vorteil, dass Polynome in vielen Fällen leichter handhabbar sind (z.B. Integrieren).
% Um die Taylorentwicklung einer Funktion zu berechnen wird die Formel T_{n, x_0}(x) = \sum \limits_{k=0} \limits^{n} \text{ }\frac{1}{k!} \cdot f^{(k)}(x_0) \cdot (x- x_0)^k bis zu dem gewünschten Entwicklungsgrad n angewendet. Die Funktion wird dabei um einen Punkt entwickelt, an dem sie immer exakt ist. Die Taylorentwicklung liefert dabei nur eine Annäherung. Die Differenz zum tatsächlichen Wert kann man mit einer Formel für das Restglied berechnen.

order =5;
point = 0;

% Eingestellte Parameter:

Entwicklungsgrad=order
Entwicklungspunkt=point
f(x) = sin(x)
T(x) = taylor(f,x,point,"Order",order+1)
figure("Name", "Taylorentwicklung")
title("Taylorentwicklung anhand einer Beispielfunktion")
hold on
fp = fplot(f);
fp.Color = [0.7 0.7 0.7];
fp.LineStyle = "--";
fplot(T);
legend('show');
hold off
xll = min(point-3, -5);
xlh = max(point+3, 5);
ylim([-3 3]);
xlim([xll xlh]);
grid on

%
%% Integration
% Die Integration ist die umgekehrte Operation zum Ableiten. Definiert wird das Integral über eine Ober- und Untersumme. Für Beispiele zur Integration am besten einfach die Übersicht von Frau Heine anschauen :-).
% Im folgenden ist ein interaktives Beispiel zur Integration anhand der Funktion f(x) gegeben. Die Funktion kann gerne geändert werden, die Anzeige passt sich an.

f(x) = (0.1 * x^4 + sin(x))/(x^2 + 2)
syms a_n b_n n_n
deltaX(a_n, b_n, n_n) = (b_n - a_n)/n_n;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%PARAMETER%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
a =-3.3;
b = 3;
n = 19;

% Eingestellte Parameter:

untere_Integralgrenze = a
obere_Integralgrenze = b
Anzahl_Schritte = n

% Die Schrittweite bei den gegebenen Parametern:

dx = deltaX(a,b,n)
ran = a:dx:b;
res = f(ran);
res_os = f(ran + dx);
area_ran = a:0.001:b;
area_res = f(area_ran);

% Plott und Berechnung der Ober-/Untersummen:

figure(1)
stairs(ran, res)
hold on
stairs(ran, res_os)
fp = fplot(f, [a-1 b+0.5]);
fp.Color = [0 0 0.6];
ar = area(area_ran, area_res);
ar.FaceColor = [0.4 1 1];
ar.FaceAlpha = 0.5;
hold off
grid on
legend(["Untersumme", "Obersumme","f(x)", "Integralwert"])
% Kennzahlen
Obersumme = vpa(sum(res_os(1:n) .* dx))
Untersumme = vpa(sum(res(1:n) .* dx))
Integralwert = vpa(int(f,a,b))

%
%% Lineare Algebra (Matrizen)
%% Determinantenberechnung
% Anmerkung: Die Determinante einer 2x2-Matrix A = \pmatrix{a & b \cr c&d} ist durch die Formel det(A) = ad-bc definiert.
% Um die Determinante einer Matrix zu berechnen ist ein mögliches Verfahren die Matrix in eine Dreiecksform zu bringen und so die Determinante zu berechnen. Die Determinante einer Dreiecksmatrix (in der alle Elemente \in \mathbb{Z}) ist als das Produkt der Diagonalelemente definiert. D.h. die Determinante der Matrix B=\pmatrix{
% a_{11} & a_{12} & a_{13} & a_{14} \cr
% 0         & a_{22} & a_{23} & a_{24} \cr
% 0         & 0 & a_{33} & a_{34} \cr
% 0         &   0       &0         & a_{44} \cr
% } ist definiert als det(B) = a_{11} \cdot a_{22} \cdot a_{33} \cdot a_{44}. Um eine Matrix in Dreiecksform zu bringen kann man vielfache einer anderen Zeile dazu addieren. Multipliziert man eine Zeile mit einer Konstanten, so muss man den Kehrwert dieser Konstante mit der berechneten Determinante multiplizieren. Erhält man dabei eine Zeile die nur die Zahl 0 enthält, so ist die Determinante 0.
% Beispiel:

A = [5 5 5;2 4 3; 4 8 9]

%  \frac{1}{5} \cdot (I)       \|\text{Faktor 5 merken}

A = [1 1 1; 2 4 3 ; 4 8 9]

% (II) - 2 \cdot (I)

A = [1 1 1; 0 2 1 ; 4 8 9]

% (III) - 4\cdot (I)

A = [1 1 1; 0 2 1 ; 0 4 5]

% \frac{1}{2} \cdot (II)       \|\text{Faktor 2 merken}

A = [1 1 1; 0 1 0.5 ; 0 4 5]

% (III) - 4 \cdot (II)

A = [1 1 1; 0 1 0.5 ; 0 0 3]

% Zuletzt muss die Matrix wieder so verändert werden, dass nur Elemente aus den ganzen Zahlen enthalten sind:
% 2\cdot (II)      \|\text{Faktor $\frac{1}{2}$ merken}

A = [1 1 1; 0 2 1 ; 0 0 3]

% Die Determinante ist nun das Produkt der Diagonalelemente multipliziert mit den gemerkten Werten.
% det(A) = (1\cdot2\cdot3) \cdot 5 \cdot 2\cdot\frac{1}{2}

Determinante = det(A) * 5

%
%% Eigenwerte / Eigenvektoren und Definitheit einer Matrix
% Die Eigenvektoren einer Matrix sind besondere Vektoren. Wenn man diese Vektoren mit der Matrix multipliziert erhält man ein skalares Vielfaches des Vektors. Um genau zu sein ist das Ergebnis ein Vektor, der genau mit dem zugehörigen Eigenwert multipliziert wurde. Für dieses Semester ist die Berechnung der Eigenvektoren nicht nötig, daher genügen die Eigenwerte.
% Diese werden durch das lösen der folgenden Gleichung berechnet: det(\lambda E-A) \mathop{=}\limits^! 0. E ist die Einheitsmatrix, A ist die Matrix deren Eigenwerte gesucht sind. \lambda sind die gesuchten Eigenwerte (meist kommen mehrere Werte für Lamda beim Lösen der Gleichung heraus).
% Handelt es sich bei der Matrix um eine Diagonalmatrix, so sind die Elemente auf der Diagonalen genau die Eigenwerte der Matrix.
% Die Definitheit einer Matrix kann dadurch bestimmt werden, dass man die Eigenwerte betrachtet. Sind alle Eigenwerte negativ, so handelt es sich um eine negativ definite Matrix. Sind alle positiv, so ist die Matrix positiv definit (Die Null kann in beiden Fällen als Eigenwert vorkommen. Dann nennt man die Matrix semi-definit). Falls sowohl positive, als auch negative Eigenwerte vorkommen, so ist die Matrix indefinit.
%
%% Andere/Kombinierte Themen
%% Lineare Gleichungssysteme
% Bei einem linearen Gleichungssystem hat man mehrere Gleichungen mit mehreren Unbestimmten.
% Hat man mehr Variablen als Gleichungen, so ist das System unterbestimmt und die Lösungsmenge enthält unendlich viele Lösungen. In diesem Fall muss eine Variable als (lineare) Funktion der anderen Variablen angegeben werden. Dieser Fall ist auch dann gegeben, wenn eine Gleichung als Linearkombination der anderen Gleichungen beschrieben werden kann.
% Hat man mehr Gleichungen als Variablen, so ist das System überbestimmt und man kann eine Lösung mit einem Teil der Gleichungen ermitteln. Diese muss man jedoch mit den übrigen Gleichungen prüfen. Kommt es zu einem Widerspruch, so gibt es keine Lösung und die Lösungsmenge ist die leere Menge.
% Ist die Zahl der Variablen und Gleichungen identisch, so ist es ein bestimmtes Gleichungssystem und eine eindeutige Lösung kann ermittelt werden.
% Ein Lösungsverfahren für LGS funktionier mit Matrizen. Hierbei schreibt man die Vorfaktoren der einzelnen Variablen in Spalten und die Gleichungen in einzelne Zeilen (Die Gleichungen müssen alle Variablen auf einer und die Werte auf der anderen Seite haben). Die Ergebnisse kommen in einen entsprechenden Vektor. Die Matrix wird nun mit den gleichen Methoden wie oben bei der Determinantenbestimmung in eine Einheitsmatrix umgeformt. Die rechte Seite enthält nun die entsprechenden Lösungswerte für die einzelnen Variablen.
% Beispiel:
% (I) \text{ } 5x + 3y = 8 \\
% (II) \text{ } 7x +10y -7 = 10 \\
% \text{Umformung von Gleichung (II):}\\
% (II)' \text{ } 7x + 10y = 17 \Rightarrow \pmatrix{
% 5 & 3 \cr
% 7 & 10
% }
% \cdot
% \pmatrix{x \cr y}
% =
% \pmatrix {8\cr17} \Rightarrow x = 1 ; y=1   (Rechnung ausgelassen)
%
%% Vektoren und Vektorräume
% Ein Vektorraum ist die Ansammlung/Definition aller Möglichen Vektoren in diesem Vektorraum. Beispiele für Vektorräume sind \mathbb{R}^2,\mathbb{R}^3, \mathbb{R}^n (Vektorräume sind auch über anderen Mengen als den reellen Zahlen möglich, aber wir brauchen nur diese).
% Ein Vektor ist ein Element eines Vektorraums. Ein Element des Vektorraums \mathbb{R}^2 ist beispielsweise \pmatrix{1.5 \cr 2}.
%
%% Funktionen in mehreren Veränderlichen
%% Definition von Funktionen
%% Klassische Definition in einer Variablen (\mathbb{R} \rightarrow \mathbb{R})

h(x) = fun1(x)

%% Definition von skalaren Funktionen (\mathbb{R}^n \rightarrow \mathbb{R})

f(x,y) = fun2(x,y)
g(x,y,z) = fun3(x,y,z)

%% Vektorwertige Funktionen (\mathbb{R}^n \rightarrow \mathbb{R}^m)
% Anm.: Hier Spezielle Fälle, in denen gilt: n=m. Dies ist jedoch im Allgemeinen nicht so.

[y_1, y_2] = fun4(x_1,x_2);
h(x_1, x_2) = [y_1; y_2]
[y_1, y_2, y_3] = fun5(x_1,x_2,x_3);
i(x_1,x_2,x_3) = [y_1;y_2;y_3]

%
%% Stetigkeit von Funktionen in mehreren Variablen
% Die Stetigkeit von Funktionen in mehreren Variablen hat eine recht ähnliche Bedeutung zu der in einer Variablen. Der grundlegende Unterschied besteht darin, dass x nicht mehr eine Zahl ist, der man sich von unten oder oben näheren kann, sondern ein Vektor, dem man sich aus n Richtungen näheren kann. Damit eine Funktion nun in x stetig ist muss man sich von jeder Richtung näheren können und sich dabei auch dem Funktionswert annäheren. Visuell enspricht Beispiele für unstetige Funktionen sind f(x,y) = sig(x) + sig(y) und g(x,y,z) = sig(x) * sig(y)*sig(z) + 1. Beide Funktionen sind unten geplotet.
% Als Faustregel: Im Normalfall ist bei unstetigen Funktionen etwas wie sig oder abs vorhanden. Ansonsten sind die meisten Funktionen stetig (bzw. es gelten die gleichen Kriterien wie bei Funktionen in 1 Variable).
% Der Unterschied für mehrdimensionale Funktionen definiert sich wirklich nur darin, dass man mehr mögliche Richtungen hat um sich einer Stelle zu näheren (bzw. ein Vektor angenähert wird statt einer Zahl). Die Begriffe Ableitbarkeit und Integrierbarkeit können ähnlich in mehrere Dimensionen übernommen werden (statt einer Zahl wird eben jeweils ein Vektor betrachtet).

f_unstetig(x,y) = sign(x) + sign(y);
figure("Name", "Unstetige Funktion in 2 Variablen");
title("f(x,y) = sig(x) + sig(y)");
hold on;
fs = fsurf(f_unstetig, [0.01 5 0.01 5]);
fs.FaceColor = [0.8 0 0];
fs = fsurf(f_unstetig, [-5 -0.01 0.01 5]);
fs.FaceColor = [0.8 0 0];
fs = fsurf(f_unstetig, [0.01 5 -5 -0.01]);
fs.FaceColor = [0.8 0 0];
fs = fsurf(f_unstetig, [-5 -0.01 -5 -0.01]);
fs.FaceColor = [0.8 0 0];
hold off;
grid on;
xlim([-5 5]);
ylim([-5 5]);
zlim([-5 5]);
view([-1,-1,1]);
view([-72.55 46.17]);
g_unstetig(x,y,z) = sign(x) .* sign(y) .* sign(z) + 2;
[X, Y, Z] = meshgrid(-2:0.15:2,-2:0.15:2,-2:0.15:2);
X=reshape(X,[1,19683]);
Y=reshape(Y,[1,19683]);
Z=reshape(Z,[1,19683]);
S = g_unstetig(X,Y,Z) .^ 3;
figure("Name", "Unstetige Funktion in 3 Variablen");
title("g(x,y,z) = sig(x) * sig(y) * sig(z) + 1")
hold on
scatter3(X,Y,Z,S, "filled")
hold off
grid on
view([1 1 1])

%
%% Ableitungen in mehreren Veränderlichen
%% Partielle Ableitungen
% Bei der Partiellen Ableitung \frac{\partial }{\partial x}einer Funktion wird diese (bzw. im Fall einer Vektorwertigen ihre Komponenten) nach einer Variable abgeleitet und der Rest wird als Konstante betrachtet. Die partiellen Ableitungen für die Funktionen f\left(x,y\right) und h\left(x,y\right) lauten wie folgt:

dfx(x,y) = diff(f,x,1)
dfy(x,y) = diff(f,y,1)
dhx_1(x,y) = diff(h,x_1,1)
dhx_2(x,y) = diff(h,x_2,1)

%
%% Totale Ableitung
% Partielle Ableitungen bilden jedoch nur die Ableitung nach einer Variablen ab und sind somit unvollständig.
% Um diesem Problem zu begegnen werden nun totale Ableitungen definiert, die möglichst alle Eigenschaften der Differentiellen Funktion erfassen sollen.
%% Der Gradient
% Ein Erster Ansatz ist der Gradient. Dieser ist ein Spaltenvektor, der die partiellen Ableitungen nach den einzelnen Variablen als Werte der Elemente hat.
% Formal ist der Gradient ein Operator, der folgendermaßen geschrieben wird: \nabla =\left\lbrack \begin{array}{c}
% \frac{\partial }{\partial x_1 }\;\\
% \frac{\partial }{\partial x_2 }\;\\
% \vdots \\
% \frac{\partial }{\partial x_n }\;
% \end{array}\right\rbrack. Wendet man diesen nun auf eine Funktion fan, so erhält man:
%  \nabla f=\;\left\lbrack \begin{array}{c}
% \frac{\partial f}{\partial x_1 }\;\\
% \frac{\partial f}{\partial x_2 }\;\\
% \vdots \\
% \frac{\partial f}{\partial x_n }\;
% \end{array}\right\rbrack, wobei f eine Funktion \mathbb{R}^n \rightarrow \mathbb{R} ist. Der Gradient ist nur die erste Ableitung für Skalare Funktionen. Für Vektorwertige Funktionen erfüllt dieser andere Funktionen (s. später). Mit den partiellen Ableitungen aus dem vorigen Abschnitt ergibt sich für den Gradient unserer Funktion f\left(x,y\right):

f(x,y) = f(x,y)
gf(x,y) = gradient(f,[x,y])

%% Jacobi-Matrix
% Die Allgemeine Ableitung für Vektorwertige Funktionen ist die sogenannte Jacobi-Matrix. Der Gradient stellt einen spezialfall dieser Matrix dar. Für die Definition der Jacobi-Matrix betrachtet man die Komponenten der Vektorwertigen Funktion (\mathbb{R}^n \rightarrow \mathbb{R}^m) als eigene skalare Funktionen (h\left(x,y\right)=\left\lbrack \begin{array}{c}
% h_1 \\
% h_2 \\
% \vdots \\
% h_m
% \end{array}\right\rbrack. Dann ist die Jacobimatrix von h(x,y)definiert als J_h \left(x,y\right)=\left\lbrack \begin{array}{cccc}
% \frac{\partial }{\partial x_1 }h_1  & \frac{\partial }{\partial x_2 }h_1  & \dots  & \frac{\partial }{\partial x_n }h_1 \\
% \frac{\partial }{\partial x_1 }h_2  & \frac{\partial }{\partial x_2 }h_2  & \dots  & \frac{\partial }{\partial x_n }h_2 \\
% \vdots  & \vdots  & \ddots  & \vdots \\
% \frac{\partial }{\partial x_1 }h_m  & \frac{\partial }{\partial x_2 }h_m  & \dots  & \frac{\partial }{\partial x_n }h_m
% \end{array}\right\rbrack. Die Jacobimatrix einer skalaren Funktion ist der transponierte Gradient (bzw. der Gradient ist die transponierte Jacobi-Matrix). Es gilt also (für f: \mathbb{R}^n \rightarrow \mathbb{R}) die Beziehung{\left(\nabla f\right)}^T =J_f. Für die Funktion

h(x_1,x_2) = h(x_1,x_2)

% ist die Jacobimatrix (und damit auch die 1. Ableitung)

J_h(x,y) = jacobian(h,[x_1,x_2])

%% Die Hesse-Matrix (~ Die 2. Ableitung)
% Die Hesse-Matrix stellt das Äquivalent zur 2. Ableitung in einer Dimension dar. Dabei ist die Hesse-Matrix wiederum nur für skalare Funktionen definiert.
% An sich stellt die Hesse-Matrix nur eine "Abkürzung" dar, da sie auch bestimmt werden kann, indem man zunächst eine skalare Funktion zu einem gradienten ableitet und anschließend diesen Gradienten mit der Jacobimatrix ableitet (2-fache Ableitung). Damit kommt man auf die Definition der Hesse-Matrix, die folgendermaßen lautet: Für eine skalare Funktion f(x_1,x_2,\cdots,x_m) ist die Hesse-Matrix definiert als H_f(x_1,x_2,\cdots,x_m) =
% \pmatrix{
% \frac{\partial^2f}{\partial^2 x_1 x_1}    & \frac{\partial^2f}{\partial^2 x_2 x_1}   & \cdots   & \frac{\partial^2f}{\partial^2 x_m x_1}            \cr
% \frac{\partial^2f}{\partial^2 x_1 x_2}    & \frac{\partial^2f}{\partial^2 x_2 x_2}   & \cdots   & \frac{\partial^2f}{\partial^2 x_m x_2}            \cr
% \vdots                                                    & \vdots                                                  & \ddots   & \vdots                                                           \cr
% \frac{\partial^2f}{\partial^2 x_1 x_m}    & \frac{\partial^2f}{\partial^2 x_2 x_m}   & \cdots   & \frac{\partial^2f}{\partial^2 x_m x_m}           \cr
% }
% . In unserem Fall für

f(x,y) = f(x,y)

% lautet die Hesse-Matrix

H_f(x,y) = hessian(f,[x,y])

%
%% Einschub: Warum die Hesse-Matrix nur für skalare Funktionen funktioniert
% Ableiten in höheren Dimensionen hat einen Zusatzeffekt, der in einer Dimension nicht aufgefallen ist. Dieser könnte auffallen, wenn man die Abbildungsmengen einer Funktion betrachtet:
% Wenn f: \mathbb{R}^n \rightarrow\mathbb{R}, dann gilt für die totale Ableitung (Gradient) \nabla{f} : \mathbb{R}^n \rightarrow \mathbb{R}^n. Leitet man diese nun erneut ab (zur 2. Ableitung aka Hesse-Matrix) so gilt für die totale Ableitung des Gradienten \nabla{\nabla{f}} : \mathbb{R}^n \rightarrow \mathbb{R}^{n \times n}. Würde man dies nun weiterführen, so gilt für die m-te Ableitung einer Funktion f
% (bezeichnet mit f^{(m)}, obwohl ich mir bei der Notation nicht sicher bin): f^{(m)} : \mathbb{R}^n \rightarrow \mathbb{R}^{n^m}. Somit müsste die 2. Ableitung einer vektorwertigen Funktion die Abbildung \mathbb{R}^n \rightarrow \mathbb{R}^{n \times n \times n} erfüllen müsste (3D-Matrix/Tensor), weshalb alle weiteren Ableitungen mit Stift und Papier nicht mehr reasonable behandelt werden können.
%
%% Divergenz und Rotation
% Divergenz und Rotation sind Funktionen, die Aussagen über die Eigenschaften von vektorwertigen Funktionen treffen.
% Anmerkung: Theoretisch sind diese von \mathbb{R}^n \rightarrow \mathbb{R}^m definiert. Ich habe jedoch nur Beispiele von \mathbb{R}^n \rightarrow \mathbb{R}^n gefunden (also die Anzahl der Variablen ist gleich der Anzahl der Teilfunktionen). Die Formeln funktionieren auch nur in diesem Zusammenhang, also gehe ich nicht davon aus, dass wir in der Klausur etwas mit ungleichen Dimensionen bekommen werden.
% Ein Dokument, das meiner Meinung nach ganz gut ist um Divergenz und Rotation zu verstehen ist hier zu finden.
%% Divergenz
% Die Divergenz ist das Skalarprodukt aus dem Nabla-Operator (\nabla
% ) und der vektorwertigen Funktion. Das Ergebnis ist dabei eine skalare Funktion in n Variablen. Das heißt die erste Teilfunktion wird nach der ersten Variable abgeleitet, die zweite Teilfunktion nach der zweiten Variable, etc. Diese partiellen Ableitungen werden dann addiert und so erhält man eine skalare Funktion für die Divergenz:
% f(x_1, x_2,\ldots,x_n) = \pmatrix{
% f_1 \cr f_2 \cr \vdots \cr f_n
% }
% \\
% div[f](x_1, x_2,\ldots,x_n) =
%  \frac{\partial f_1}{\partial x_1} +
%  \frac{\partial f_2}{\partial x_2} +
% \ldots +
%  \frac{\partial f_n}{\partial x_n}
% Beschreibt eine Funktion beispielsweise Energie, so stellt eine positive Divergenz eine Energiequelle dar, während eine negative Divergenz einen (starken) Verbraucher darstellt (d.h. die Energie wird weniger). Ein Beispiel für die Divergenzberechnung ist im folgenden aufgeführt:

h
div_h(x_1, x_2) = divergence(h)

% Die Plots der Funktion/Divergenz sieht folgendermaßen aus. Man kann erkennen, dass es nahe am Punkt (0,0) sowohl eine "Quelle" als auch einen "Verbraucher" gibt.

% Stromliniengraph von h
[vx1, vx2] = meshgrid(-2:0.1:2,-2:0.15:2);
[u, v] = fun4(vx1, vx2);
temp = stream2(vx1,vx2, u,v,vx1, vx2);
figure("Name", "Stromlinienplot von h(x_1, x_2)")
title("Stomlinienplot der Funktion")
hold on
streamline(temp)
hold off
grid on
figure("Name", "Divergenz von h");
title("Divergenz von h")
hold on
fsurf(div_h, [-2 2 -2 2]);
hold off
grid on
view([1,1,1])
view([121.4 34.2])

%
%% Rotation
% Die Rotation ist definiert als das Kreuzprodukt \nabla \times f. Will man das Kreuzprodukt über beliebig viele Variablen definieren, so nutzt man dafür eine Summe (wie in unserem Skript). Die Fälle die man Handschriftlich berechnet, sind jedoch so definiert wie bekannt. Die Rotation ist eine weitere vektorwertige Funktion (die jedoch unter Umständen konstant sein kann).
% Ein (hoffentlich) anschauliches Beispiel (das nicht zwangsläufig realistätsnah ist ;-) ) wäre eine Funktion, die den Kurs von Motorboten beschreibt, die nicht lenken, sondern nur durch den Wind / die Wellen gedreht werden. Die Rotation beschreibt in diesem Beispiel die Kombinierte Bewegung von Wind und Wellen.
% Die Rotation kann nur für n \ge 3 berechnet werden (sonst ist das Kreuzprodukt nicht definiert). Dafür definieren wir eine neue Funktion rotierend(x,y,z)=\pmatrix{-3y^2\cr5x\cr0} und berechnen die Rotation dieser Funktion (Die z-Komponente ist bewusst 0, da die Darstellung so einfacher ist.

rot_1(x,y,z) = -3.*y.^2;
rot_2(x,y,z) = 5.*x;
rot_3(x,y,z) = 0.*z;
rotierend(x,y,z) = [rot_1 ;rot_2 ;rot_3]
rot_h(x_1, x_2) = curl(rotierend, [x,y,z])

% Die Rotation ist in diesem Fall von y abhängig, was man in der nächsten Abbildung auch erkennen kann. Eine weitere Eigenschaft der Funktion, die man aus dieser Rotation ablesen kann ist, dass die Funktion nur innerhalb der xy-Ebene (und parallelen Ebenen) rotiert (was auch Sinn ergibt, da die z-Komponente der Funktion immer konstant ist).

[vx1, vx2, vx3] = meshgrid(-2:0.3:2,-2:0.3:2,-1:0.5:1);
u = rot_1(vx1, vx2, vx3);
v = rot_2(vx1, vx2, vx3);
w = rot_3(vx1, vx2, vx3);
figure("Name", "Rotierende Funktion");
title("Rotierende Funktion");
hold on
quiver3(vx1, vx2, vx3, u, v, w)
streamslice(vx1, vx2, vx3, u, v, w , [], [], [0])
hold off
grid on
view([1 1 1])
view([74.45 25.45])

%
%% Bestimmung von Extremstellen
% Auch bei Funktionen in mehrern Variablen ist es möglich Extremstellen zu bestimmen. Bei skalaren Funktionen ist die Bedeutung eines Extemums recht einfach definiert. Bei vektorwertigen Funktionen ist es nötig ein Maß für den Wert des Vektors festzulegen. Dies ist üblicherweise auch eine Zahl und damit sucht man wieder nach den Extrema einer skalaren Funktion. Was ich damit sagen will ist, dass in der Klausur mit ziemlich großer Sicherheit die Extrema einer skalaren Funktion betrachtet werden, weshalb der folgende Ablauf prinzipiell immer gleich ist.
%% Schritt 0: Die Funktion
% Als Beispiel wird die folgende Funktion genutzt:

f(x,y) = (x)^3 -x + (y)^3 -y

%% Schritt 1: Gradient bestimmen (= 1. Ableitung) und LGS auf 0 lösen
% Zunächst muss der Gradient der Funktion bestimmt werden. Anschließend fordert man diesem gleich dem Nullvektor zu sein. Man hat also n Gleichungen mit n-Variablen, die man nach 0 auflösen muss. Dabei handelt es sich um ein bestimmtes lineares Gleichungssystem (Abschnitt zu LGS) das lösbar ist.

G_f(x,y) = gradient(f)
result = solve(G_f, [x,y]);

% Die Lösungspunkte in diesem Fall sind: (4 Lösungen)

p1 = [result.x(1) result.y(1)]
p2 = [result.x(2) result.y(2)]
p3 = [result.x(3) result.y(3)]
p4 = [result.x(4) result.y(4)]

%% Schritt 2: Hessematrix bestimmen und an den möglichen Punkten auswerten

H_f(x,y) = hessian(f)

% Am Punkt p1:

H1 = H_f(p1(1), p1(2))
H2 = H_f(p2(1), p2(2))
H3 = H_f(p3(1), p3(2))
H4 = H_f(p4(1), p4(2))

%% Schritt 3: Definitheit der Matrizen bestimmen
% Um die Definitheit der Matrizen zu bestimmen müsste man zunächst die Eigenwerte jeder dieser Matrizen bestimmen (s. Abschnitt zu Matrizen) und dann prüfen ob alle Eigenwerte ein einheitliches Vorzeichen haben. Da es in diesem Fall 4 Diagonalmatrizen sind, ist die Eigenwertbestimmung recht einfach (EW = Diagonalelemente). Damit ergeben sich in diesem Fall die folgenden Definitheiten:
% H1 \rightarrow negativ definit \rightarrow Hochpunkt am Punkt p1

p1

% H2 \rightarrow indefinit \rightarrow Sattelpunkt am Punkt p2

p2

% H3 \rightarrow indefinit \rightarrow Sattelpunkt am Punkt p3

p3

% H4 \rightarrowpositiv definit \rightarrow Tiefpunkt am Punkt p4

p4

% Damit sind die Extrempunkte der Funktion bestimmt. Abschließend plotten wir die Funktion noch mal kurz, das ist aber in der Klausur nicht nötig ;-).

figure("Name", "Plot der Funktion zur Extrempunktbestimmung.");
title("f(x,y) mit den bestimmten Extrempunkten.");
hold on
fsurf(f, [-1.5 1.5 -1.5 1.5])
scatter3(p1(1), p1(2), f(p1(1), p1(2)), 60, [0 1 0], "x")
scatter3([p2(1) p3(1)], [p2(2) p3(2)], [f(p2(1), p2(2)) f(p3(1), p3(2))], 60, [0 0 1], "x")
scatter3(p4(1), p4(2), f(p4(1), p4(2)), 60, [1 0 0], "x")
legend(["f(x,y)", "Hochpunkt (p1)", "Sattelpunkt (p2, p3)", "Tiefpunkt (p4)"])
hold off
grid on
view([-1 -1 2])
xlim([-1.31 1.70])
ylim([-1.11 1.15])
zlim([-3.10 2.91])
view([-83.73 52.55])

%
%% Koordinationentransformationen
% In der Mathematik gibt es mehrere Möglichkeiten Punkte zu beschreiben. Die intuitivste Möglichkeit stellen die sog. kartesischen Koordinaten dar. Diese sind jedoch nicht immer der nützlichste Ansatz. Beispielsweise wäre es sehr unkomfortablel Punkte auf der Erde karteesisch anzugeben. Stattdessen nutzen wir Kugelkoordinaten, bei denen ein Punkt durch zwei Winkel beschrieben wird (und den Abstand von einem gewissen Punkt, aber der entfällt bei der Erde oft, da die Oberfläche schon eindeutig genug ist). Unten sind die Koordinaten der DHBW klassisch angegeben (Geokoordinaten mit ergänzter Höhe) und in kartesischer Schreibweise.

lat = -49.354335;
lon = 9.1479703;
height = 164+6371146;
Koordinaten_DHBW = vpa([lon; lat; height], 10)
[dhbwx, dhbwy, dhbwz] = sph2cart(lon,lat,height);
Koordinaten_DHBW_Kartesisch = vpa([dhbwx; dhbwy; dhbwz], 10)
% [X,Y,Z] = sphere();
% X = X.*height;
% Y = Y.*height;
% Z = Z.*height;
% figure("Name","Symbolische Darstellung von Geokoordinaten");
% title("Koordinate auf einer symbolischen Erde");
% hold on
% sf = surf(X,Y,Z);
% sf.FaceColor = [0 0.65 0.65];
% scatter3(dhbwx, dhbwy, dhbwz);
% hold off
% viewangle=[0 0 height];
% view(viewangle);

% Wenn man sich diese Notation ansieht erkennt man hoffentlich einen Grund warum sphärische Koordinaten in diesem Fall besser geeignet ist. Dieser Grund ist einfach, dass sich zwei Zahlen, die maximal einen Wert von 180 haben, einfach besser merken kann, bzw. die Rechnung mit kleineren Zahlen auch noch per Hand funktioniert. (Zugegeben man könnte den Maßstab für die kartesischen Koordinaten anders wählen als Meter, aber der grundsätzliche Punkt sollte erkennbar sein).
% Zum anderen haben Geokoordinaten den Vorteil, dass jedes Zahlenpaar tatsächlich auf einen Punkt verweist und nicht eine undefinierte Stelle im Weltraum oder Erdinneren repräsentiert (so sind leichte Rundungsfehler, wie sie bei Computern passieren können, nicht katastrophal). Ich hoffe durch dieses Beispiel wurde noch mal klar warum andere Repräsentationen für Punkte nicht zwangsläufig nutzlos sind. Die folgenden Abschnitte beschäftigen sich mit den verschiedenen Darstellungsvarianten.
%% Polarkoordinaten
% Polarkoordinaten sind üblicherweise die zweite Darstellungsform die man erklärt bekommt. Das Prinzip ist dabei recht einfach. speichert einen Punkt mithilfe eines Abstandes zu einem Punkt und einem Winkel. Die Transformationsformeln lauten folgendermaßen:
% Kartesisch zu Polar (\phi \text{ wird oft auch mit } \alpha\text{ bezeichnet}):

syms alpha r
assume(x,"real");
assume(y,"real");
assume(alpha,"real");
assume(r,"real");
[phi, rad] = cart2pol(x,y);
rad
phi

% Polar zu Kartesisch:

[xx, yy] = pol2cart(alpha,r)

% Das sind die 4 Formeln, die man sich grundsätzlich zu der Koordinatentransformation von Polarkoordinaten merken muss. Im folgenden ist noch mal eine kurze Darstellung zur Gleichwertigkeit von polar und kartesischen Koordinaten:
%
% Polarer Punkt P:

a = 95;
radius = 78;

% Eingegebene Parameter:

Winkel_in_Grad = a
radius

% \alpha im Bogenmaß:

a = deg2rad(a)
viewradius = 110;

% Kartesische Koordinaten dieses Punkts:

[X, Y] = pol2cart(a,radius)
figure("Name", "P in einem polaren Plot")
polarscatter(a,radius);
hold on
title("P in einem polaren Plot");
hold off
grid on
rlim([0, viewradius])
% Der gleiche Punkt in einem kartesischen Plot
figure("Name", "P in einem kartesischen Plot");
title("P in einem kartesischen Plot");
hold on
scatter(X,Y);
hold off
grid on
xlim([-1*viewradius , viewradius])
ylim([-1*viewradius , viewradius])

% Anmerkung: Für die weiteren Koordinatenrepräsentationen werde ich keine solche Abbildungen machen, weil ich nicht weiß wie hilfreich die wirklich sind. Falls ihr die doch haben wollt, dann sagt Bescheid oder so.
%
% [Ja das ist irgendwie vorausgegriffen, aber an dieser Stelle passt es am Besten]
% Bei der Integration in mehreren Dimensionen ist auch die Darstellung der Koordinaten entscheidend. Wenn man ein Integral von einer Darstellung in eine andere umrechnet (s. nächster Abschnitt), so muss man einen Korrekturfaktor hinzufügen. Dieser Faktor hängt von der getätigten Koordinatentransformation ab. Für die Klausur wird vermutlich nur der Faktor r wichtig sein, wenn man von einer kartesischen Darstellung in die polare wechselt. Jedoch gibt es einen solchen Faktor auch für die anderen Transformationen. Um diesen Faktor zu bestimmen betrachtet man die Koordinatentransformation als vektorwertige Funktion (Die Reihenfolge der Teilfunktionen ist wichtig und entspricht derjenigen, die ich oben angegeben habe. NICHT der in Matlab) und berechnet deren Jacobi-Matrix (1. Ableitung). Die Determinante dieser Matrix ist der gesuchte Faktor (aber jeweils zur gegeläufigen Matrix. Weiß Gott wie man sich das merken soll). Zur Anwendung versuche ich zu einem späteren Zeitpunkt ein Beispiel zu bringen. Ich werde bei der jeweilen Koordinatentransformationen die Jacobimatrix und die Determinante hinschreiben, aber meines Erachtens sind nur die Transformationsformeln und der Faktor r für Polarkoordinaten klausurrelevant. Der Rest ist vielleich nützlich mal gesehen zu haben und mal zu wissen woher das kommt.

J_k2p=jacobian([rad, phi], [x,y])
faktor_p2k = simplify(det(J_k2p))
J_p2k=jacobian([xx,yy], [r, alpha])
faktor_k2p=simplify(det(J_p2k))

%% Zylinderkoordinaten
% Zylinderkoordinaten sind den Polarkoordinaten ziemlich ähnlich. Es wird prinzipiell nur eine weitere Koordinate eingefügt, durch die die Höhe angegeben werden kann. Diese ist äquivalent zu den kartesischen Koordinaten und deshalb findet keine Transformation statt.
% Kartesisch zu Zylinder

[phi, rad, zz] = cart2pol(x,y,z);
rad
phi
zz

% Zylinder zu Kartesisch

[xx, yy, zz] = pol2cart(alpha,r,z)

% Jacobi-Matrizen

J_k2z = jacobian([rad,phi,zz])
Faktor_z2k = det(J_k2z)
J_z2k=jacobian([xx,yy,zz], [r, alpha, z])
Faktor_k2z = simplify(det(J_z2k))

%
%% Kugelkoordinaten
% Der letzte Koordinatentyp sind die sogenannten Kugelkoordinaten. Auch diese basieren wieder auf Winkeln und einem Radius (evtl. fällt ein Muster auf, dass kartesische Koordinaten einfach nicht für Kurven geeignet sind, was auch Sinn ergibt, oder könnt ihr einen geraden Stock um die Kurve legen?).
% Um genau zu sein nimmt man wieder das Grundprinzip der Polarkoordinaten, aber statt einer kartesischen Achse für die Höhe (wie bei den Zylinderkoordinaten) nutzt man nun einen Winkel um die vertikale Auslenkung des Vektors zu ändern (bzw. man nutzt den Winkel zur Vertikalachse, aber dazu einfach in die Abbildung schauen). Da die Erklärung komplett ohne Visualisierung nicht optimal ist habe ich folgenden noch eine Darstellung, die ich von der entsprechenden Matlabseite kopiert habe, wo auch eine kurze Erklärung zu Kugelkoordinaten vorhanden ist (und auch Wikipedia kann helfen). Die Darstellung ist aber nicht optimal (Der Höhenwinkel ist beschränkt, aber die Darstellung ist zumindest besser als nichts hoffe ich).

% Dieser ganze Abschnitt ist kopiert und ich habe ihn nicht selbst
% erstellt.
rho = 7;
phi = 69;
psi = 42;

% Eigegebene Parameter:

Radius_in_LE = rho
Winkel_in_der_Ebene = phi
Hebewinkel = psi
phi=deg2rad(phi);
psi=deg2rad(psi);
xx = rho*sin(psi)*cos(phi);
yy = rho*sin(psi)*sin(phi);
zz = rho*cos(psi);
fpoint = plot3(xx,yy,zz,'ko','MarkerSize',10,'MarkerFaceColor','k');
hold on
syms r s
xr = r*sin(psi)*cos(phi);
yr = r*sin(psi)*sin(phi);
zr = r*cos(psi);
fplot3(xr,yr,zr,[0 rho],'k')
fplot3(xr,yr,sym(0),[0 rho],'k')
fplot3(xr,yr,sym(zz),[0 rho],'k--')
fplot3(sym(xx),sym(yy),rho*sin(s),[0 pi/2-psi],'k')
syms s t
xa = rho*sin(s)*cos(t);
ya = rho*sin(s)*sin(t);
fphi= fsurf(xa,ya,0,[0 psi 0 phi],'FaceColor','b','EdgeColor','none');
syms u v
xp = u*sin(v)*cos(phi);
yp = u*sin(v)*sin(phi);
zp = u*cos(v);
fpsi = fsurf(xp,yp,zp,[0 rho 0 psi],'FaceColor','g','EdgeColor','none');
xlabel('x')
ylabel('y')
zlabel('z')
view(115,30)
axis equal;
legend([fpoint fphi fpsi], ["P", "\phi","\psi"])
hold off

%
% Nun zu den Transformationen:
% Kartesisch zu Kugel (Sphärisch):

assume(x,"real")
assume(y,"real")
assume(z,"real")
[phi, psi, radius] = cart2sph(x,y,z);
radius=simplify(radius)
phi = simplify(phi)
psi = simplify(psi)

% Jacobi-Matrix:

J_k2s=simplify(jacobian([radius, phi, psi]))
Faktor_s2k = simplify(det(J_k2s))

% Sphärisch zu Kartesisch

syms phi psi r
[xx, yy, zz] = sph2cart(psi, phi,r)
J_s2k=simplify(jacobian([xx,yy,zz],[r, phi, psi]))
Faktor_k2s = simplify(det(J_s2k))

%
%% Integralrechnung in mehreren Variablen ( + Anwendung der Koordinatentransformation)
% Das bestimmte Integral stellt in mehreren Variablen die Möglichkeit dar ein Volumen/Hypervolumen (bei mehr als 3 Dimensionen) zu berechnen (das unbestimmte Integral haben wir nicht behandelt und das ist vermutlich besser so ;-).
% Die Aussage, dass Integrieren und Ableiten zueinander inverse Operationen sind stimmt hier leider nur Teilweise. Der "Hauptsatz der Differential- und Integralrechnung" besagt nämlich in einer Dimension, genau das ~[Zu jeder Funktion f gibt es eine Funktion F deren Ableitung f ist. F ist das unbestimmte Integral von f]. In mehreren Variablen muss diese Aussage etwas eingeschränkt werden. Es gilt nämlich, dass die partielle Ableitung und die Integration nach einer bestimmten Variablen invers zueinander sind. Jedoch kann dieser Satz nicht auf totale Ableitungen angewendet werden (zumindest nicht direkt. Könnte sein, dass es da auch möglichkeiten gibt das ganze auf Vektorwertige Funktionen anzuwenden, aber das ist für uns auf jeden Fall nicht relevant).
% Dadurch, dass die Integration die inverse Operation der partiellen Ableitung ist, ist die Anwendung der Integration auch vergleichsweise simpel. In der Klausur werden wahrscheinlich nur 2 oder 3 Dimensionale Integrale drankommen (und davon vermutlich auch nur die 2-Dimensionalen, aber das kann unberechenbar sein).
% Die Aufgabenstellung wird in etwa so aussehen, dass wir eine Fläche erhalten über der eine Funktion integriert werden soll. Ich bemühe mich im folgenden ein allgemeines Vorgehen darzustellen:
% Integralberechnung
% In der Klausur erhalten wir eine ähnliche Skizze wie unten, in der Bereits ein Rechteck eingezeichnet ist und ggf. die Ränder mit den jeweiligen Funktionen angegeben sind. Im Einfachsten Fall sind diese Ränder identisch. Dann kann man diese einfach in folgende Formel einsetzen:
% Formel für das Integral über dem grau markierten Rechteck ([-3 3]x[-3 3]): \int \limits^ 3 \limits_ {-3} \,\, \int \limits^ 3 \limits_ {-3} f(x,y) \,dx \,dy. Dabei können dx und dy vertauscht werden. Das innere Integral muss zuerst ausgewertet werden. Alle Variablen nach denen nicht integriert wird werden wie Konstanten behandelt. Am Ende sollte man einfach eine Zahl erhalten, die nicht mehr von Variablen abhängt.

x_src = -3:0.01:3;
y_src = -3:0.01:3;
fy1(x) = ((x.^2)./-10)+3.9
fb1(x) = 3+0*x;
fy2(x) = ((x.^2)./10)-3.9
fb2(x) = -3+0*x;
fx1(y) = (sin((y +3) * pi/2))^2 + 3
fb1(y) = 3+ 0*y;
fx2(y) = -3 + 0*y
y1_dest = fy1(x_src);
y1_base = fb1(x_src);
y2_dest = fy2(x_src);
y2_base = fb2(x_src);
x1_dest = fx1(y_src);
x1_base = fb1(y_src);
x2_dest = fx2(y_src);
x2_base = x2_dest;
x_base = cat(2,x_src,x1_base);
x_base = cat(2,x_base, fliplr(x_src));
x_base = cat(2,x_base,x2_base);
y_base = cat(2,y1_base,fliplr(y_src));
y_base = cat(2,y_base,y2_base);
y_base = cat(2,y_base,y_src);
figure("Name", "Integrationsfläche");
title("Grundriss der Integrationsfläche");
hold on;
plot(x_src, y1_dest, 'r');
plot(x1_dest, y_src, "b");
plot(x_src, y2_dest, 'r--');
plot(x2_dest, y_src, "b--");
plot(x_base, y_base, "Color", [0.66 0.66 0.66], "LineStyle", "--");
legend(["f_{y1}", "f_{x1}", "f_{y2}", "f_{x2}", "Base"]);
hold off;
xlim([-4.00 7.00])
ylim([-5.00 5.00])
daspect([1 1 1])

%
% Betrachten wir nun die gesamte Form (inklusive der farbigen Grenzen), so müssen wir Schrittweise vorgehen. Die Schritte lauten: Erst das graue Rechteck berechnen, das um die blauen Grenzen erweitert wurde. Danach das Rechteck, das von roten erweitert wurde. Anschließend zieht man das graue Rechteck noch mal ab, da man das ja doppelt berechnet hat. Die Gesamtformel für das Beispiel lautet also (ja das sieht schlimm aus, aber das liegt hauptsächlich am Sinus):
% \int \limits^3 \limits_ {-3} \int \limits^{\frac {-x^2 +39}{10}} \limits_ {\frac{x^2 - 39}{10}} f(x,y) \,dy\,dx +
% \int \limits^3 \limits_ {-3} \int
%  \limits^{sin\left(\left(y+3\right) \cdot \frac{\pi}{2}\right)^2 +3}
%  \limits_ {-3} f(x,y) \,dx\,dy -
% \int \limits^3 \limits_ {-3} \int \limits^{3} \limits_ {-3} f(x,y) \,dx\,dy
% Anschließend würde man diese Integrale alle für die gegebene Funktion berechnen und dann zusammenrechnen.
% Es kann passieren, dass wir das Integral über einer Kreisfläche, oder etwas in der Richtung bestimmen sollen. In so einem Fall bieten sich Polarkoordinaten an. Dazu muss man zunächst die Funktion in Polarkoordinaten umrechnen (s. obige Formeln). Ich vermute wenn in der Klausur etwas in der Richtung drankommt, wird es eh um die Flächenbestimmung gehen, weshalb die Funktion 1 wäre und der Schritt somit recht einfach. Anschließend formuliert man die Koordinaten mit polarer Schreibweise neu. Dabei handelt es sich vermutlich um einen Teil eines Kreises (Teilbereich zwischen 0 und 2\pi für \alpha angeben) mit einem Gewissen Radius (0 bis Radius). Wenn es sich um einen Donut handelt, dann ist die untere Grenze des Radius nicht 0. Dabei kann wieder eine Variable von der anderen abhängen, aber das ist ein Sonderfall der hoffentlich nicht auftritt.
% Somit hat man nun eine Funktion und Integralgrenzen, die zueinander passen. Damit bei diesem Integral allerdings der korrekte Wert herauskommt muss man für die jeweilige Koordinatentransformation noch einen Faktor einmultiplizieren. Dieser  hängt von der Art der Durchgeführten Koordinatentransformation ab und ist im Fall von polaren Koordinaten r. Dieser Faktor muss einfach ergänzt werden und so kann das Integral korrekt berechnet werden.
%% Volumen-/Flächen-/Schwerpunktberechnung mit Integralen
% Wenn man eine Fläche oder ein Volumen als Funktion gegeben hat und davon die Fläche/das Volumen bestimmen möchte kann man dies tun, indem man das Integral der Funktion f(x,y) = 1 \text{ bzw. } f(x,y,z) = 1 für die gegebene Form/das gegebene Volumen auswertet.
% Man kann dieses Verfahren auch nutzen um den sog. Schwerpunkt der Fläche zu berechnen. Dieser ist der Punkt auf dem man die Fläche "balancieren" könnte (auch wenn dieser evtl. außerhalb der Fläche liegt). Die x-Koordinate dieses Punkts erhält man indem man nach f(x,y) = x integriert und den Wert des Integrals durch den Flächeninhalt der Fläche teilt [x_s =\frac{1}{A}\int \underset{A}{\;} \int x\;\textrm{dA}}.  Die y-Koordinate äquivalent. Im 3-Dimensionalen funktioniert das gleiche Verfahren.
%
%% Taylorentwicklung in mehreren Variablen (bis 2. Ordnung)
% Die Taylorentwicklung in mehreren Variablen funktioniert prinzipiell recht ähnlich zu der in einer Variablen. Der Unterschied ist hauptsächlich, dass statt einem x^k nun alle Permutationen aller Variablen addiert werden.
% Diese Formulierung klingt nicht gut und ist vermutlich auch verständlicher, wenn man ein Beispiel dazu sieht.
% Als Beispiel wird die folgende Funktion verwendet:

f(x,y) = 7* exp(-(x^2+4*y^2)/(10))

% Da eine Potenz darin vorkommt (mit einer Variable als Exponent) handelt es sich nicht um ein Polynom. Für eine gute Näherung wäre jedoch ein Polynom ausreichend und leichter berechenbar. Also bestimmen wir die Taylorentwicklung von f am Punkt (0,0) (bis zur 2. Ordnung).
% Der erste Schritt dafür ist die nötigen Ableitungen zu berechnen. Das sind der Gradient und die Hesse-Matrix

G_f(x,y) = gradient(f)
H_f(x,y) = hessian(f)

% Anschließend berechnet man den Wert der Ableitungen am Entwicklungspunkt (im Normalfall [0,0])

Gradient_an_0_0 = G_f(0,0)
Hesse_an_0_0 = H_f(0,0)

% Nun baut man die Formel mit diesen Werten auf. Die Formel für die Taylor-Entwicklung 2. Ordnung lautet:
% T_{f_{(0,0)}}(x,y) = f(0,0) + \pmatrix{\partial_xf(0,0) \cr \partial_yf(0,0) } \cdot \pmatrix{x & y} +  \frac{1}{2} \cdot \pmatrix{x \cr y} \cdot H_f(0,0) \cdot \pmatrix{x & y}
% Man könnte diese Formel auch wieder allgemein mit einer Summenformel aufschreiben, aber wir brauchen diese eh nur bis zur 2. Ordnung. Also nimmt man jeweils die Funktion bzw. ihre Ableitungen und nutzt alle Permutationen der Variablen nach Ableitungsgrad (also z.Bz. wenn man nach x und y Abgeleitet hat nimmt man xy als Variablenmultiplikator). Für unser Beispiel lautet die Taylor-Entwicklung also [f(0,0) = 7]
% T_{f_{(0,0)}} = 7 + 0\cdot x + 0\cdot y - \frac{7}{5} x^2 + 0\cdot xy + 0\cdot xy - \frac{28}{5} y^2 = \\
% 7  - \frac{7}{5} x^2 - \frac{28}{5} y^2

T_f(x,y) = taylor(f, [x,y],[0 0],"Order", 3)

% Um jetzt noch kurz zu zeigen, dass die Taylorentwicklung auch In alle Richtungen annähert hier noch ein Plot mit Funktion und Taylorentwicklung in einer Abbildung

figure("Name", "Mehrdimensionale Taylorentwicklung")
title("Mehrdimensionale Taylorentwicklung zum 2. Grad")
hold on
fs = fsurf(f);
fs.FaceColor = [0 1 0];
fs.FaceAlpha = 0.35;
fs = fsurf(T_f);
fs.FaceColor = [0 0 1];
fs.FaceAlpha = 0.75;
legend(["f(x,y)", "T_{f_{(0,0)}}"]);
hold off;
grid on;
xlim([-3 3]);
ylim([-3 3]);
zlim([-1 7]);
view([1 1 1])

%
%% Lösungsverfahren und Lösungsstrukturen für Differentialgleichungen
% Differentialgleichungen sind eine neue Form von Gleichungen. Bei diesen wird nicht nach einer Variablen gesucht, sondern nach einer Funktion, für die diese Gleichung erfüllt ist. Dabei wird die gesuchte Funktion mit ihrer Ableitung in Relation gesetzt. Differentialgleichungen sind aufgrund ihrer Komplexität relativ oft nicht lösbar, außer in gewissen Formen. Für die Formen, die in der Klausur drankommen können (Lineare Differentialgleichungen (LDG) bis zur Ableitung 1.Ordnung) gibt es noch Verfahren, die standardisiert angewendet werden können. Wir brauchen 2 Verfahren: Die Trennung der Variablen und die Variation der Konstanten.
%% Trennung der Variablen
% Die Trennung der Variablen ist ein Verfahren um homogene LDG lösen zu können. Eine LDG ist homogen, wenn sie die Form a\cdot\dot{x} (t) + b\cdot x(t) = 0 hat. (Anm: \dot{x} ist eine Schreibweise für \frac{d}{dt} x also die Ableitung der Funktion x nach der Variablen t. x ist eine Eindimensionale Funktion mit Parameter t. Warum x jetzt keine Variable mehr ist hat den Grund, dass Mathematiker gerne nach einem x suchen und der Buchstabe damit schon belegt war ;-) ). Das entscheidende Merkmal einer homogenen Gleichung ist also, dass keine Konstanten hinzugefügt werden die nicht mit der Funktion x zu tun haben (also ist x(t) = 0 immer eine valide Lösung). Werte, die nur von t abhängen und nicht von x machen die Gleichung inhomogen [!].
% Eine homogene LDG hat immer unendlich viele Lösungen. Das Ziel ist es die Grundform aller Lösungen zu finden, die die Gleichung erfüllen.
% Das Lösungsverfahren für eine homogene LDG sieht folgendermaßen aus:
% \matrix{
% a \cdot \dot{x} (t) + b \cdot x(t)                                      &=& 0                                     & \text{| Ausgangsgleichung ; $a$ und $b$ sind beliebige Werte (können auch von t abhängen)} \cr
% a \cdot \frac{d}{dt} x(t)                                                   &=&  -b \cdot x(t)                    & \text{| Ableitung von x umgeschrieben, $b\cdot x(t) $ auf die andere Seite gebracht.} \cr
% a \cdot \frac{dx}{dt}                                                         &=&  -b \cdot x                       & \text{| Wir lassen temporär weg, dass x von t abhängt (auch wenn es das immer noch tut!) und schreiben $x$ zu $d$.} \cr
% a \cdot \frac{dx}{dt}                                                        &=&  -b \cdot x                       & \text{| Wir bringen jetzt alles was von $x$ abhängt auf die linke Seite und alles was von $t$ abhängt (oder konstant ist) auf die rechte).} \cr
% \frac{1}{x}  dx                                                                 &=&  -\frac{b}{a}  dt                & \left| \cdot \frac{1}{a}  \cdot dt \right| \cdot \frac{1}{x} \cr
% \int\frac{1}{x}  dx                                                                 &=&  \int-\frac{b}{a} dt                & \text{| Als nächstes wenden wir das Integral auf beide Seiten an (das ist genauso wie das zerreißen des Differentialoperators eine Vereinfachung).} \cr
% \int\frac{1}{x}  dx                                                                 &=&  \int-\frac{b}{a} dt                & \text{| Beide Integrale lassen sich berechnen. [Man beachte, dass das auch bei x möglich ist, weil das t, von dem x abhängt als konstant behandelt wird s. mehrdimensionale Integrale]} \cr
% ln (x) + c_1                                                                    &=& -\frac{b}{a} \cdot t + c_2                & \text{| Integrale berechnen. Falls $a$ oder $b$ von t abhängen muss das Integral angepasst werden. Im folgenden sind beide als Konstanten betrachtet. Alle Variationen von $c$ sind Integrationskonstanten} \cr
% ln (x) + c_1                                                                    &=& -\frac{b}{a} \cdot t + c_2                & \text{| Die Gleichung wird nun nach $x$ aufgelöst, wie man es mit jeder anderen Gleichung machen würde.} \cr
% ln (x)                                                                              &=& -\frac{b}{a} \cdot t + c_2  -c_1             & \left| -c_1\cr
% x                                                                              &=& e^{-\frac{b}{a} \cdot t + c_2  -c_1 }            & \left| e^ \wedge\cr
% x                                                                              &=& e^{-\frac{b}{a} \cdot t} \cdot e^{ c_2  -c_1 }            & \text{| Potenzrechenregeln}\cr
% x                                                                              &=& e^{-\frac{b}{a} \cdot t} \cdot e^{ c_2  -c_1 }            & \text{| Da beide $c$s Konstanten sind ist auch $e$ potenziert mit diesen Konstanten eine Konstante. Um sich kürzer fassen zu können benennt man diesen Konstanten ausdruck nun zu $A$ um.}\cr
% x                                                                              &=& A\cdot e^{-\frac{b}{a} \cdot t}            & \text{| Dies ist jetzt die allgemeine Lösung für eine homogene LDG. A ist eine variable Konstante, die beliebig gewählt werden kann.}\cr
%
% }
% Wie bereits oben angedeutet ist x hier nicht eindeutig. Das A kann beliebig (aus \mathbb{R}) gewählt werden und jede dabei entstehende Funktion von t ist eine mögliche Lösung. Als nächstes noch ein konkretes Beispiel (ohne ausführliche Erklärungen):
% \matrix{
%   \dot{x}(t) + 2\cdot x(t) &=& 0\cr
%   \frac{dx}{dt} &=& -2 \cdot x\cr
%  \frac{1}{x} dx &=& -2 dt\cr
% \int \frac{1}{x} dx &=& \int -2 dt\cr
% ln(x) + c_1 &=& -2t +c_2 \cr
% x &=& e^{c_2 - c_1} \cdot e^{-2t}\cr
% x(t) &=& A \cdot e^{-2t} & \left| A \in \mathbb{R}
% }
%% Variation der Konstanten
% Die Variation der Konstanten ist ein Verfahren um inhomogene LDGs zu lösen. Die Lösung einer inhomogenen LDG ist zusammengesetzt aus allen Lösungen des homogenen Äquivalents der LDG addiert mit einer Lösung des inhomogenen Systems. Aufgrund dieser Definition ist auch eine inhomogene LDG nicht eindeutig lösbar. Das Lösungsverfahren für eine inhomogene LDG setzt sich aus 2 Schritten zusammen. Im ersten Schritt löst man die äquivalente homogene Gleichung mithilfe der Trennung der Variablen (s. vorheriger Abschnitt). Die äquivalente homogene Gleichung erhält man indem man alle Teile der Gleichung, die nicht mit x zusammenhängen =0 setzt (z.B. 2\dot{x} (t) + 4 x(t) +4t = 5 \Rightarrow  2\dot{x} (t) + 4 x(t) = 0). Als nächstes nimmt man die (allgemeine) Lösung der homogenen LDG und ersetzt diese durch eine Funktion von t (im folgenden B genannt, bei Saller sonst A, aber ich möchte den Unterschied erkennbar machen). Damit hat man jetzt einen Wert für x(t), der im inneren wieder eine unbekannte hat (die Funktion, mit der man die Konstante ersetzt hat). Nun setzt man diesen Wert für x in die ursprüngliche LDG ein. Damit erhält man eine neue LDG, die jedoch nicht von x(t) sondern von B(t) abhängt. (Damit scheint jetzt nicht viel gewonnen zu sein). Bei dieser LDG fällt jedoch in der Regel (wegen Klausur und so) entweder B(t) oder \dot{B}(t) weg (eher ersteres) und damit ist die Gleichung lösbar (evtl. muss man mal integrieren). Das Ergebnis ist eine spezielle Lösung der LDG, noch nicht die Gesamtlösung. Um diese Gesamtlösung zu erhalten addiert man die erhaltene Lösung zur Lösung der homogenen LDG. Dabei treten wieder Konstanten auf, die man zusammenfassen kann zu einer Konstanten C(C \in \mathbb{R}). Diese Konstante ist dann wiederum was die unendlich vielen Lösungen des LDG unterscheidet und müsste mit einem konkreten Funktionswert bestimmt werden.
% Um das Vorgehen etwas zu veranschaulichen eine Rechnung mit dem Beispiel \dot{x}(t) + 2x(t) = e^{-2t}.
% Homogenes Äquivalent bestimmen: \dot{x}(t) + 2x(t) = 0
% Homogene LDG lösen: s. Abschnitt zur Trennung der Variablen x(t) = A\cdot e^{-2t}. Dieses x ist keine Lösung des inhomogenen DLG, weshalb es oft etwas anders benannt wird (z.B. \chi).
% Konstante A durch eine Funktion B(t) ersezten um eine spezielle Lösung des LDG zu finden. \rightarrow x(t) = B(t) \cdot e^{-2t} Anm: Dieses x ist eine Lösung, wenn man A=0 wählt, weshalb es genutzt wird um eine spezielle Lösung zu finden.
% Lösung für x(t) in die ursprüngliche Gleichung einsetzen. Dazu muss x(t) zunächst abgeleitet werden:\matrix{
% \text{a) Ableitung von $x(t)$: }&
% \dot{x}(t) = \dot{B}(t) \cdot e^{-2t} + B(t) \cdot (-2) \cdot e^{-2t} =
% \dot{B}(t) \cdot e^{-2t} -2 B(t) \cdot e^{-2t}
%  & \left| \text{Produktregel beachten!} \cr
% \text{b) Einsetzen in LDG: } \ &
% \matrix{ \dot{x}(t) &+&2\cdot x(t)& =& e^{-2t} \cr
% \dot{B}(t) \cdot e^{-2t} -2 B(t) \cdot e^{-2t} & + & 2 \cdot B(t) \cdot e^{-2t} & = & e^{-2t}
% } & \left| \text{neue lineare Differentialgleichung}
% }
% Die neue LDG lösen: \matrix{
% \dot{B}(t) \cdot e^{-2t} -2 \cdot B(t) \cdot e^{-2t} & + & 2 \cdot B(t) \cdot e^{-2t} & = & e^{-2t} & \left| \text{$B(t)$ "kürzt" sich heraus}\cr
% \dot{B}(t) \cdot e^{-2t}& & & = & e^{-2t} & \left| \cdot \frac{1}{e^{-2t} \cr
% & &  \dot{B}(t) & = &1 & \left| \int dt \cr
% & & \int  \dot{B}(t) dt & = &\int 1 dt & \cr
% & & B(t) + c_1 & = &t + c_2 & \left| -c_1 \cr
% & & B(t)  & = &t + c_2 - c_1 & \left|\text{Wir definieren $c_{ges}$ als $c_2 - c_1$ und haben so nur noch eine Konstante} \cr
% & & B(t)  & = &t + c_{ges} & \left|\text{Eine spezielle Lösung unseres LDG} \cr
% }
% Die Gesamtlösung bestimmen: \matrix{
% x(t) &=& x_{hom} (t) + x_{spez} (t)\cr
%  &=& A \cdot  e^{-2t} + x_{spez} (t) \cr
%  &=& A \cdot  e^{-2t} + B(t) \cdot e^{-2t} \cr
%  &=& A \cdot  e^{-2t} + (t + c_{ges}) \cdot e^{-2t}  & \left| \text{Ausklammern und umsortieren}\cr
%  &=& A \cdot  e^{-2t} + t\cdot e^{-2t} + c_{ges} \cdot e^{-2t} \cr
%  &=& A \cdot  e^{-2t} + c_{ges} \cdot e^{-2t} + t\cdot e^{-2t} & \left| \text{$A$ und $c_{ges}$ (Konstanten) einklammern}\cr
%  &=& (A + c_{ges}) \cdot  e^{-2t} + t\cdot e^{-2t} & \left| \text{$A$ und $c_{ges}$ zur neuen (finalen) Konstante $C$ zusammenfassen}\cr
% x(t) &=& C \cdot  e^{-2t} + t\cdot e^{-2t}& \left| \text{Endgültige Lösung der inhomogenen LDG ($C \in \mathbb{R}$)}\cr
% }
%% Schlusswort
% Ich hoffe die "Zusammenfassung" hilft einigen von euch die Klausur zu bestehen. Dann hätte ich mein Ziel erreicht. Ich hoffe ich habe hier selbst keine Fehler gemacht oder irgendwas nicht vernünftig erklärt. Die Zusammenfassung darf gerne an der DHBW Mosbach/Mergentheim weitergegeben werden. Ich habe keine genauen Quellen, aber hauptsächlich das Skript und den Unterricht als Wissensquelle genutzt.
% Damit bleibt mir nur noch ein obligatorischer Disclaimer:
% Wissen zusammengetragen aus dem Skript zur Vorlesung und diversen Internetseiten. Ich habe keinen/wenig Wert auf mathematisch korrekte Formulierungen gelegt. Wenn euch Fehler auffallen oder Verbesserungsvorschläge (von mir aus auch eigene Abschnitte oder bessere Beispiele), dann schickt mir die bitte per Mail (kilian@krampf.de). Ich habe hier alles nach bestem Wissen und Gewissen zusammengetragen, aber Fehler passieren und bitte blamed mich nicht wenn ich irgendwo einen Fehler gemacht hab.
%

function [y] = fun1(x)
y = x^2 + 3;
end
function [z] = fun2(x,y)
z = (exp(4*x) * (y-3))/(sin(x)+2);
end
function [out] = fun3(x,y,z)
x_mov = x - 4;
y_mov = y+6;
z_mov = 2*z-3;
out = 1/(x_mov^2 + y_mov^2 + z_mov^2);
end
function [y_1, y_2] = fun4(x_1,x_2)
y_1 = x_1 ./ (x_1.^2 + x_2.^2);
y_2 = x_2 .* sin(x_1);
end
function [y_1, y_2,y_3] = fun5(x_1,x_2,x_3)
y_1 = x_1 / (x_1^2 + x_2^2 + x_3^2);
y_2 = x_2 * sin(x_1) + x_3;
y_3 = 1/(sin(x_3)^2 + 1);
end