### A Pluto.jl notebook ###
# v0.20.21

using Markdown
using InteractiveUtils

# ╔═╡ 501f10c5-16fc-4250-91b7-405038b356c4
begin
	using PlutoTeachingTools
	using PlutoUI
	using CairoMakie
	ultramarine40 = RGBf(100/255.0, 143/255.0, 255/255.0)
	indigo50      = RGBf(120/255.0,  94/255.0, 240/255.0)
	magenta50     = RGBf(220/255.0,  38/255.0, 127/255.0)
	orange40      = RGBf(254/255.0,  97/255.0,   0/255.0)
	gold20        = RGBf(255/255.0, 176/255.0,   0/255.0)
	TableOfContents()
end

# ╔═╡ 644886f5-ff05-444c-9b2c-5f4f0c5ef37e
html"""
<h1 style="text-align:center">
	Höhere Mathematik II
</h1>
<div style="text-align:center">
	<p style="font-size: 30px; font-variant: small-caps; margin: 0px">
		Michael Schlottke-Lakemper, Manuel Torrilhon
	</p>
	<p style="font-size: 20px;">
		Universität Augsburg
	</p>
</div>
<!--
<style>
	main {
		margin: 0 auto;
		max-width: 1000px;
    	padding-left: max(160px, 10%);
    	padding-right: max(160px, 10%);
	}
</style>
-->
"""

# ╔═╡ d638a6f8-1c7e-11f1-001e-59999a8dfd53
md"""
# 5 Analysis im ``\mathbb{R}^n``
"""

# ╔═╡ 37b665d6-1127-4dac-a03d-fd404a440d46
md"""
Wir betrachten nun Funktionen ``f: D \subset \mathbb{R}^n \to \mathbb{R}^m``
"""

# ╔═╡ 705c3e2b-f408-4506-b77d-e118b9c6b816
md"""
##### Beispiel:
1. ``n=1, m=3.\; f: [0,T] \to \mathbb{R}^3, t \mapsto \begin{pmatrix} x(t)\\y(t)\\z(t) \end{pmatrix}`` z.B. ein Pfad im Raum mit $t\;\widehat=$ Zeit.
2. ``n=3,m=1.\; f: [a,b]^3 \to \mathbb{R}, (x,y,z) \mapsto f(x,y,z)`` z.B. Temperaturfeld im Raum
3. ``n=2, m=3.\; f: [0,2\pi]^2 \to \mathbb{R}^3, (\varphi, \theta) \mapsto \begin{pmatrix} 2 \cos(\varphi) + \cos(\theta)\\ 2 \sin(\varphi) + \cos(\theta)\\ \sin(\theta) \end{pmatrix}`` Fläche eingebettet im Raum, z.B. Torus.
4. ``n=3, m=4``:
``\begin{align*}f:[0, \infty) \times [0, 2\pi] \times [0,\pi] &\to \mathbb{R}^3 \\ (r,\varphi, \theta) &\mapsto \begin{pmatrix} r \cos \varphi \cos \theta \\ r \sin \varphi \cos \theta \\ r \sin \theta \end{pmatrix}\end{align*}``
nichtlineare Koordinatentransformationen, z.B. Kugelkoordinaten.
"""

# ╔═╡ de759c8c-df0b-48e9-8df0-c8f7a8346092
md"""
## 5.1 Begrifflichkeiten (Topologie)
"""

# ╔═╡ a7adf8c8-0c4d-4749-a2e9-b3fb9e8dfcce
md"""
Wir betrachten ``\mathbb{R}^n`` mit einer Norm ``\| \cdot \|`` (z.B. 1-/2-/``\infty``-Norm).
1. ``U \subset \mathbb{R}^n`` heißt _Umgebung_ von ``x \in \mathbb{R}^n``, wenn irgendeine Kugel um $x$ zu $U$ gehört, d.h.
``\qquad \operatorname{B}_r(x) \coloneqq \{ y \in \mathbb{R}^n \mid \|x - y\| < r \} \subset U \quad \text{für ein} \quad r > 0``
2. ``V \subset \mathbb{R}^n`` heißt _offen_, falls zu jedem ``x \in V`` eine Kugel ``\operatorname{B}_r(x)`` in ``V`` liegt.
3. ``A \subset \mathbb{R}^n``heißt _abgeschlossen_, falls ``\mathbb{R}^n \setminus A`` offen ist.
4. ``B \subset \mathbb{R}^n`` heißt _beschränkt_, falls ``0 < b \in \mathbb{R}``existiert mit ``\|x\| \leq b < \infty`` für alle ``x \in B``.
5. Eine Folge ``\left( x^{(k)} \right)_{k \in \mathbb N} \subset \mathbb{R}^n`` heißt _konvergent_ gegen ``x \in \mathbb{R}^n``, falls
``\qquad \forall \varepsilon > 0 \quad \exists  k_{\varepsilon} \in \mathbb{N} \quad \|x^{(k)} - x \| \leq \varepsilon \quad k \geq k_{\varepsilon}``
"""

# ╔═╡ 1c809114-1cf1-4cdf-a52d-ffe10a0bdb45
md"""
##### Beispiel:
1. Ganz ``\mathbb{R}^n`` ist offen, also ``\emptyset = \{\}`` ist abgeschlossen.
2. ``(a,b), (a, \infty)`` sind offen, ``[a,b]`` und ``[a, \infty)`` abgeschlossen (!).
3. ``x^{(k)} = \begin{pmatrix} \frac{1}{k} \\ \frac{2k}{k+1} \end{pmatrix}`` konvergiert gegen ``x = \begin{pmatrix} 0\\2 \end{pmatrix}``
"""

# ╔═╡ cd5b92a2-78ec-4d62-beab-25a7ae1d1f74
md"""
##### Bemerkung:
1. `` A \subset \mathbb{R}^n`` abgeschlossen ``\Leftrightarrow`` Für jede konvergente Folge liegt der Grenzwert in ``A``. Das heißt, _Limes-Bildung führt nicht aus ``A`` hinaus_.
2. Über Konvergenz lässt sich keine Aussage machen.
"""

# ╔═╡ 2a00b81a-7344-4e0d-a55b-30c9bf7449bb
md"""
##### Definition:
Eine Menge ``K`` (``\infty``-dim. möglich) heißt _kompakt_, wenn zu jeder Folge ``\left( x^{(m)} \right)_{m \in \mathbb N} \subset K`` eine konvergente Teilfolge ``\left( x^{(m_j)} \right)_{m \in \mathbb N} `` existiert.
"""

# ╔═╡ 272024bf-d77d-4761-9a8b-39a0e418eb91
md"""
##### Bemerkung:
1. Kompakte Mengen sind handlich, da sie sich in mancher Hinsicht wie endliche Mengen verhalten.
2. Für ``\mathbb{R}`` sagt Bolzano/Weierstraß, dass abgeschlossene und beschränkte Intervalle kompakt sind.
"""

# ╔═╡ 86b143ec-13ab-42a3-a69f-84e6c2f9e2b8
md"""
##### Satz:
1. ``K`` kompakt ``\Rightarrow K`` abgeschlossen und beschränkt.
2. ``K \subset \mathbb{R}^n`` abgeschlossen und beschränkt ``\Rightarrow K`` kompakt. Das heißt, im Allgemeinen (``\infty``-dim.) ist Abgeschlossenheit/Beschränktheit notwendig aber nicht hinreichend für Kompaktheit. Für ``\mathbb{R}^n (n < \infty)`` ist es notwendig und hinreichend.
(ohne Beweis)
"""

# ╔═╡ fde92f57-7047-4201-9111-0fab764b9a14
md"""
##### Beispiel:
1. Sei ``X = \mathbb{R}^n`` Die Einheitskugel ``\overline{\operatorname{B}}_1(0) = \{ x \in X \mid \|x\| \leq 1 \}`` ist abgeschlossen und beschränkt, also kompakt.
2. Sei ``X = \operatorname{C}( [0,1] \to \mathbb{R})`` der Raum der stetigen Funktionen. Die Einheitskugel ``\overline{\operatorname{B}}_1(0) = \{ f \in X \mid \|f\|_{\infty} \leq 1 \}`` ist abgeschlossen und beschränkt.
Betrachte die Folge ``\left( f_n \right)_{n \in \mathbb N} \subset \overline{\operatorname{B}}_1(0)`` mit ``f_n(x) = \sin(n \pi x)``, offenbar ist
``\|f_n\|_{\infty} = \max_{x \in [0,1]} \lvert \sin(n \pi x) \rvert = 1``
aber ``(f_n)`` enthält keine konvergente Teilfolge (oszilliert beliebig stark) ``\Rightarrow \overline{\operatorname{B}}_1(0)`` ist nicht kompakt.
"""

# ╔═╡ 6bba0466-4441-45d0-aef1-10ce6df9904d
md"""
##### Definition:
Sei ``f: D \subset \mathbb{R}^n \to \mathbb{R}^m`` und ``x_0 \in D``. ``f`` heißt _stetig_ in ``x_0``, falls gilt:
``\forall \varepsilon > 0 \quad \exists \delta > 0: \quad \underbrace{\|x - x_0\|}_{\text{Norm in } \mathbb{R}^n} \leq \delta \Rightarrow \underbrace{\|f(x) - f(x_0)\|}_{\text{Norm in } \mathbb{R}^m} \leq \varepsilon``

``f`` heißt stetig in ``D``, falls ``f`` in allen ``x \in D`` stetig ist.
"""

# ╔═╡ a7d42bdd-2e33-4ed7-9fb2-ac1d07c01855
md"""
##### Bemerkung:
1. Wie in 1D gilt ``f`` stetig ``\Leftrightarrow \lim\limits_{k \to \infty} f\left(x^{(k)}\right) = f\left( \lim\limits_{k \to \infty} x^{(k)}\right)`` für alle Folgen ``\left( x^{(k)} \right)_{k \in \mathbb N} \subset \mathbb{R}^n``
2. Statt rechts/links-stetig, gibt es unendlich-viele Richtungen.
"""

# ╔═╡ bd837a2d-6f50-465d-b0f6-0a9ed78725f9
md"""
##### Beispiel:
``f: \mathbb{R}^2 \setminus \{ 0 \} \to \mathbb{R}, (x,y) \mapsto f(x,y) = \frac{2xy}{x^2 + y^2}``

Ist ``f`` stetig bei ``\begin{pmatrix} x\\y \end{pmatrix} = \begin{pmatrix} 0\\0 \end{pmatrix}``? Also stetig fortsetzbar? Wenn ja, mit welchem Wert? Test:
``\begin{pmatrix} x\\y \end{pmatrix} = \begin{pmatrix} \frac{1}{100} \\ \frac{1}{100}  \end{pmatrix}  \qquad f(x,y) = \frac{2 \cdot \frac{1}{100^2} }{\frac{1}{100^2} + \frac{1}{100^2} } = 1 \quad (!!)``

Betrachte die Folge ``\begin{pmatrix} x_n\\y_n \end{pmatrix} = \frac{1}{n} \begin{pmatrix} \cos \alpha \\ \sin \alpha \end{pmatrix}`` mit festem ``\alpha``. ``\lim\limits_{n \to \infty} \begin{pmatrix} x_n\\y_n \end{pmatrix} = \begin{pmatrix} 0\\0 \end{pmatrix}``
"""

# ╔═╡ f1d331ba-5670-4b13-ada2-5db174b5a974
RobustLocalResource("https://github.com/hpsc-lab/lecture-notes-math1_dev/raw/1dbdf8076e38678cba0e432bc7a80ecb1496cbbf/notebooks/assets/folge_in_R2.svg", "./assets/folge_in_R2.svg")

# ╔═╡ fba57cbf-7c9d-4fa3-b127-fb69942bf238
md"""
``\lim\limits_{n \to \infty} f(x_x, y_n) = \lim\limits_{n \to \infty} \frac{2 \cdot \frac{1}{n^2} \cos \alpha \sin \alpha}{\frac{1}{n^2} \cos^2 \alpha + \frac{1}{n^2} \sin^2 \alpha} = 2 \cos \alpha \sin \alpha = \cos(2 \alpha)``
``f(0,0)`` nimmt je nach Richtung alle Werte zwischen ``\pm 1`` an!
"""

# ╔═╡ d48d1091-de14-48f7-b2b5-00ff13904191
md"""
##### Satz:
Sei ``K`` kompakt und ``f: K \to W`` stetig. Dann ist auch ``f(K) \subset W`` kompakt.
"""

# ╔═╡ cd42e4ec-3dea-494e-a0d6-1cf1f364613d
md"""
##### Beweis:
Für ``\left( x^{(k)} \right)_{k \in \mathbb N} \subset K`` gibt es eine Teilfolge mit ``\lim\limits_{j \to \infty} x^{(m_j)} = a \in K``. Also für die Teilfolge von ``\left( f(x^{(m)} \right)_{m \in \mathbb N}``, dass ``	\lim\limits_{j \to \infty} f\left(x^{(m_j)}\right) \stackrel{\text{stetig}}= f\left( \lim\limits_{j \to \infty} x^{(m_j)} \right) = f(a)``
"""

# ╔═╡ 2c312344-413c-4329-969b-2ef4b9385b35
md"""
##### Satz:
Sei ``K`` kompakt und ``f:K \to \mathbb{R}`` stetig. Dann ist ``f(K)`` beschränkt und ``f`` nimmt in ``K`` ein Maximum und Minimum an.
"""

# ╔═╡ 72acb906-5813-4359-a5d2-7b4f4f965f04
md"""
##### Beweis:
Beschränktheit ist klar, denn ``f(K)`` ist kompakt. Also existiert ein Supremum ``s \coloneqq \sup \{ f(x) \mid x \in K \}`` und wir können eine Folge ``\left( x^{(k)} \right)_{k \in \mathbb N} \subset K`` finden, sodass ``	\lim\limits_{k \to \infty} f\left(x^{(k)}\right) = s``. Da ``K`` und ``f(K)`` abgeschlossen sind, gilt ``	\lim\limits_{k \to \infty} x^{(k)} = u \in K`` und ``s \in f(K)``.
"""

# ╔═╡ cf2d255e-f172-49c1-add1-d387e1940cb9
md"""
##### Satz:
Seien ``\|\cdot\| `` und ``||| \cdot |||`` zwei Normen auf ``\mathbb{R}^n``. Diese sind äquivalent. Das heißt es gibt ``c_1,c_2 > 0``, sodass

``\begin{align*} c_1 ||| x||| &\leq \|x\| \leq c_2 |||x||| \\ \text{bzw.} \quad \frac{1}{c_2} \|x\| &\leq |||x||| \leq \frac{1}{c_1} \|x\| \end{align*}``

für alle ``x \in \mathbb{R}^n`` gilt.
"""

# ╔═╡ ddfc97b2-20b7-4988-9d8e-985d62d030ea
md"""
##### Beweis:
Wähle ``||| \cdot ||| = \|\cdot\|_{\infty}``. Für ``x = \sum x_ie_i`` (``e_i`` Basisvektor) gilt

``	\|x\|_{\infty} \leq \sum_{i=1}^n \lvert x_i \rvert \cdot \|e_i\| _{\infty} \leq \max \{ \|e_i\| _{\infty} \} \sum \lvert x_i \rvert \leq \underbrace{\max \{ \|e_i\| _{\infty}  \} \cdot n}_{c_2} \cdot \|x\| _{\infty}``

Betrachte jetzt ``K \coloneqq \{ x \in \mathbb{R}^n \mid \|x\| _{\infty} =1 \}`` kompakt. ``\|\cdot\| `` ist stetig, also existiert ein Minimum ``c = \min_{x \in K} \|x\| > 0``. Es gilt ``	\frac{1}{\|x\| _{ \infty} } x \in K \Rightarrow \underbrace{\|\frac{1}{\|x\| _{\infty} } x  \|}_{= \frac{1}{\|x\| _{\infty} } \|x\| }  \geq c``.
"""

# ╔═╡ bb8711ab-16f4-4383-92c0-067b615f9c32
md"""
##### Bemerkung:
Im ``\mathbb{R}^n`` ist es also egal, welche Norm wir betrachten. Unterschiedliche Normen erzeugen "nur" unterschiedliche Faktoren.
"""

# ╔═╡ 7f7d0b6b-53cc-4f77-8d8d-2b563c31e2b4
md"""
##### Satz:
Für eine lineare Abbildung ``\varphi: \mathbb{R}^n \to \mathbb{R}^m`` gilt:
1. ``	\|\varphi(x)\| \leq c \|x\|`` für alle ``x \in \mathbb{R}^n`` mit festem ``c`` (hängt nur von der Norm ab).
2. ``\varphi`` ist stetig.
"""

# ╔═╡ 2cc39eb6-15e2-4906-b81d-e49cc102062e
md"""
##### Beweis:
1. Wähle ``\|\cdot\|_1`` und fixiere eine Basis, sodass ``y \in \varphi(x) \leftrightarrow y_i = \sum a_{ij} x_j``.

``\qquad\begin{align*} \|y\| _1 &= \sum_{i=1}^m \lvert y_i \rvert\\ &= \sum_{i=1}^m \lvert \sum_{j=1}^n a_{ij} x_j \rvert\\ &\leq \sum_{i=1}^m \sum_{j=1}^n \lvert a_{ij}  \rvert \cdot \lvert x_j \rvert\\ &\leq \underbrace{\max_{j=1, \dots, n} \sum_{i=1}^m \lvert a_{ij}  \rvert }_{c} \sum_{j=1}^n \lvert x_j \rvert \end{align*}``
2. Zu zeigen ist ``\forall \varepsilon > 0 \quad \exists \delta > 0, \|x - x_0\| \leq \delta \rightarrow \|\varphi(x) - \varphi(x_0) \| \leq \varepsilon``. Wähle ``\delta = \frac\varepsilon c``. Dann: ``\|\varphi(x) - \varphi(x_0)\| = \|\varphi(x - x_0)\| \leq x \|x - x_0\| \leq c \delta = \varepsilon``.
"""

# ╔═╡ f43a007e-d998-4533-90bc-69f561a76dca
md"""
## 5.2 Differentiation
Wie in 1D als Approximation:
"""

# ╔═╡ 70bd6e6d-edad-4fa5-bd88-758c6fd4b282
md"""
##### Definition:
Eine Funktion ``f: \mathbb{R}^n \to \mathbb{R}^m`` heißt in ``x_0 \in \mathbb{R}^m``(total) differenzierbar, falls ``\forall  \xi \in \mathbb{R}^n`` eine lineare Abbildung ``\varphi: \mathbb{R}^n \to \mathbb{R}^m`` existiert mit ``f(x_0 + \xi) = f(x_0) + \varphi(\xi) + r(\xi)``, wobei ``r: \mathbb{R}^n \to \mathbb{R}^m`` eine nichtlineare "Abweichung" ist, für die gilt: ``\lim_{\|\xi\|  \to 0} \frac{\|r(\xi)\| }{\|\xi\| } = 0``.

Sowohl ``\varphi`` als auch ``r`` hängen von ``x_0`` ab. Wir nennen ``\varphi = f'(x_0)`` oder ``\varphi = \text{D}f(x_0)`` die Ableitung von ``f`` bei ``x_0``.
"""

# ╔═╡ 32cf3235-e28c-42f9-ab5f-d442941d85f7
md"""
##### Bemerkung:
1. Bezüglich einer Basis entspricht ``\text{D}f(x_0)`` einer Matrix ``A = (a_{ij}) \in \mathbb{R}^{m \times n}`` und ``f,r`` haben Koordinaten ``f_i, r_i`` (``i=1,\dots,n``), sodass ``f_i(x_0 + \xi) = f_i(x_0) + 	\underbrace{\sum_{j=1}^n a_{ij} \xi_j}_{\text{lineare Approximation an } f_i} + r_i(\xi) \quad i = 1, \dots, m``.
2. Für ``n=2`` und ``m=1`` entspricht die lineare Approximation der Tangentialebene im Punkt ``x_0`` an den Graphen/"Teppich" von ``f(x,y)``.
3. Wie in 1D gilt ``\text{D}(\alpha f + \beta g) = \alpha \text{D}f + \beta \text{D}g`` (Ableitung ist linear).
4. Für ``f`` linear, das heißt ``f(x) = Ax`` mit ``A \in \mathbb{R}^{m \times n}`` unabhängig von ``x``, dann folgt, dass ``f`` differenzierbar und stetig ist und ``\text{D}f(x_0) = A``, das heißt ``r(\xi) \equiv 0``.
"""

# ╔═╡ b111ea53-1829-448b-8755-49237452ccb9
md"""
##### Berechnung der Matrix ``f'(x_0)``:
Betrachte ``\underline \xi = h \underline e_j`` mit ``\underline e_j`` Basisvektor ``\begin{pmatrix} 0\\\vdots\\0\\1\\0\\\vdots\\0 \end{pmatrix} \begin{matrix} \\\\\\ \leftarrow j \\\\\\ \\ \end{matrix}`` und ``h \in \mathbb{R}``.

``f_i(x_0 + h e_j) = f_i(x_0) + \underbrace{\varphi_i(he_j)}_{= h \varphi_i(e_j) = h a_{ij} } + r_i(he_j)``

``\Rightarrow \frac{f_i(x_0 + h e_j) - f_i(x_0)}{h} - a_{ij} = \underbrace{\frac{r_i(he_j)}{h}}_{\to 0}``

``\displaystyle\Rightarrow a_{ij} = \lim_{h \to 0} \frac{f_i(x_0 + he_j) - f_i(x_0)}{h}``
"""

# ╔═╡ 2b6a7418-25a2-425d-8c32-f59b4965020d
md"""
##### Definition:
Sei ``f: \mathbb{R}^n \to \mathbb{R}^m``. Der Grenzwert
``\lim\limits_{h \to 0} \frac{f_i(x_0 + he_j) - f_i(x_0)}{h} =: \frac{\partial f_i}{\partial x_j} ``
heißt _partielle Ableitung_. Falls der Grenzwert existiert, heißt ``f`` _partiell differenzierbar_.
"""

# ╔═╡ d2657166-50d1-4602-b8b3-30f58cae9310
md"""
##### Bemerkung:
1. Für zum Beispiel ``f(x_1,x_2,x_3)`` ist ``\frac{\partial f}{\partial x_2} = \lim_{h \to 0} \frac{f(x_1, x_2 + h, x_3) - f(x_1,x_2,x_3)}{h}``. Das heißt, ``x_1,x_3`` werden als konstant angesehen und dann nach ``x_2`` abgeleitet.
2. Für ``m=1, n >1`` heißt der Vektor ``\left( \frac{\partial f}{\partial x_1}, \frac{\partial f}{\partial x_2}, \dots, \frac{\partial f}{\partial x_n}\right) `` der _Gradient_ von ``f``, kurz ``\operatorname{grad} f`` oder ``\nabla f``. (sprich "Nabla")
3. Für ``m>1,n>1`` heißt die Matrix ``	\left(\frac{\partial f_i}{\partial x_j} \right) \in \mathbb{R}^{m \times n}``, das heißt

``\qquad\underbrace{\begin{pmatrix} \frac{\partial f_1}{\partial x_1} &\frac{\partial f_1}{\partial x_2} & \cdots & \frac{\partial f_1}{\partial x_n} \\ \frac{\partial f_2}{\partial x_1} &\frac{\partial f_2}{\partial x_2} & \cdots & \frac{\partial f_2}{\partial x_n} \\ \vdots & & \ddots & \\ & & & \frac{\partial f_m}{\partial x_n} \end{pmatrix}}_{n \text{ Spalten}}\left.\begin{matrix}\\\\\\\\\\\end{matrix}\right\}\; m \text{ Zeilen}``

``\qquad``die _Jacobi-Matrix_ von ``f``, auch ``\text{D}f``.
4. Für ``m=n>1`` heißt ``\det(\text Df)`` die _Jacobi-Determinante_ von ``f``, auch ``\left\lvert \frac{\partial f_i}{\partial x_j}   \right\rvert``
"""

# ╔═╡ 0b2a502e-3fa5-49ae-b639-815d1dc86780
md"""
##### Beispiel:
1. ``f: \mathbb{R}^2 \to \mathbb{R}, (x,y) \mapsto x^2 + xy + y^2`` hat ``\operatorname{grad} f = \left( \frac{\partial f}{\partial x} , \frac{\partial f}{\partial y} \right) = (2x + y, -2y + x)``
2. ``f: \mathbb{R}^n \to \mathbb{R}, \underline x \mapsto \|x\| _2 = \sqrt{\sum_{j=1}^n x_j^2}`` hat ``	\frac{\partial f}{\partial x_i} = \frac{1}{2} \left( \sum_{j=1}^n x_j^2\right)^{- \frac{1}{2}} \cdot \frac{\partial}{\partial x_i} \left( \sum_{i=1}^{n}  x_j^2\right) = \frac{1}{2 \|x\| _2} \cdot 2x_i``, denn ``\frac{\partial}{\partial x_i}\left(x_1^2 + x_2^2 + \cdots\right) = 2x_i``. Also ist ``\operatorname{grad}f = \left( \frac{x_1}{\|x\| _2} , \frac{x_2}{\|x\| _2} , \dots, \frac{x_n}{\|x\| _2} \right) = \frac{\underline x}{\|x\| _2}`` und existiert nur für ``x \neq 0``. Für ``x=0`` ist es nicht differenzierbar.
3. ``	f: [0, \infty) \times [0, 2\pi] \times [0, \pi] \to \mathbb{R}^3, (e, \varphi, \theta) \mapsto \begin{pmatrix} r \cos \varphi \cos \theta \\ r \sin \varphi \cos \theta \\ r \sin \theta \end{pmatrix}`` hat ``\left( \frac{\partial f_i}{\partial x_j} \right) = \begin{pmatrix} \frac{\partial f_1}{\partial r} & \frac{\partial f_1}{\partial \varphi} & \frac{\partial f_1}{\partial \theta} \\ \frac{\partial f_2}{\partial r} & \frac{\partial f_2}{\partial \varphi} & \frac{\partial f_2}{\partial \theta} \\ \frac{\partial f_3}{\partial r} & \frac{\partial f_3}{\partial \varphi} & \frac{\partial f_3}{\partial \theta} \end{pmatrix} = \begin{pmatrix} \cos \varphi \cos \theta & - r \sin \varphi \cos \theta & - r \cos \varphi \sin \theta \\ \sin \varphi \cos \theta & r \cos \varphi \cos \theta & - r \sin \varphi \sin \theta \\ \sin \theta & 0 & r \cos \theta \end{pmatrix}``

``\qquad``Also 

``\qquad\begin{align*} \left\lvert \frac{\partial f_i}{\partial x_j}  \right\rvert &= \det( \cdots )\\ &= \sin \theta \left[r^2 \sin^2 \varphi \cos \theta \sin \theta + r^2 \cos^2 \varphi \sin \theta \cos \theta \right]\\ &+ r \cos \theta \left[ r^2 \cos^2 \varphi \cos^2 \theta + r \sin^2 \varphi \cos^2 \theta \right]\\ &= r^2 \cos \theta \sin^2 \theta + r^2 \cos \theta \cos^2 \theta\\ &= r^2 \cos \theta \end{align*}``
4. ``f: \mathbb{R}^2 \to \mathbb{R}, (x,y) \mapsto \begin{cases} \frac{2xy}{x^2 + y^2} &(x,y) \neq (0,0)\\ 0 &(x,y) = (0,0) \end{cases}``

``\qquad``Für ``(x,y) \neq (0,0)`` haben wir

``\qquad \begin{align*} \operatorname{grad}f &= \left( \frac{\partial f}{\partial x} , \frac{\partial f}{\partial y} \right) \\ &= \left( \frac{2y}{x^2 + y^2} - \frac{2xy}{(x^2 + y^2)^2} \cdot 2x, \frac{2x}{(x^2 + y^2)} - \frac{2xy}{(x^2 + y^2)^2} \cdot 2y\right) \\ &= \left( \frac{2yx^2 + 2y^2 - 4x^2y}{(x^2 + y^2)^2} , \frac{2x^3 + 2xy^2 - 4xy^2}{(x^2 + y^2)^2} \right) \end{align*}``

``\qquad`` Für ``(x,y) = (0,0)`` haben wir:

``\qquad \begin{align*} \left.\frac{\partial f}{\partial x} \right\vert_{(0,0)} = \lim_{h \to 0} \frac{f(0 + h,0) - f(0,0)}{h} = 0 \\ \left.\frac{\partial f}{\partial y} \right\vert_{(0,0)} = \lim_{h \to 0} \frac{f(0,0 + h) - f(0,0)}{h} = 0 \end{align*}``

``\qquad`` Aber ``f`` ist bei ``(0,0)`` nicht stetig, also existiert keine Tangentialebene. ``\Rightarrow`` nicht total differenzierbar. 
"""

# ╔═╡ 1e9ed9e7-b7a3-4f49-a2f4-a3427b1b2d3a
md"""
##### Satz:
Falls für ``f: \mathbb{R}^n \to \mathbb{R}^m`` in einer Umgebung ``U \subset \mathbb{R}^n`` von ``x_0 \in U`` die partiellen ABleitungen existieren und _stetig_ sind, so ist ``f`` in ``U`` total differenzierbar und ``\text{D}f`` in ``U`` stetig, insbesondere für ``x_0 \in U``.
"""

# ╔═╡ c42cfcc5-919a-4f1d-88c9-b1392865bc1d
md"""
##### Satz: Kettenregel
Sei ``f: \mathbb{R}^n \to \mathbb{R}^m`` differenzierbar in ``x_0 \in \mathbb{R}^n`` und ``g: \mathbb{R}^m \to \mathbb{R}^l`` differenzierbar in ``f(x_0) \in \mathbb{R}^m``. Dann ist ``g \circ f: \mathbb{R}^n \to \mathbb{R}^l`` differenzierbar in ``x_0`` mit ``\text{D}(g \circ f)(x_0) = \text{D}g(f(x_0)) \cdot \text{D}f(x_0)``

Das heißt, die Matrix ``\text{D}(g \circ f)(x_0) \in \mathbb{R}^{l \times n}`` ist das Produkt von ``\text{D}g(f(x_0)) \in \mathbb{R}^{l \times m}`` und ``\text{D}f(x_0) \in \mathbb{R}^{m \times n}``.
"""

# ╔═╡ a8ff4208-cb83-47a8-b05d-37600206ad32
md"""
##### Beispiel:
1. ``\underline x (t) = \begin{pmatrix} x_1(t) \\ x_2(t) \\x_3(t) \end{pmatrix}`` sei eine Trajektorie im Raum. ``\psi(x_1,x_2,x_3)`` eine Eigenschaft im Punkt ``(x_1,x_2,x_3)``. Wie ändert sich ``\psi`` entlang des Pfades ``\underline x(t)``?

   ``\widetilde \psi(t) = \psi(x_1(t), x_2(t), x_3(t))``

   ``\begin{align*} \frac{\text{d} \widetilde \psi}{\text{d} t}  &= \left.\frac{\partial \psi}{\partial x_1} \right\vert_{x(t)} \frac{\partial x_1}{\partial t} + \left.\frac{\partial \psi}{\partial x_2} \right\vert_{x(t)} \frac{\partial x_2}{\partial t} + \left.\frac{\partial \psi}{\partial x_3} \right\vert_{x(t)} \frac{\partial x_3}{\partial t} \\ &=\left. \left( \frac{\partial \psi}{\partial x_1}, \frac{\partial \psi}{\partial x_2}, \frac{\partial \psi}{\partial x_3}\right) \right\vert_{x(t)} \begin{pmatrix} \frac{\partial x_1}{\partial t} \\ \frac{\partial x_2}{\partial t} \\ \frac{\partial x_3}{\partial t} \end{pmatrix} \\ &= \operatorname{grad} \psi(x(t)) \cdot x'(t)\end{align*}``

2. ``f: \mathbb{R} \to \mathbb{R}^2, t \mapsto \begin{pmatrix} t^2\\ \sin t \end{pmatrix}``. ``\text Df = \begin{pmatrix} \frac{\partial f_1}{\partial t} \\ \frac{\partial f_2}{\partial t} \end{pmatrix} = \begin{pmatrix} 2t\\ \cos t \end{pmatrix}``. ``g: \mathbb{R}^2 \to \mathbb{R}^2, (x,y) \mapsto \begin{pmatrix} xy\\ \ln x + e^y \end{pmatrix}``. ``\text Dg = \begin{pmatrix} \frac{\partial g_1}{\partial x} & \frac{\partial g_1}{\partial y} \\ \frac{\partial g_2}{\partial x} & \frac{\partial g_2}{\partial y} \\ \end{pmatrix} = \begin{pmatrix} y & x \\ \frac{1}{x} & e^y \end{pmatrix}``. ``h = g \circ f: \mathbb{R} \to \mathbb{R}^2, t \mapsto g(f(t))``. ``\begin{align*} \text Dh(t) &= \begin{pmatrix} \frac{\partial h_1}{\partial t} \\ \frac{\partial h_2}{\partial t} \end{pmatrix} \\ &= \text Dg(f(t)) \text Df(t) \\ &= \left.\begin{pmatrix} \frac{\partial g_1}{\partial x} & \frac{\partial g_1}{\partial y} \\ \frac{\partial g_2}{\partial x} & \frac{\partial g_2}{\partial y} \end{pmatrix} \right\vert_{\begin{pmatrix} x\\y \end{pmatrix} = \begin{pmatrix} f_1(t)\\f_2(t) \end{pmatrix} }  \cdot  \begin{pmatrix} \frac{\partial f_1}{\partial t} \\ \frac{\partial f_2}{\partial t} \end{pmatrix} \\ &= \begin{pmatrix} \frac{\partial g_1}{\partial x} \frac{\partial f_1}{\partial t} + \frac{\partial g_1}{\partial y} \frac{\partial f_2}{\partial t} \\ \frac{\partial g_2}{\partial x} \frac{\partial f_1}{\partial t} + \frac{\partial g_2}{\partial y} \frac{\partial f_2}{\partial t} \\ \end{pmatrix} \\ &= \begin{pmatrix} y \cdot 2t + x \cos t \\ \frac{1}{x} 2t + e^y \cos t \end{pmatrix} \\ &= \begin{pmatrix} \sin t \cdot 2t + t^2 \cos t \\ \frac{1}{t^2} 2t + e^{\sin t} \cos t \end{pmatrix} \end{align*}``
3. Innere Energie ``U = U(T, S, N)``. Temperatur ``T(t)``, Entropie ``S(t)``, Teilchenzahl ``N(t)`` (abhängig von der Zeit ``t``). ``\leadsto U(t) = U(T(t), S(t), N(t))``. ``	\frac{\text d U}{\text d t} = \frac{\partial U}{\partial T} \frac{\text d T}{\text dt} + \frac{\partial U}{\partial S} \frac{\text d S}{\text dt} + \frac{\partial U}{\partial N} \frac{\text d N}{\text dt}``
"""

# ╔═╡ b6828b0d-31b2-44da-bf6d-14ccf7df8f8b
md"""
##### Definition:
Sei ``f: \mathbb{R}^n \to \mathbb{R}^m``, ``x \in \mathbb{R}^n`` ein Punkt und ``v \in \mathbb{R}^n`` mit ``\|v\| _2 = 1`` eine "Richtung" (Einheitsvektor). Wir nennen den Vektor ``\frac{\partial f}{\partial v} = \left(\frac{\partial f_1}{\partial v}, \frac{\partial f_2}{\partial v}, \dots, \frac{\partial f_n}{\partial v}\right)`` mit

``\frac{\partial f_i}{\partial v} (x_0) \coloneqq \lim_{h \to 0} \frac{f_1(x_0 + vh) - f_i(x_0)}{h} \qquad i = 1, \dots, m``

die _Richtungsableitung_ von ``f``.
"""

# ╔═╡ 9af0515f-5ee2-4857-8d54-f1c1b62cfcc2
md"""
##### Bemerkung:
Für ``v = e_j`` (Koordinatenrichtung) ist ``\frac{\partial f}{\partial v}`` der Vektor der partiellen Ableitung ``\frac{\partial f_i}{\partial x_j}`` (für festes ``j``).
"""

# ╔═╡ b77b4c16-5277-4bb6-80e8-01bb90a7d0b2
md"""
##### Beispiel:
Betrachte ``f: \mathbb{R}^n \to \mathbb{R}`` und ``x_0 \in \mathbb{R}^n``. In welcher Richtung ``v \in \mathbb{R}^n``, ``\|n\| = 1``, ändert sich ``f`` bei ``x_0`` am meisten? Das heißt, ``\frac{\partial f}{\partial v} (x_0)`` ist maximal? Sei ``\underline \xi(t) = \underline x_0 + t \underline v`` mit ``t \in \mathbb R`` ein Pfad in ``\mathbb R^n``. Es gilt

``\frac{\partial f}{\partial v} (x_0) = \frac{\text{d}}{\text{d}t}f(\xi(t))\big\vert_{t=0} = \operatorname{grad}f(\xi(t)) \cdot \xi'(t) \big\vert_{t=0} = \operatorname{grad}f(x_0) \cdot \underline v``

Die Richtungsableitung ist die Projektion von ``\operatorname{grad} f`` auf die Richtung ``\underline v``. Die Länge ist also maximal, dass ``v`` parallel zu ``\operatorname{grad} f`` ist.
"""

# ╔═╡ 1585111b-8ccf-41bc-9434-852a82a2f732
RobustLocalResource("https://github.com/hpsc-lab/lecture-notes-math1_dev/raw/1dbdf8076e38678cba0e432bc7a80ecb1496cbbf/notebooks/assets/gradient.svg", "./assets/gradient.svg")

# ╔═╡ bee1bef7-92e0-411a-9546-a764a88bc477
md"""
##### Mittelwertsatz:
Erinnere in 1D für ``f: [a,b] \to \mathbb R``.
1. ``\exists  \xi \in [a,b]: \qquad f(b) - f(a) = f'(\xi)(b - a)``
2. ``\exists  \xi \in [a,b]: \qquad \int_a^b f(x)\; \text dx = f(\xi)(b-a)``
"""

# ╔═╡ 10d946f4-d30e-4e04-87d4-69d3c170322b
md"""
##### Bemerkung:
1. (1.) folgt aus (2.), denn ``f(b) - f(a) \stackrel{(\ast)}= \int_a^b f'(x)\; \text dx \stackrel{(2.)}= f'(\xi)(b - a)``
2. ``(\ast)`` lässt sich auch schreiben mit ``a= x_0`` und ``b = x_0 + \xi``: ``f(x_0 + \xi) - f(x_0) = \int_{x_0}^{x_0 + \xi} f'(x) \;\text{d}x = \int_0^1 f'(x_0 + t\xi) \;\text{d}t \cdot \xi`` durch die Substitution ``x \leftrightarrow t``, ``x = x_0 + t\xi``.
3. Weder (1.) noch (2.) lassen sich im ``\mathbb R^n`` allgemein realisieren, aber ``(\ast)`` schon.
"""

# ╔═╡ e3e30523-854f-47ed-8aef-aa26a0829c4a
md"""
##### Satz:
Sei ``f: U \subset \mathbb{R}^n \to \mathbb{R}^m`` und ``x_0 \in U``, sowie ``\xi \in \mathbb R^n`` derart, dass ``x_0 + t \xi \in U`` für ``t \in [0,1]``. Dann gilt:
1. ``f(x_0 + \xi) - f(x_0) = \int_0^1 \text Df(x_0 + t \xi)\; \text dt \cdot \xi``
2. ``\|f(x_0 + \xi) - f(x_0) \| \leq M \|\xi\|`` mit ``0 < M \in \mathbb R`` wobei ``M`` nur von ``\text Df(x_0 + t\xi)`` abhängt.
"""

# ╔═╡ 9b4d1ccf-1153-45a1-b535-41e421d5c0f1
md"""
##### Bemerkung:
1. Das Integral einer Matrix erfolgt komponentenweise.
2. ``M`` entspricht der "Norm" von ``\text Df(x_0 + t \xi)``.
"""

# ╔═╡ 4f74fb37-de37-4b31-b3ae-cd94cdb14607
md"""
##### Beweis (nur von 1.):
Wir definieren ``g_i(t) = f_i(\underbrace{x_0 + t \xi}_{x(t)})`` mit ``i=1, \dots,m``. Es gilt ``g_i(1) - g_i(0) = \int_0^1 g_i(t) \;\text{d}t``. Nach der Kettenregel gilt ``g_i'(t) = \sum_{j=1}^n \frac{\partial f_i}{\partial x_j} (x(t)) \frac{\text d x_j}{\text d t} = \sum_{j=1}^n \frac{\partial f_i}{\partial x_j} (x(t)) \xi_j`` also ``\int_0^1 g'(t) \;\text{d}t = \sum_{j=1}^n \int_0^1 \frac{\partial f_i}{\partial x_j} (x_0 + t \xi) \;\text{d}t  \xi_j	\; \widehat =\; \int_0^1 \text Df(x_0 + t \xi) \;\text{d}t  \cdot \xi``
"""

# ╔═╡ ab5a243d-1c44-4676-8fe5-20154926e194
md"""
## 5.3 Umkehrfunktion
Sei ``f: U \subset \mathbb{R}^n \to \mathbb{R}^n`` (``m = n``!). Wann lässt sich ``f`` umkehren? Das heißt, es existiert ``f^{-1}: W \subset \mathbb{R}^n \to \mathbb{R}^n`` mit ``f^{-1} \circ f = \operatorname{id}``.
1. Falls ``f^{-1}`` existiert, gilt ``\text D(\operatorname{id}) = I = \text D\left(f^{-1} \circ f\right) = \text D \left( f^{-1} \right) \cdot \text Df``. Das heißt, die Jacobi-Matrizen sind invertierbar.
2. In der Nähe von ``x_0`` gilt für ``x = x_0 + \xi``, dass ``y = f(\underbrace{x_0 + \xi}_{x}) = f(x_0) + \text Df(x_0) \cdot \underbrace{\xi}_{x - x_0}``, also ``x = x_0 + \text Df(x_0)^{-1}(y - f(x_0))``.
"""

# ╔═╡ 17e992a4-f9f7-44de-9272-071828dee798
md"""
##### Satz:
Sei `` f: U \subset \mathbb{R}^n \to \mathbb{R}^n`` stetig differenzierbar und für ``x_0 \in U`` sei ``\text Df(x_0)`` invertierbar (also ``\det \text Df(x_0) \neq 0``). Dann existiert eine Teilmenge ``V \subset U`` mit ``x_0 \in V`` und eine Umgebung ``V' \subset \mathbb R^n`` von ``b = f(x_0)``, sodass
1. ``f`` bildet ``V`` bijektiv auf ``V'`` ab
2. ``g \coloneqq f^{-1}: V' \to V`` ist stetig differenzierbar
3. ``\text Dg(b) = (\text Df(a))^{-1}``.
"""

# ╔═╡ 39f7fa27-e99e-4d36-8dd1-f8349187c507
md"""
Die Umkerhfunktion ``y = f(x) \Leftrightarrow x = f^{-1}(y)`` ist ein Spezialfall von implizit definierten Funktionen.
"""

# ╔═╡ 8862d324-44d9-4cfb-8c75-477acc41a47d
md"""
##### Definition:
Sei ``U \subset \mathbb{R}^p \times \mathbb{R}^n`` und ``F: U \to \mathbb{R}^n, (\underbrace{x}_{\in \mathbb{R}^p},\underbrace{y}_{\in \mathbb{R}^n}) \mapsto F(x,y)`` stetig differenzierbar. Die Funktion ``T: \mathbb R^n \to \mathbb R^n`` definiert durch ``x \mapsto y = T(x)`` mit ``F(x,y) = 0``, das heißt ``F(x, T(x)) = 0``, heißt _implizit definiert_.
"""

# ╔═╡ b8a523cb-1282-41e3-933c-7a55e9b58dff
md"""
##### Bemerkung:
1. Implizit definierte Funktionen müssen nicht existieren oder eindeutig sein.
2. Für ``p = n = 1`` beschreibt ``F(x,y) = 0 \in \mathbb R`` eine "Höhenlinie" in der x-y-Ebene. ``T(x)`` beschreibt diese Höhenlinie als Funktion.
"""

# ╔═╡ 5e74f85e-95af-42a1-82ff-b36f8f1728cf
md"""
##### Beispiel:
1. ``F(x,y) = x^2 + y^2 - 1``. ``(x,y) \in \mathbb R^2``. ``F: \mathbb R^2 \to \mathbb R``.

$(RobustLocalResource("https://github.com/hpsc-lab/lecture-notes-math1_dev/raw/1dbdf8076e38678cba0e432bc7a80ecb1496cbbf/notebooks/assets/implizite_funktionen.svg", "./assets/implizite_funktionen.svg"))

``\qquad F(x, T(x)) = 0``. ``T(x) =`` ? ``x^2 + T(x)^2 - 1 = 0``, also ``T(x)^2 = 1 - x^2``:

``\qquad T(x) = \pm \sqrt{1 - x^2}``. Nicht eindeutig! Fixiere ``F(x_0, y_0)`` mit ``F(x_0, y_0) = 0``.

``\qquad \begin{align*} y = T(x) \text{ bei } &(x_0, y_0) = (0,-1) ? \quad T(x) = - \sqrt{1 - x^2} \text{ eindeutig} \\ y = T(x) \text{ bei } &(x_0, y_0) = (1,0) ? \quad T(x) \text{ existiert nicht!} \\ \end{align*}``
2. Eine Umkehrfunktion lässt sich schreiben als ``F\left(f^{-1}(y), x\right) = 0`` mit ``F(x,y) = y - f(x)``, denn ``F\left(f^{-1}(y), y\right) = y - f\left(f^{-1}(y)\right) = 0 ``
"""

# ╔═╡ 538b1d6d-710d-4a1d-8f25-9d732f23a5cd
md"""
##### Bemerkung:
Wie bei der Umkehrfunktion lässt sich eine Aussage über die Ableitung von ``T(x)`` machen. Schreibe ``x = \begin{pmatrix} x_1 \\ \vdots \\ x_n \end{pmatrix}, T = \begin{pmatrix} T_1 \\ \vdots \\ T_n \end{pmatrix}`` und ``T(x) = \begin{pmatrix} y_1 \\ \vdots \\ y_n \end{pmatrix}``. ``\frac{\partial}{\partial x_j} F_i(x, T(x)) = 0`` mit ``i = 1, \dots, n``, ``j = 1, \dots, p``.

``\frac{\partial F_i}{\partial x_j} (x, T(x)) + \sum_{k=1}^n \frac{\partial F_i}{\partial y_k} (x, T(x)) \frac{\partial T_k}{\partial x_j} (x) =0``

Wir schreiben ``	\text D_xF = \left( \frac{\partial F_i}{\partial x_j} \right) \in \mathbb{R}^{n \times p}``, ``	\text D_yF = \left(\frac{\partial F_i}{\partial y_k} \right) \in \mathbb{R}^{n \times n}`` und damit ``\text D_xF(x, T(x)) + \text D_yF(x, T(x)) \text DT(x) = 0 \Leftrightarrow \text DT(x) = - \left[\text D_yF(x, T(x)\right]^{-1} \text D_xF(x, T(x))``

Ein invertierbares ``\text D_yF`` ist also notwendig für ein differenzierbares ``T(x)``.
"""

# ╔═╡ 3cb7186c-9ca2-4413-b369-214b1497fa4e
md"""
##### Beispiel:
``F(x,y) = x^2 + y^2 - 1``. ``\begin{pmatrix} x\\y \end{pmatrix} \in \mathbb R^2``. ``F: \mathbb R^2 \to \mathbb R``. ``\text D_xF = \frac{\partial F}{\partial x} = 2x, \text D_yF = \frac{\partial F}{\partial y} = 2y, F'(x) = - \frac{2x}{2y} = - \frac{x}{T(x)} ``. Für ``T(x) = \sqrt{1 - x^2}`` gilt ``T'(x) = -\frac{x}{\sqrt{1 - x^2}}``. Aber bei ``(x,y) = (1,0)`` ist ``T'(x) = - \frac xy \to \infty ``. Das geht nicht.
"""

# ╔═╡ 275c2528-42b0-4fe0-8bc2-2d3fa12a964c
md"""
Für den Beweis zur Existenz von impliziten Funktionen benötigen wir:
"""

# ╔═╡ 5a7851ba-70cc-4f0f-96fa-ac7088b787cf
md"""
### 5.3.1 Banach'scher Fixpunktsatz
"""

# ╔═╡ d1837cc0-a22c-46de-97d3-27ac30877eff
md"""
##### Satz:
Sei ``E \subset \mathbb R^n`` vollständig und für ``\Phi: E \to \mathbb R^n`` gelte
1. ``\Phi(E) \subset E`` (``\Phi`` führt nicht aus ``E`` heraus, "Selbstabbildung").
2. ``\|\Phi(x) - \Phi(y)\| \leq K \|x - y\|`` mit ``K < 1`` für alle ``x,y \in E`` ("kontraktion").
dann existiert ein eindeutiger _Fixpunkt_ ``x^\ast \in E`` mit ``x^\ast = \Phi(x^\ast)``.
"""

# ╔═╡ 14433d47-3ceb-42b7-80d8-259ed768cdd8
RobustLocalResource("https://github.com/hpsc-lab/lecture-notes-math1_dev/raw/1dbdf8076e38678cba0e432bc7a80ecb1496cbbf/notebooks/assets/banach.svg","./assets/banach.svg")

# ╔═╡ 3ccdaadf-d754-4d36-89bf-57da67cae148
md"""
##### Beweis:
Wir betrachten die Folge ``x^{(n+1)} = \Phi(x^{(n)})``, ``n=0,1,\dots`` mit Startwert ``x^{(0)} \in E`` und zeigen ``x^{(n)}`` ist Cauchy-Folge. Also existiert der Grenzwert ``x^\ast = \lim_{n \to \infty} x^{(n)}`` (Vollständigkeit). Cauchy: ``\forall \varepsilon \exists n_0 \in \mathbb{N}: \quad \|x^{(m)} - x^{(n)}\| \leq \varepsilon \quad m,n > n_0``.

``	\|x^{(n+1)} - x^{(n)}\| = \|\Phi(x^{(n)}) - \Phi(x^{(n-1})\| \leq K \|x^{(n)} - x^{(n-1)}\| \leq \cdots \leq K^n \underbrace{\|x^{(1)}- x^{(0)}\|}_{e_0}``

Dann mit ``n < m``:

``\begin{align*} \|x^{(m)} - x^{(n)}\| &= \|x^{(m)} - x^{(m - 1)} + x^{(m - 1)} - x^{(n)}\| \\ &\leq \underbrace{\|x^{(m)} - x^{(m-1)}\|}_{\leq K^{m-1} e_0} + \|x^{(m  - 1} - x^{(n)}\| \\ &\leq (K^{m-1} + K^{m-2})e_0 + \|x^{(m-2)} - x^{(n)}\|  \\ &\; \vdots \\ &\leq (K^{m-1} + K^{m-2} + \dots + K^n) e_0 \end{align*}``

Und es gilt ``K^{m-1} + K^{m-2} + \dots + K^n \leq \sum_{i=n}^{\infty}K^i = \sum_{i=0}^{\infty}K^i - \sum_{i=0}^{n-1} K^i = \frac{K^n}{1 - K}`` (geoemtrische Reihe).

Wähle ``\varepsilon, n_0`` so, dass ``	\frac{K^{n_0}}{1 - K}  \leq \varepsilon \Rightarrow \|x^{(m)} - x^{(n)}\| \leq \varepsilon \quad m > n > n_0``

Ist ``x^\ast`` ein Fixpunkt? ``	x^\ast = \lim_{n \to \infty} x^{(n + 1)} = \lim_{n \to \infty} \Phi\left(x^{(n)}\right) = \Phi(x^\ast)``, denn ``\Phi`` ist lipschitz-stetig.

Ist ``x^\ast`` eindeutig? Seien ``x^\ast, \tilde x \in E`` zwei Fixpunkte (unterschiedlich).

``0 < \|x^\ast - \tilde x\| = \|\Phi(x^\ast) - \Phi(\tilde x)\| \leq K \|x^\ast - \tilde x\| < \|x^\ast - \tilde x\|``

Das ist natürlich nicht möglich.
"""

# ╔═╡ 3c7a0c3e-9cf9-475c-b7b9-58f3e87a4565
md"""
##### Satz: Impliziter Funktionensatz
Sei ``F: U \subset \mathbb R^p \times \mathbb R^n \to \mathbb R^n`` stetig differenzierbar und für ``(x_0, y_0) \in U`` gelte ``\text D_yF(x_0,y_0) \in \mathbb R^{n \times n}`` ist invertierbar. Dann gibt es Umgebungen ``\text B_r(x_0)`` und ``\text B_\rho(y_0)`` mit Radien ``r, \rho > 0``, sodass die impliziete Funktion ``T: \text B_r(x_0) \subset \mathbb R^n \to \text B_\rho(y_0) \subset \mathbb R^n, x \mapsto y = T(x)`` mit ``F(x,y) = 0`` existiert, sowie eindeutig und stetig differenzierbar ist.
"""

# ╔═╡ e6d21947-f7ba-4619-838c-0d7bb06d0c9c
md"""
##### Beweis:
Zur Einfachheit ``(x_0, y_0) = (0,0)``. Wir kürzen ab: ``B \coloneqq \text D_yF(0,0) = \text{const.}`` und definieren für ``x \in \mathbb R^p`` fest ``\Phi_x: \mathbb R^n \to \mathbb R^n, y \mapsto y - B^{-1}\cdot F(x,y)`` (Den Parameter ``x`` lassen wir eventuell weg). Es gilt ``F(x,y) = 0 \Leftrightarrow \Phi_x(y) = y``, also ``y`` ein Fixpunkt von ``\Phi_x`` ist. Wir benutzen den Banach'schen Fixpunktsatz! Zu zeigen ist für eine Umgebung ``U`` von ``0 = y_0``:
1. ``\|\Phi_x(\hat y) - \Phi_x(y)\|  \leq K \|\hat y - y\| \quad y, \hat y \in U``
2. ``\Phi_x(U) \subset U``
Zu 1. verwenden wir den Mittelwertsatz: ``\Phi_x(\underbrace{y + \xi}_{\hat y}) - \Phi_x(y) = \int_0^1	\text Dy \Phi(y + t \xi) \;\text{d}t  \cdot \underbrace{\xi}_{= \hat y - y}``, oder komponentenweise ``\Phi_{x,i}(y + \xi) - \Phi_{x,i} (y) = \sum_{k=1}^n \int_0^1 \frac{\partial \Phi_i}{\partial y_k} (y + t \xi) \;\text{d}t (\hat y_k - y)``. Also ``	\max_{i = 1, \dots, n} \lvert \Phi_i( \hat y ) - \Phi_i(y) \rvert \leq \left(\sum_{k=1}^n \int_0^1 \left\lvert \frac{\partial \Phi_i}{\partial y_k} (y + t \xi)\right\rvert \;\text{d}t \right) \max_{j = 1, \dots, n} \lvert \hat y_i - y_i \rvert``.

``\begin{align*} \text D_y \Phi_x(y) &= \text{id} - B^{-1} \text D_yF(x,y) \quad \text{ ist stetig} \\ \text D_y \Phi_x(0) &= \text{id} - B^{-1}B = 0\quad (x = 0) \end{align*}``

Das heißt, es existiert ein (eventuell kleiner) Radius ``\rho`` um ``y=0`` und ``r`` um ``x= 0`` so, dass ``\left\lvert \frac{\partial \Phi_i}{\partial y_k}   \right\rvert \leq \frac{1}{2n} \quad \forall y \in \text B_\rho(0)``

``\Rightarrow \|\Phi_x(\hat y) - \Phi_i(y)\|_{\infty} \leq \frac{1}{2} \|\hat y - y\| _{ \infty} \qquad K = \frac{1}{2}``

Zu 2. ist zu zeigen ``y \in \text B_\rho(0) \Rightarrow \Phi_x(y) \in \text B_\rho(0)``.

``	\|\Phi_x(y) - \Phi_x(0) + \Phi_x(0)\| \leq \|\Phi_x(y) - \Phi_x(0)\| + \|\Phi_x(0)\| \leq \frac{1}{2} \underbrace{\|y\|}_{\leq \rho} + \|\Phi_x(0)\|``

``\begin{align*} \Phi_x(0) &= B^{-1}F(x,0) \quad \text{ist stetig in } x \\ \Phi_x(0=\big\vert_{x = 0} = B^{-1}F(0,0) = 0 \end{align*}``

Wieder gibt es einen (eventuell kleinen) Radius ``r`` um ``x=0`` so, dass ``\|\Phi_x(0)\| \leq \frac{\rho}{2} \Rightarrow \|\Phi_x(y)\| \leq \frac{\rho}{2} + \frac{\rho}{2} \leq \rho``

Also existiert für ein festes ``x`` ein eindeutiger Fixpunkt ``y^\ast = \Phi_x(y^\ast)``. Wir schreiben ``y^\ast = T(x)``.
"""

# ╔═╡ 505dcf09-20de-403e-a38a-f123a2666f56
md"""
##### Beispiel:
1. ``F(x,y) = ye^{x + y} - 1``. Ist ``F(x,y) = 0`` bei ``(x,y) = (-1,1)`` nach ``y`` auflösbar, das heißt, ``y = T(x)`` existiert? Welchen Wert hat ``T'(x)``? ``\text D_yF = \frac{\partial F}{\partial y} = e^{x + y} + y e^{x + y}``, ``\frac{\partial F}{\partial y} (-1,1) = e^0 + e^0 = 2 \neq 0``. ``\Rightarrow y = T(x)`` existiert.

``\qquad T'(x)\big\vert_{x = -1} = - (\text D_yF)^{-1}\text D_xF \big\vert_{(x,y) = (-1,1)} = - \frac{\frac{\partial F}{\partial x} }{\frac{\partial F}{\partial y} } = - \frac{y \cdot e^{x + y}}{(1 + y) \cdot e^{x + y}} = - \frac{1}{2}``
2. Betrachte ``F: \mathbb R^5 \to \mathbb R^3, u \mapsto v = F(u) = Au`` mit `À \in \mathbb R^{3 \times 5}``.

``\qquad\begin{pmatrix} v_1\\v_2\\v_3 \end{pmatrix} = \begin{pmatrix} \vdots & \vdots & \vdots & \vdots & \vdots \\ a_1 & a_2 & a_3 & a_4 & a_5 \\ \vdots & \vdots & \vdots & \vdots & \vdots \end{pmatrix} \begin{pmatrix} u_1 \\ \vdots \\ u_5 \end{pmatrix} ``

``\qquad`` Unterteile ``u = \begin{pmatrix} x_1\\x_2\\y_1\\y_2\\y_3\end{pmatrix} = \begin{pmatrix} x\\y \end{pmatrix}, x \in \mathbb R^2, y \in \mathbb R^3``. Unter welchen Bedingungen ist ``F(x,y) = A \begin{pmatrix} x\\y \end{pmatrix} = 0`` nach ``y`` auflösbar?

``F(x,y) = \underbrace{\begin{pmatrix} \vdots & \vdots \\ a_1 & a_2 \\ \vdots & \vdots \end{pmatrix}}_{A_1} \begin{pmatrix} x_1 \\x_2 \end{pmatrix} + 	\begin{pmatrix} \vdots & \vdots & \vdots \\ a_3 & a_4 & a_5 \\ \vdots & \vdots & \vdots \end{pmatrix} \begin{pmatrix} y_1 \\y_2 \\y_3 \end{pmatrix} = 0``

``\qquad \Rightarrow A_2y = - A_1x``

``\qquad \Rightarrow\;\;\;\;y = - A_2^{-1}A_1x``

``\qquad`` also ``A_2 = \text D_yF`` invertierbar.
"""

# ╔═╡ 18e157e4-13a3-4af8-9d49-90b265c18ea3
md"""
## 5.4 Höhere Ableitungen
"""

# ╔═╡ a0b01c16-5a8b-4023-a3f5-018f0f110a59
md"""
Wie in 1D werden höhere partielle Ableitungen rekursiv definiert. Für ``f: \mathbb R^n \to \mathbb R^m, x \mapsto f(x)`` heißt ``\frac{\partial}{\partial x_j} \left( \frac{\partial f_k}{\partial x_i}(x) \right) = \frac{\partial^2 f_k}{\partial x_j\partial x_i}`` die zweite partielle Ableitung der Komponente ``f_k`` bzgl ``x_i`` und ``x_j``.
"""

# ╔═╡ 4a665d38-4931-415e-b6e1-2ca130155f58
md"""
##### Beispiel:
``f: \mathbb R^2 \to \mathbb R, \begin{pmatrix} x\\y \end{pmatrix} \mapsto f(x,y) = x \cos(x + y)``.

``\begin{align*} \frac{\partial f}{\partial x} &= \cos(x + y) - x \sin(x + y) \\ \frac{\partial f}{\partial y} &= - x \sin (x + y) \\ \frac{\partial^2 f}{\partial x^2} &= - \sin(x + y) - \sin(x + y) - x \cos ( x + y) \\ \frac{\partial^2 f}{\partial y^2} &= -x \cos(x + y) \\ \frac{\partial^2 f}{\partial x \partial y} &= \frac{\partial}{\partial x} \left( \frac{\partial f}{\partial y} \right) = - \sin(x + y) - x \cos(x + y) \\ \frac{\partial^2 f}{\partial y \partial x} &= \frac{\partial}{\partial y} \left( \frac{\partial f}{\partial x} \right) = - \sin (x + y) - x \cos(x + y) \end{align*}``

Man bemerke, dass die zweiten partiellen Ableitungen _gleich_ sind!
"""

# ╔═╡ 1d7bb1a0-b41d-4e91-93b9-ab801cd05b6e
md"""
##### Satz von Schwarz:
Falls für ``f: \mathbb R^n \to \mathbb R^m`` die zweiten Ableitungen existieren und stetig sind, so gilt für alle Indexpaare ``i,j \in \{1, \dots, n\}``:

``\frac{\partial f_k}{\partial x_i \partial x_j} = \frac{\partial f_k}{\partial x_j \partial x_i}  \qquad k = 1, \dots, m``

Das heißt, die Reihenfolge der Ableitungen spielt keine Rolle.
"""

# ╔═╡ a5817e06-c8d1-4765-8ffd-3ad7b1f31f05
md"""
##### Beispiel:
1. Für ein Vektorfeld ``a: \mathbb R^n \to \mathbb R^n`` (typischerweise ``n=3``) ist die _Divergenz_ definiert durch ``\operatorname{div} a = \sum_{i=1}^n \frac{\partial a_i}{\partial x_i}`` und der _Laplace-Operator_ eines Skalarfeldes ``\phi: \mathbb R^n \to \mathbb R`` definiert durch ``\Delta \phi = \operatorname{div}( \operatorname{grad} \phi ) = \operatorname{div} \left( \frac{\partial \phi}{\partial x_1}, \dots, \frac{\partial \phi}{\partial x_n}  \right) = \sum_{i=1}^n \frac{\partial^2 \phi}{\partial x_i^2}``
2. Speziell für ``n=3`` ist für ``f: \mathbb R^3 \to \mathbb R^3`` die _Rotation_ gegeben durch ``\operatorname{rot} f = \begin{pmatrix} \frac{\partial f_3}{\partial y} - \frac{\partial f_2}{\partial z} \\ \frac{\partial f_1}{\partial z} - \frac{\partial f_3}{\partial x} \\ \frac{\partial f_2}{\partial x} - \frac{\partial f_1}{\partial y} \end{pmatrix}``.

``\qquad`` Es gilt ``\operatorname{div}(\operatorname{rot} f) = 	\frac{\partial }{\partial x} \left( \frac{\partial f_3}{\partial y} \right) - \frac{\partial}{\partial x} \left( \frac{\partial f_2}{\partial z} \right) + \frac{\partial}{\partial y} \left( \frac{\partial f_1}{\partial z} \right) - \frac{\partial}{\partial y} \left( \frac{\partial f_3}{\partial x} \right) + \frac{\partial}{\partial z} \left( \frac{\partial f_2}{\partial x} \right) - \frac{\partial}{\partial z} \left( \frac{\partial f_1}{\partial y} \right) = 0``

``\qquad`` Analog gilt ``\operatorname{grad}(\operatorname{rot} f) = 0``.
"""

# ╔═╡ 51493505-28f5-467f-afa6-813366db705a
md"""
##### Bemerkung:
Im ``\mathbb R^3`` wird oft ``\nabla`` "Nabla" als Vektor geschrieben ``\nabla = \begin{pmatrix} \frac{\partial}{\partial x} \\ \frac{\partial}{\partial y} \\ \frac{\partial}{\partial z} \end{pmatrix}`` (im Sinne eines Operators). Dann gilt

``\begin{align*} \operatorname{div} a &= \nabla \cdot a \\ \operatorname{grad} \phi &= \nabla \phi \\ \operatorname{rot} f &= \nabla \times f \end{align*}``
"""

# ╔═╡ 223b6b78-29c8-4d49-9091-ec24a13e4b2b
md"""
### 5.4.1 Taylor-Entwicklung für ``f: \mathbb R^n \to \mathbb R``
"""

# ╔═╡ 589aa6ed-4169-4096-8b98-65e8fa794f41
md"""
Wir benötigen eine kompakte Schreibweise für z.B. ``\frac{\partial^4 f}{\partial x_1 \partial x_2 \partial x_3^2} \leadsto `` Multiindexnotation. Zunächst: ``D \coloneqq (\partial_1, \partial_2, \dots, \partial_n)``, ``\partial_i \coloneqq \partial_{x_i} \coloneqq \frac{\partial}{\partial x_i}``. Multiindex ``\alpha = (\alpha_1, \alpha_2, \dots, \alpha_n) \in \mathbb N_0^n`` mit ``\lvert \alpha \rvert \coloneqq \sum_{i=1}^n \alpha_i`` und ``\alpha! \coloneqq \prod_{i=1} ^n \alpha_i!``
"""

# ╔═╡ ff9d6027-6343-46f0-991d-ee694a95bd00
md"""
##### Beispiel:
``\begin{align*} n &= 2 \qquad \alpha = (1,2) \quad |\alpha| = 3 \quad \alpha! = 1! \cdot 2! = 2 \\ n &= 3 \qquad \alpha = (2,0,3) \quad |\alpha| = 5 \quad \alpha! = 2! \cdot 3! = 12 \\ \end{align*}``
"""

# ╔═╡ 76f79c6b-4eda-45ef-b69c-3df0d5a31f23
md"""
``x^\alpha \coloneqq \prod_{i=1}^n x_i^{\alpha_i}, \quad x = \begin{pmatrix}x_1\\\vdots\\ x_n \end{pmatrix} \in \mathbb R^n``

``D^\alpha \coloneqq \left( \frac{\partial}{\partial x_1}  \right)^{\alpha_1}  \left( \frac{\partial}{\partial x_2}  \right)^{\alpha_2} \cdots \left( \frac{\partial}{\partial x_n}  \right)^{\alpha_n}  = \partial_1^{\alpha_1}\partial_2^{\alpha_2} \cdots \partial_n^{\alpha_n}``
"""

# ╔═╡ e7fceccf-c1eb-4e68-81e0-f3229abbc533
md"""
##### Satz von Taylor:
Für ``U \subset \mathbb R^n`` sei ``f: U \subset \mathbb R^n \to \mathbb R`` (``m+1``)-mal stetig partiell differenzierbar. Dann gilt für ``x_0 \in U`` die Taylor-Entwicklung

``f(x) = \underbrace{\sum_{\lvert \alpha \rvert \leq m} \frac{1}{\alpha!} D^\alpha f(x_0)(x - x_0)^\alpha}_{\text{Taylor-Polynom vom Grad $m$},\; T_m[f]} + R_m \qquad x \in U``

mit Restglied ``R_m = \sum_{\lvert \alpha \rvert = m + 1} \frac{1}{\alpha!} D^\alpha f(x_0 + \theta(x - x_0))(x - x_0)^\alpha`` mit einem ``\theta \in (0,1)``.
"""

# ╔═╡ e4496ba3-9405-4643-8680-78ec06dfe294
md"""
##### Beispiel:
1. Betrachte ``\varphi: \mathbb R^2 \to \mathbb R, (x,y) \mapsto \varphi(x,y)`` (also ``n=2``). Das Taylor-Polynom vom Grad ``m=3`` um ``(x_0, y_0)``

``\qquad \begin{align*} \lvert \alpha \rvert &= 0 \quad \alpha = (0,0) \quad \alpha! = 1 \\ \lvert \alpha \rvert &= 1 \quad \alpha = (1,0) \quad \alpha! = 1 \qquad \alpha = (0,1) \quad \alpha! = 1\\ \lvert \alpha \rvert &= 2 \quad \alpha = (2,0),(1,1),(0,2) \qquad \alpha! = 2,1,2 \\ \lvert \alpha \rvert &= 3 \quad \alpha = (3,0),(2,1),(1,2),(0,3) \qquad \alpha! = 6,2,2,6 \end{align*}``

``\qquad \begin{align*} T_3[\varphi](x) &= \varphi(x_0, y_0) + \underbrace{(\partial^1_x \partial^2_y \varphi)(x - x_0)^1(y - y_0)^0 + (\partial_x^0 \partial_y^1 \varphi)(x - x_0)^0 (y - y_0)^1}_{\lvert \alpha \rvert = 1} \\ &+ \underbrace{(\partial^2_x\partial^0_y \varphi)(x- x_0)^2(y - y_0)^0 + (\partial^1_x\partial^1_y \varphi)(x - x_0)^1(y - y_0)^1 + (\partial^0_x\partial^2_y \varphi)(x - x_0)^0(y - y_0)^2}_{\lvert \alpha \rvert = 2} \\ &+ \underbrace{(\partial^3_x \partial^0_y \varphi)(x - x_0)^3(y- y_0)^0 + (\partial^2_x \partial^1_y)(x - x_0)^2(y - y_0)^1 + (\partial^1_x\partial^2_y \varphi)(x - x_0)^1(y - y_0)^2 + (\partial^0_x \partial^3_y \varphi)(x - x_0)^0(y - y_0)^3}_{\lvert \alpha \rvert = 3} \\ &= \varphi + \varphi_x(x - x_0) + \varphi_y(y - y_0) + \varphi_{xx} (x - x_0)^2 + \varphi_{xy} (x - x_0)(y - y_0) + \varphi_{yy} ( y - y_0)^2 \\ &+ \varphi_{xxx} (x - x_0)^3 + \varphi_{xxy} (x - x_0)^2(y - y_0) + \varphi_{xyy} (x - x_0)(y - y_0)^2 + \varphi_{yyy} (y - y_0)^3 \end{align*}``
2. Konkret: ``\varphi(x,y,z) = \frac{e^{2x}}{y+2} + (z+1)^2``

``\qquad\begin{align*} T_2[\varphi](0,0,0) =&\; \varphi(0,0,0) + \partial_x \varphi(0,0,0)x + \partial_y \varphi(0,0,0)y + \partial_z \varphi(0)z\\ &\; + \partial_{xx}\varphi(0) \frac12 x^2 + \partial_{xy}\varphi(0)xy + \partial_{xz}\varphi(0)xz\\ &\; + \partial_{yy}\varphi(0) \frac12 y^2 + \partial_{yz}\varphi(0)yz + \partial_{zz}\varphi(0) \frac12 z^2 \end{align*}``

``\qquad \begin{align*} \partial_x \varphi &= \frac{2e^{2x}}{y+2}, &\qquad \partial_y \varphi &= -\frac{e^{2x}}{(y+2)^2}, &\qquad \partial_z \varphi &= 2(z+1), \\[6pt] \partial_{xx}\varphi &= \frac{4e^{2x}}{y+2}, &\qquad \partial_{xy}\varphi &= -\frac{2e^{2x}}{(y+2)^2}, &\qquad \partial_{xz}\varphi &= 0, \\[6pt] \partial_{yy}\varphi &= \frac{2e^{2x}}{(y+2)^3}, &\qquad \partial_{yz}\varphi &= 0, &\qquad \partial_{zz}\varphi &= 2 . \end{align*}``

``\qquad \begin{align*} T_2[\varphi] &= \frac{3}{2} + x + -\frac{1}{4}y + 2z + 2 \frac{1}{2} x^2 + -\frac{1}{2}xy + 0xz + \frac{1}{4} \frac{1}{2}y^2 + 0yz + 2 \cdot \frac12 z^2 \\ &= \frac{3}{2} + \underline b^T \underline x + \frac{1}{2} \underline x^T \underline{\underline{A}}\; \underline x\end{align*}``

``\qquad \underline x = \begin{pmatrix} x\\ y\\ z \end{pmatrix}, \qquad \underline b = \begin{pmatrix} 1\\ -\frac{1}{4}\\ 2 \end{pmatrix}, \qquad A = \begin{pmatrix} 2 & -\frac{1}{2} & 0\\ -\frac{1}{2} & \frac{1}{4} & 0\\ 0 & 0 & 2 \end{pmatrix}``
"""

# ╔═╡ 22653a5a-bfd1-4991-8b6c-d1662c638625
md"""
##### Bemerkung:
1. Statt ``T_m[f](x)=\sum_{|\alpha|\le m}\frac{1}{\alpha!}D^\alpha f(x_0)(x-x_0)^\alpha`` wird oft mit ``x = x_0 + h``, ``h \in \mathbb R^n`` geschrieben und damit ``T_m[f](h)=\sum_{|\alpha|\le m}\frac{1}{\alpha!}D^\alpha f(x_0)h^\alpha``
2. Für ``\varphi : \mathbb{R}^n \to \mathbb{R}`` heißt die Matrix ``H = (a_{ij}) \in \mathbb{R}^{n \times n}`` mit ``a_{ij} = \frac{\partial^2 \varphi}{\partial x_i \partial x_j}`` _Hesse-Matrix_. ``H`` ist symmetrisch (nach Schwarz).
"""

# ╔═╡ 556dab3a-e772-4498-b9e9-a7d7ffa26aa9
md"""
### 5.4.2 Extrema in ``\mathbb R^n``
"""

# ╔═╡ 28e9cd82-80aa-4f46-ae83-34ce65c9eaea
md"""
Für ``\varphi : U \subset \mathbb{R}^n \to \mathbb{R}`` heißt ``x_0 \in U`` _lokales_ Maximum (Minimum), falls in einer Umgebung ``B_r(x_0)`` mit Radius ``r>0`` gilt: `` \varphi(x) \le \varphi(x_0) \quad \forall x \in B_r(x_0) \qquad (\text{bzw. } \varphi(x) \ge \varphi(x_0))``

Das heißt, die Funktion ``g(t) = \varphi(x + tv)`` mit einer Richtung ``v \in \mathbb R^n`` hat bei ``t = 0`` ein Extremum. ``g'(0) = 0 \Rightarrow \langle \operatorname{grad} \varphi, v \rangle = 0``.

Bedingung für Extremum: ``\operatorname{grad} \varphi (x_0) = 0``. Das ist notwendig, aber nicht hinreichend.
"""

# ╔═╡ f8148d33-4bfd-4a9b-a0bf-4382b6ff65ef
md"""
#### Exkurs
"""

# ╔═╡ 3af4708b-42fc-4428-928e-401c4a452aa8
md"""
##### Satz und Definition:
Jede Matrix $A \in \mathbb{R}^{n \times n}$ lässt sich zerlegen in einen symmetrischen Anteil `` A_{\text{sym}}=\frac{1}{2}(A+A^T) `` und einen antisymmetrischen Anteil `` A_{\text{anti}}=\frac{1}{2}(A-A^T) `` so, dass gilt `` A=A_{\text{sym}}+A_{\text{anti}}``, sowie ``A_{\text{sym}}=A_{\text{sym}}^T`` und ``A_{\text{anti}}=-A_{\text{anti}}^T``.
"""

# ╔═╡ 4e113358-5031-4cf0-aabe-a2529b34a3ff
md"""
##### Beispiel:
``A = \begin{pmatrix} 1 & 1 & 1\\ 2 & 2 & 3\\ 1 & 1 & 3 \end{pmatrix}``

``A_{\mathrm{sym}} = \frac{1}{2} \left[\begin{pmatrix} 1 & 1 & 1\\ 2 & 2 & 3\\ 1 & 1 & 3 \end{pmatrix}+\begin{pmatrix} 1 & 2 & 1\\ 1 & 2 & 1\\ 1 & 3 & 3 \end{pmatrix}\right] = \begin{pmatrix} 1 & \frac{3}{2} & 1\\ \frac{3}{2} & 2 & 2\\ 1 & 2 & 3 \end{pmatrix}``

``A_{\mathrm{anti}} =\frac{1}{2}\left[\begin{pmatrix} 1 & 1 & 1\\ 2 & 2 & 3\\ 1 & 1 & 3 \end{pmatrix}-\begin{pmatrix} 1 & 2 & 1\\ 1 & 2 & 1\\ 1 & 3 & 3 \end{pmatrix} \right] = \begin{pmatrix} 0 & -\frac{1}{2} & 0\\ \frac{1}{2} & 0 & 1\\ 0 & -1 & 0 \end{pmatrix}``
"""

# ╔═╡ 5bb4ab2e-50c0-47f6-8598-7d7d7f170c74
md"""
##### Definition:
Eine Matrix $A \in \mathbb{R}^{n\times n}$ heißt _positiv definit_, falls gilt: ``x^T A x = \langle x, Ax \rangle > 0 \quad \forall\, x \in \mathbb{R}^n \setminus \{\underline 0\}``
"""

# ╔═╡ 8e9fe001-91d2-42f1-92c9-1f9c995a2d25
md"""
##### Bemerkung:
1. Analog _negativ definit_, falls ``x^T A x < 0``, und semi-definit falls ``\leq 0`` oder ``\geq 0`` zugelassen ist.
2. Es spielt nur der symmetrische Anteil eine Rolle, denn

``\qquad \begin{align*} x^T A x &= x^T (A_{\text{sym}} + A_{\text{anti}}) x = x^T A_{\text{sym}} x +  x^T \left(\frac{1}{2}(A - A^T) \right) x \\ &= x^T A_{\text{sym}} x + \frac{1}{2} x^T A x - \frac{1}{2} \underbrace{x^T A^T x}_{(Ax)^Tx = x^TAx} \\ &= x^T A_{\text{sym}} x\end{align*}``

``\qquad`` Es genügt also, symmetrische Matrizen zu betrachten.
"""

# ╔═╡ f1710510-16a5-4f6c-b87f-20063f0280c6
md"""
##### Satz:
``A \in \mathbb{R}^{n\times n}`` symmetrisch habe Eigenwerte ``\lambda_i \in \mathbb{R}, (i=1,\dots,n)``. Dann gilt
1. ``A`` pos./neg. definit ``\Leftrightarrow \lambda_i \gtrless 0,\quad \forall i``
2. ``A`` pos./neg. semi-definit ``\Leftrightarrow \lambda_i \gtreqless 0,\quad \forall i``
3. ``A`` indefinit ``\Leftrightarrow \lambda_i > 0,\ \lambda_j < 0`` für ein Paar ``(i,j)``
"""

# ╔═╡ 97f357b0-3658-438e-a1a8-a76f1db881ae
md"""
##### Beweis:
``A`` ist diagonalisierbar mit orthonormalen Eigenvektoren, das heißt, ``D=SAS^T`` mit ``D=\operatorname{diag}(\lambda_1,\dots,\lambda_n)`` ist möglich. Also

``x^T \underbrace{A}_{= S^TDS} x = x^T S^T D S x = (Sx)^T D S x = y^T D y \qquad \text{mit } y=Sx . ``

(``y=0 \Leftrightarrow x=0``, denn ``S`` regulär), das heißt

`` \underbrace{x^T A x > 0}_{x\neq 0} \Leftrightarrow \underbrace{y^T D y > 0}_{y\neq 0} \qquad y^T D y=\sum_{i=1}^{n}\lambda_i \underbrace{y_i^2}_{> 0} \stackrel?>0``

``\Rightarrow \lambda_i > 0`` (``i = 1, \dots, n``)
"""

# ╔═╡ 623af91e-dd92-48c0-906c-7a7381437a93
md"""
#### Zurück zu Extrema
Betrachte die Taylor-Entwicklung von ``\varphi: \mathbb{R}^n \to \mathbb{R}`` um ``x_0`` mit ``x=x_0+h``:

`` T_2[\varphi](h) = \varphi(x_0) + \langle \underbrace{\operatorname{grad}\varphi(x_0)}_{=0}, h\rangle + \frac12 \langle h, H(x_0) h\rangle \qquad \text{mit der Hesse-Matrix $H$}``

``\phantom{T_2[\varphi](h)} = \varphi(x_0) + \frac12 \underbrace{\langle h, H(x_0)h \rangle}_{\gtrless\; 0} \stackrel?\gtrless \varphi(x_0)``
"""

# ╔═╡ f0b99f33-b310-4eeb-91e4-d0e2f1883cf7
md"""
##### Satz:
Sei ``\varphi: U \subset \mathbb{R}^n \to \mathbb{R}`` zweimal stetig differenzierbar und in ``x_0\in U`` gelte ``\operatorname{grad}\varphi(x_0)=0``. Dann hat ``\varphi`` ein Minimum in ``x_0``, falls die Hesse-Matrix `` H=\left.\left(\frac{\partial^2\varphi}{\partial x_i\partial x_j}\right)\right|_{x=x_0} `` positiv definit ist.
"""

# ╔═╡ d8789cac-e7e7-4f06-bd23-ceae2359f87b
md"""
##### Bemerkung:
1. Analog Maximum ``\Leftrightarrow`` negativ definit.
2. Bei semi-definit kann keine Aussage gemacht werden (wie in 1D)
3. indefinit bedeutet Sattelpunkt.
"""

# ╔═╡ 6a896743-df9e-46fa-89ea-5acdafee0618
md"""
##### Beispiel:
``\varphi: \mathbb R^2 \to \mathbb R`` mit ``\varphi(x,y)= 3x^2 + x^3 - 3xy^2 + 2y^2``

``\operatorname{grad}\varphi = ( \partial_x \varphi, \partial_y \varphi) = \left(6x + 3x^2 - 3y^2, -6xy + 4y\right) \stackrel!= 0``

``\begin{align*} 6x + 3x^2 - 3x^2 &= 0 \\ -6xy + 4y &= 0 \Leftrightarrow (4 - 6x)y = 0 \end{align*}``

Dazu eine Fallunterscheidung:
1. ``y = 0 \Rightarrow 6x + 3x^2 = (6 + 3x)x = 0``. Die Lösungen sind ``x=0`` und ``x=-2``.
2. ``x = \frac23 \Rightarrow 6 \cdot \frac23 + 3 \cdot \frac 49 + 3y^2 = \frac{16}3 + 3y^2 = 0``. Die Lösungen sind ``y = \frac43`` und ``y = - \frac43``.

Die Kandidaten sind also ``(0,0), (-2,0), \left( \frac23, \frac43 \right), \left( \frac23, - \frac43 \right)``

Die Hesse-Matrix ist ``H = \left( \frac{\partial^2 \varphi }{\partial x_i \partial x_j} \right) = \begin{pmatrix} \partial_{xx} \varphi & \partial_{xy} \varphi \\ \partial_{xy} \varphi & \partial_{yy} \varphi \end{pmatrix} = \begin{pmatrix} 6 + 6x & - 6y \\ - 6y & -6x + 4 \end{pmatrix} ``

``\begin{align*} H(0,0) &= \begin{pmatrix} 6 & 0 \\ 0 & 4 \end{pmatrix} \quad \text{EW } \lambda_1 = 6, \lambda_2 = 4 \Rightarrow \text{pos. definit: Maximum} \\ H(-2,0) &= \begin{pmatrix} -6 & 0 \\ 0 & 16 \end{pmatrix} \quad \text{EW } \lambda_1 = -6, \lambda_2 = 16 \Rightarrow \text{indefinit: Sattelpunkt} \\ H\left(\frac23, \frac43\right)  &= \begin{pmatrix} 10 & -8 \\ -8 & 0 \end{pmatrix}\end{align*}``

Das hat charakteristisches Polynom ``\det \begin{pmatrix} \lambda - 10 & 8 \\ 8 & \lambda \end{pmatrix} =(\lambda - 10)\lambda - 64 = \lambda^2 - 10 \lambda - 63``. Die Nullstellen sind ``\lambda_{1,2} = 5 \pm \sqrt{25 + 64} =  5 \pm \sqrt{89} \gtrless 0 \Rightarrow`` indefinit: Sattelpunkt.
"""

# ╔═╡ b3361b70-8d87-41b4-a0c1-672ac5395564
md"""
### 5.4.3 Extrema mit Nebenbedingung
"""

# ╔═╡ 2604872f-72c1-469c-874f-5b361c9319eb
md"""
##### Beispiel:
``\varphi:(x,y) = x^2 + y^2`` minimieren unter der Nebenbedingung ``x + 2y \stackrel!= 1`` bzw. ``g(x,y) = x + 2y \overset!= 0``
"""

# ╔═╡ 11a47cc5-a8e3-4fca-aaa3-371838fe7368
RobustLocalResource("https://github.com/hpsc-lab/lecture-notes-math1_dev/raw/1dbdf8076e38678cba0e432bc7a80ecb1496cbbf/notebooks/assets/extrema_mit_nebenbedingungen.svg", "./assets/extrema_mit_nebenbedingungen.svg")

# ╔═╡ 1df2d2f1-a270-46a6-961e-db39122807b6
md"""
Lösung: ``g(x,y) = 0 \Rightarrow y = \frac12 - \frac12 x``

``\varphi(x,y)=\varphi\left(x,\frac12-\frac12 x\right) = x^2+\left(\frac12-\frac12 x\right)^2 = x^2+\frac14 -\frac12 x + \frac14 x^2``

``\frac{\text d}{\text dx}\varphi(x,y) = 2x-\frac12 + \frac12 x = \frac52 x-\frac12 \overset!= 0 \quad\Rightarrow\quad x=\frac15 \quad\text{also}\quad y= \frac{4}{10} = \frac25``
"""

# ╔═╡ 9e76e84c-6eac-46dd-9f14-f56705d02440
md"""
##### Beispiel:
``\varphi(x,y) = 2x + y`` maximieren unter der Nebenbedingung ``x^2 + y^2 = 1`` bzw. ``g(x,y) = x^2 + y^2 - 1 \overset != 0``. ``g`` ist schwierig aufzulösen. ``y = \pm \sqrt{1 - x^2}``, wir wählen den positiven Zweig:

``\varphi(x, y(x)) = 2x + \sqrt{1 - x^2}``
"""

# ╔═╡ f4ba4d5f-aa1a-4b67-a350-60695e536a63
RobustLocalResource("https://github.com/hpsc-lab/lecture-notes-math1_dev/raw/1dbdf8076e38678cba0e432bc7a80ecb1496cbbf/notebooks/assets/extrema_mit_nebenbedingungen2.svg","./assets/extrema_mit_nebenbedingungen2.svg")

# ╔═╡ f104d8a7-b1b2-488b-aac0-dc7a8ab38146
md"""
``\frac{\text d}{\text dx} \varphi(x, y(x)) = 2 - \frac{2x}{2 \sqrt{1 - x^2}} \overset != 0 \Rightarrow 2 \sqrt{1 - x^2} = x``

``4(1 - x^2) = x^2 \Leftrightarrow 4 = 5x^2 \qquad x = \pm \sqrt{\frac45}``

``y = - \sqrt{1 - x^2}`` gibt identisches Resultat. Also vier Kandidaten: ``(x,y) \in \left\{ \left( \sqrt{\frac{4}{5} } , \sqrt{\frac{1}{5} }\right), \left( - \sqrt{\frac{4}{5} } , \sqrt{\frac{1}{5} }\right), \left( \sqrt{\frac{4}{5} } , -\sqrt{\frac{1}{5} }\right), \left( -\sqrt{\frac{4}{5} } , -\sqrt{\frac{1}{5} }\right) \right\}``

Dies sind ein Minimum, ein Maximum und zwei Sattelpunkte.
"""

# ╔═╡ d9c97418-3fc5-4ac9-9550-6cf947cfa500
md"""
##### Allgemein:
``\varphi: U \subset \mathbb R^n \to \mathbb R``. Wann ist ``\varphi`` extremal unter Nebenbedingungen ``g: U \subset \mathbb R^n \to \mathbb R^m`` (``1 \leq m < n``) ``g(x) = 0`` (``m`` Gleichungen)?
"""

# ╔═╡ 6a5e2a8f-8b13-443b-b1cb-8414697eeae0
md"""
##### Bemerkung:
1. Die ``m`` Nebenbedingungen legen im Prinzip ``m`` der ``n`` Variablen in ``x \in \mathbb R^n`` fest. In den übrigen wird maximiert.
2. Bei mehreren Nebenbedingungen kann es sehr schwierig werden, nach bestimmten Variablen aufzulösen.
"""

# ╔═╡ fc7c04d4-5ac6-4ff3-8d60-3cd6e68a69ab
md"""
##### Satz:
Seien ``\varphi`` und ``g`` wie oben gegeben, ``M = \{x \in U \mid g(x) = 0\}`` die Nulsltellenmenge. Die Jacobi-Matrix ``\text Dg \in \mathbb R^{m \times n}`` habe maximalen Rang (``\operatorname{rg}(\text Dg) = m``) für alle ``x \in M``, das heißt, die Nebenbedingungen sind linear unabhängig. Die Extremalstellen von ``\varphi`` in ``M`` sind dann gegeben durch die Extremalstellen der _Lagrange-Funktion_

``\mathcal L: \mathbb R^n \times \mathbb R^m \to \mathbb R, (x, \lambda) \mapsto \mathcal L(x, \lambda) = \varphi(x) + \langle \lambda, g(x) \rangle``

wobei die _Lagrange-Multiplikatoren_ ``\lambda \in \mathbb R^m`` nur Hilfsgrößen sind.
"""

# ╔═╡ ec48d765-9866-477d-937a-b19a02ca61b9
md"""
##### Beispiel:
``\varphi(x,y)=x^2+y^2``, ``g(x,y)=x+2y-1 \overset!= 0``, ``n=2, m=1``.

``\mathcal{L}(x,y,\lambda)=x^2+y^2-\lambda(x+2y-1)`` extremal in  ``(x,y,\lambda)``

``\left.\begin{align*} \frac{\partial \mathcal{L}}{\partial x}=2x-\lambda \overset!= 0 \\ \frac{\partial \mathcal{L}}{\partial y}=2y-2\lambda\overset!= 0 \end{align*}\right\}\quad \left.\begin{matrix} \lambda &= 2x \\ \lambda &= y\end{matrix}\right \} \quad y = 2x``

``\frac{\partial \mathcal{L}}{\partial \lambda} =-(x+2y-1) \overset!= 0. \qquad (\text{NB}) ``

Es gilt dass ``\lambda=y`` und ``y=2x``. Durch Einsetzen dieses in die Nebenbedingung erhält man `` x=\frac15 \quad \text{und} \quad y=\frac25. ``

Also ist ``x + 4x = 1 \qquad x = \frac15, y = \frac25``.
"""

# ╔═╡ 87f3875b-be93-4c4c-90fb-ee633c69bdc5
md"""
##### Beweis:
Für Extrema muss gelten
`` \operatorname{grad}\mathcal{L}(x,\lambda)=0. ``

``\operatorname{grad}\mathcal{L}(x,\lambda) = (\operatorname{grad}_x \mathcal{L}, \operatorname{grad}_\lambda \mathcal{L}) = \left(\operatorname{grad}\varphi-\langle \lambda,\operatorname{grad} g\rangle,\; g(x)\right) \overset != 0``

In Komponenten:
``\frac{\partial \varphi}{\partial x_i} - \sum_{k=1}^m \lambda_k \frac{\partial g_k}{\partial x_i} =0, \qquad i=1,\dots,n \qquad`` (Bed. für ``x``)

``g_j(x)=0, \qquad j=1,\dots,m \qquad`` (NB)
"""

# ╔═╡ 8745d18c-3bb3-4ac7-8182-58dabfa868cf
md"""
##### Anschaulich ``(m=1)``:
`` \operatorname{grad}\varphi=\lambda \operatorname{grad} g, ``
das heißt, beide Gradienten zeigen in die gleiche Richtung.

Sei ``v`` die Richtung der Konturlinie ``g(x)=0`` bei ``x_0``, das heißt, ``g(x_0+t v)=0`` für ``t \in (-\varepsilon,\varepsilon). ``


Durch Ableiten folgt `` \langle \operatorname{grad} g, v\rangle =0. ``

`` \operatorname{grad} g `` steht senkrecht auf der Konturlinie und definiert damit eine "verbotene" Richtung. ``\operatorname{grad}\varphi`` muss nun nicht komplett verschwinden, sondern nur die Projektion auf ``v``, das heißt `` \langle \operatorname{grad}\varphi, v\rangle =0. ``

Änderungen von ``\varphi`` sind also nur in den "verbotenen" Richtungen
(proportional zu ``\operatorname{grad} g``) erlaubt.
"""

# ╔═╡ d696f636-1a71-4fe5-a3ff-8dd7bb93f463
md"""
##### Formal:
Wir unterteilen ``x=\begin{pmatrix}y\\ z\end{pmatrix}\in\mathbb{R}^n`` mit
``z\in\mathbb{R}^m`` und ``y\in\mathbb{R}^{n-m}`` so, dass für ``g(x)=g(y,z)`` die Jacobi-Matrix ``\text D_z g(y,z)`` in einem Punkt ``(y,z)\in M`` invertierbar ist. Mit dem Satz über implizite Funktionen existiert ein ``h:\mathbb{R}^{n-m}\to\mathbb{R}^m, y\mapsto z=h(y)``
mit ``g(y,z)=0``.

Wir maximieren ``\varphi(y,h(y))=: \widetilde{\varphi}(y)``.

``0=\frac{\partial \widetilde{\varphi}}{\partial y_j}=\frac{\partial \varphi}{\partial y_j}+\sum_{i=1}^{m}\frac{\partial \varphi}{\partial z_i}\frac{\partial h_i}{\partial y_j},\qquad j=1,\dots,n-m``

Es gilt
``\frac{\partial h_i}{\partial y_j}=-\sum_{k=1}^{m}(\text D_z g)^{-1}_{ik}\frac{\partial g_k}{\partial y_j}.``

Also ``\text D_y h=-(D_z g)^{-1} \text D_y g.``

``\Rightarrow\frac{\partial \varphi}{\partial y_j}=\sum_{i=1}^m\frac{\partial \varphi}{\partial z_i}\sum_{k=1}^m(\text D_z g)^{-1}_{ik}\frac{\partial g_k}{\partial y_j}=\sum_{k=1}^m\underbrace{\sum_{i=1}^m\frac{\partial \varphi}{\partial z_i}(\text D_z g)^{-1}_{ik}}_{=:\lambda_k}\frac{\partial g_k}{\partial y_j} =\sum_{k=1}^m\lambda_k\frac{\partial g_k}{\partial y_j}``

Für ``\frac{\partial \varphi}{\partial z_j}`` gilt dies trivialerweise:

``
\frac{\partial \varphi}{\partial z_j}
= \sum_{k=1}^m
\lambda_k
\frac{\partial g_k}{\partial z_j}
= \sum_{i=1}^m
\sum_{k=1}^m
\frac{\partial \varphi}{\partial z_i}
\underbrace{(\text D_z g)^{-1}_{ik}
(\text D_z g)_{kj}}_{\delta_{ij}}
= \frac{\partial \varphi}{\partial z_j}.
``

Also existieren ``\lambda_k\in\mathbb{R}`` so, dass
``
\frac{\partial \varphi}{\partial x_i}
= \sum_{k=1}^m
\lambda_k
\frac{\partial g_k}{\partial x_i},
\qquad
i=1,\dots,n.
``
"""

# ╔═╡ 2cf580da-d04a-4af7-baec-36344d3954d2
md"""
##### Beispiel:
``\varphi(x,y,z)=x^2+y^2+z^2, g(x,y,z) = \begin{pmatrix} x+y+z-1\\ 2x-y-2z+1 \end{pmatrix} \overset != \begin{pmatrix}0\\0\end{pmatrix}``

``
\mathcal{L}(x,y,z,\lambda_1,\lambda_2)
=
x^2+y^2+z^2
-\lambda_1(x+y+z-1)
-\lambda_2(2x-y-2z+1).
``

``\begin{align*} \frac{\partial \mathcal{L}}{\partial x} &=2x-\lambda_1-2\lambda_2=0 \\ \frac{\partial \mathcal{L}}{\partial y} &=2y \lambda_1+\lambda_2=0 \\ \frac{\partial \mathcal{L}}{\partial z} &=2z-\lambda_1+2\lambda_2=0 \end{align*}``

Also ``2(x - y) - 3 \lambda_2 = 0`` und ``2(y - z) - \lambda_2 = 0``, es folgt ``2(x-y) - 6(y - z) = 0``

``
\frac{\partial \mathcal{L}}{\partial \lambda_1}=0,
\qquad
\frac{\partial \mathcal{L}}{\partial \lambda_2}=0
\quad\Rightarrow\quad \text{NB}
``

Zum Lösen:

``\begin{align*} x+y+z &= 1 \\ 2x-y-2z & =1 \\  2x-8y+6z &= 0 \end{align*} \quad \begin{pmatrix} x\\ y\\ z \end{pmatrix} = \begin{pmatrix} \frac{9}{13}\\ \frac{3}{13}\\ \frac{1}{13} \end{pmatrix}``
"""

# ╔═╡ 8d25c672-324c-49fd-b347-263aab0f1842
md"""
## 5.5 Mehrfach-Integrale
"""

# ╔═╡ f4b2d2dd-f527-4fc4-a942-65e7d328878f
md"""
Wir schreiben ``f:\mathbb{R}^{m + n}\to\mathbb{R}`` als `` f:\mathbb{R}^m \times \mathbb{R}^n \to \mathbb{R}, (x,y)\mapsto f(x,y)`` und suchen nach einer Formel

`` \int_{\mathbb{R}^m\times\mathbb{R}^n} f(x,y)\; \text d\lambda_{m+n} = \, ?``

``f`` sei Lebesgue-integrierbar in ``\mathbb{R}^{m+n}``
"""

# ╔═╡ c68a13ac-76c8-4787-8e49-0dd04d40ab69
md"""
##### Satz von Fubini:
Sei ``\Omega_1\subset\mathbb{R}^n``, ``\Omega_2\subset\mathbb{R}^m`` und ``\Omega=\Omega_1\times\Omega_2\subset\mathbb{R}^{n+m}`` jeweils messbar und `` f:\Omega_1\times\Omega_2\to\mathbb{R}, (x,y)\mapsto f(x,y) `` ebenfalls messbar.

Falls ``f`` Lebesgue-integrierbar in ``\Omega`` ist, dann ist die Funktion ``f(x,\cdot)`` Lebesgue-integrierbar in ``\Omega_2`` (für fast alle ``x\in\Omega_1``) und ``f(\cdot,y)`` Lebesgue-integrierbar in ``\Omega_1`` (für fast alle ``y\in\Omega_2``), und es gilt

`` \begin{align*} \int_{\Omega_1\times\Omega_2} f(x,y)\; \text d\lambda_{n+m} &= \int_{\Omega_1} \underbrace{\left( \int_{\Omega_2} f(x,y)\; \text d\lambda_m(y) \right)}_{= F(x)}\; \text d\lambda_n(x)\\ &= \int_{\Omega_2} \underbrace{\left( \int_{\Omega_1} f(x,y)\; \text d\lambda_n(x) \right)}_{=G(y)}\; \text d\lambda_m(y). \end{align*} ``
"""

# ╔═╡ 4ec262fc-00c5-470b-b7a3-f9f0e3231d4e
md"""
##### Bemerkung:
1. Im wesentlichen folgt diese Aussage aus der Eigenschaft von Quadern ``Q_1\subset\mathbb{R}^n``, ``Q_2\subset\mathbb{R}^m``: `` \lambda_{n+m}(\underbrace{Q_1\times Q_2}_{\text{Quader im } \mathbb R^{m + n}})=\lambda_n(Q_1)\lambda_m(Q_2). ``

2. Wir schreiben ``\text d\lambda_{n+m}`` auch als ``\text d(x,y) = \text dx\text dy`` sowie ``\text d \lambda_n(x)`` als ``\text dx`` und ``\text d\lambda_m(y)`` als ``\text dy``.
"""

# ╔═╡ ca2f00e8-be6f-4366-996f-3575e41820b0
md"""
##### Bemerkung:
Falls ``A\subset\mathbb{R}^{n+m}`` kein kartesisches Produkt ist, betrachten wir die sogenannten _Schnitte_

``\begin{align*} A_x &\coloneqq \{y\in\mathbb{R}^m\mid (x,y)\in A\}\subset\mathbb{R}^m \\ A_y &\coloneqq \{x\in\mathbb{R}^n\mid (x,y)\in A\}\subset\mathbb{R}^n \end{align*}``

Diese sind messbar und es gilt für ``f:A\to\mathbb{R}`` (messbar)

``\begin{align*} \int_A f(x,y)\; \text d\lambda_{n+m} &= \int_{\mathbb{R}^{n+m}} f(x,y)\,\chi_A(x,y)\; \text d\lambda_{n+m} \\ &= \int_{\mathbb{R}^n}\left(\int_{A_x} f(x,y)\; \text dy\right)\; \text dx \\ &= \int_{\mathbb{R}^m}\left(\int_{A_y} f(x,y)\; \text dx\right)\; \text dy\end{align*}``
"""

# ╔═╡ beb10bd2-c344-4401-b27d-8df5cb4560db
md"""
##### Beispiel:
`` \Omega=[0,1]\times[2,3]\subset\mathbb{R}^2, f:\mathbb{R}^2\to\mathbb{R},(x,y)\mapsto x+x^2y^2 ``

``\begin{align*} \int_{\Omega} f(x,y)\; \text d(x,y) &= \int_0^1\left(\int_2^3 (x+x^2y^2)\; \text dy\right)\; \text dx \\ \text{(Integral bzgl.} y) \quad  &=\int_0^1\left(xy+\frac13 x^2 y^3\right)\Big|_{y=2}^{y=3}\; \text dx \\ &= \int_0^1\left(3x+9x^2-2x-\frac83 x^2\right)\; \text dx\\ &=\int_0^1\left(x+\frac{19}{3}x^2\right)\; \text dx \\ &= \left(\frac12 x^2+\frac{19}{9}x^3\right)\Big|_{x=0}^{x=1} \\ &= \frac12+\frac{19}{9} = \frac{47}{18} \end{align*}``
"""

# ╔═╡ 00000000-0000-0000-0000-000000000001
PLUTO_PROJECT_TOML_CONTENTS = """
[deps]
CairoMakie = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0"
PlutoTeachingTools = "661c6b06-c737-4d37-b85c-46df65de6f69"
PlutoUI = "7f904dfe-b85e-4ff6-b463-dae2292396a8"

[compat]
CairoMakie = "~0.15.6"
PlutoTeachingTools = "~0.4.6"
PlutoUI = "~0.7.71"
"""

# ╔═╡ 00000000-0000-0000-0000-000000000002
PLUTO_MANIFEST_TOML_CONTENTS = """
# This file is machine-generated - editing it directly is not advised

julia_version = "1.12.4"
manifest_format = "2.0"
project_hash = "09215837b02035d3afebf220fe5ca5174b3dec4d"

[[deps.AbstractFFTs]]
deps = ["LinearAlgebra"]
git-tree-sha1 = "d92ad398961a3ed262d8bf04a1a2b8340f915fef"
uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c"
version = "1.5.0"
weakdeps = ["ChainRulesCore", "Test"]

    [deps.AbstractFFTs.extensions]
    AbstractFFTsChainRulesCoreExt = "ChainRulesCore"
    AbstractFFTsTestExt = "Test"

[[deps.AbstractPlutoDingetjes]]
deps = ["Pkg"]
git-tree-sha1 = "6e1d2a35f2f90a4bc7c2ed98079b2ba09c35b83a"
uuid = "6e696c72-6542-2067-7265-42206c756150"
version = "1.3.2"

[[deps.AbstractTrees]]
git-tree-sha1 = "2d9c9a55f9c93e8887ad391fbae72f8ef55e1177"
uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c"
version = "0.4.5"

[[deps.Adapt]]
deps = ["LinearAlgebra", "Requires"]
git-tree-sha1 = "7e35fca2bdfba44d797c53dfe63a51fabf39bfc0"
uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e"
version = "4.4.0"
weakdeps = ["SparseArrays", "StaticArrays"]

    [deps.Adapt.extensions]
    AdaptSparseArraysExt = "SparseArrays"
    AdaptStaticArraysExt = "StaticArrays"

[[deps.AdaptivePredicates]]
git-tree-sha1 = "7e651ea8d262d2d74ce75fdf47c4d63c07dba7a6"
uuid = "35492f91-a3bd-45ad-95db-fcad7dcfedb7"
version = "1.2.0"

[[deps.AliasTables]]
deps = ["PtrArrays", "Random"]
git-tree-sha1 = "9876e1e164b144ca45e9e3198d0b689cadfed9ff"
uuid = "66dad0bd-aa9a-41b7-9441-69ab47430ed8"
version = "1.1.3"

[[deps.Animations]]
deps = ["Colors"]
git-tree-sha1 = "e092fa223bf66a3c41f9c022bd074d916dc303e7"
uuid = "27a7e980-b3e6-11e9-2bcd-0b925532e340"
version = "0.4.2"

[[deps.ArgTools]]
uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f"
version = "1.1.2"

[[deps.Artifacts]]
uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33"
version = "1.11.0"

[[deps.Automa]]
deps = ["PrecompileTools", "SIMD", "TranscodingStreams"]
git-tree-sha1 = "a8f503e8e1a5f583fbef15a8440c8c7e32185df2"
uuid = "67c07d97-cdcb-5c2c-af73-a7f9c32a568b"
version = "1.1.0"

[[deps.AxisAlgorithms]]
deps = ["LinearAlgebra", "Random", "SparseArrays", "WoodburyMatrices"]
git-tree-sha1 = "01b8ccb13d68535d73d2b0c23e39bd23155fb712"
uuid = "13072b0f-2c55-5437-9ae7-d433b7a33950"
version = "1.1.0"

[[deps.AxisArrays]]
deps = ["Dates", "IntervalSets", "IterTools", "RangeArrays"]
git-tree-sha1 = "4126b08903b777c88edf1754288144a0492c05ad"
uuid = "39de3d68-74b9-583c-8d2d-e117c070f3a9"
version = "0.4.8"

[[deps.Base64]]
uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f"
version = "1.11.0"

[[deps.BaseDirs]]
git-tree-sha1 = "bca794632b8a9bbe159d56bf9e31c422671b35e0"
uuid = "18cc8868-cbac-4acf-b575-c8ff214dc66f"
version = "1.3.2"

[[deps.Bzip2_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl"]
git-tree-sha1 = "1b96ea4a01afe0ea4090c5c8039690672dd13f2e"
uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0"
version = "1.0.9+0"

[[deps.CEnum]]
git-tree-sha1 = "389ad5c84de1ae7cf0e28e381131c98ea87d54fc"
uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82"
version = "0.5.0"

[[deps.CRC32c]]
uuid = "8bf52ea8-c179-5cab-976a-9e18b702a9bc"
version = "1.11.0"

[[deps.CRlibm]]
deps = ["CRlibm_jll"]
git-tree-sha1 = "66188d9d103b92b6cd705214242e27f5737a1e5e"
uuid = "96374032-68de-5a5b-8d9e-752f78720389"
version = "1.0.2"

[[deps.CRlibm_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "e329286945d0cfc04456972ea732551869af1cfc"
uuid = "4e9b3aee-d8a1-5a3d-ad8b-7d824db253f0"
version = "1.0.1+0"

[[deps.Cairo]]
deps = ["Cairo_jll", "Colors", "Glib_jll", "Graphics", "Libdl", "Pango_jll"]
git-tree-sha1 = "71aa551c5c33f1a4415867fe06b7844faadb0ae9"
uuid = "159f3aea-2a34-519c-b102-8c37f9878175"
version = "1.1.1"

[[deps.CairoMakie]]
deps = ["CRC32c", "Cairo", "Cairo_jll", "Colors", "FileIO", "FreeType", "GeometryBasics", "LinearAlgebra", "Makie", "PrecompileTools"]
git-tree-sha1 = "f8caabc5a1c1fb88bcbf9bc4078e5656a477afd0"
uuid = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0"
version = "0.15.6"

[[deps.Cairo_jll]]
deps = ["Artifacts", "Bzip2_jll", "CompilerSupportLibraries_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"]
git-tree-sha1 = "fde3bf89aead2e723284a8ff9cdf5b551ed700e8"
uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a"
version = "1.18.5+0"

[[deps.ChainRulesCore]]
deps = ["Compat", "LinearAlgebra"]
git-tree-sha1 = "e4c6a16e77171a5f5e25e9646617ab1c276c5607"
uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
version = "1.26.0"
weakdeps = ["SparseArrays"]

    [deps.ChainRulesCore.extensions]
    ChainRulesCoreSparseArraysExt = "SparseArrays"

[[deps.ColorBrewer]]
deps = ["Colors", "JSON"]
git-tree-sha1 = "e771a63cc8b539eca78c85b0cabd9233d6c8f06f"
uuid = "a2cac450-b92f-5266-8821-25eda20663c8"
version = "0.4.1"

[[deps.ColorSchemes]]
deps = ["ColorTypes", "ColorVectorSpace", "Colors", "FixedPointNumbers", "PrecompileTools", "Random"]
git-tree-sha1 = "b0fd3f56fa442f81e0a47815c92245acfaaa4e34"
uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4"
version = "3.31.0"

[[deps.ColorTypes]]
deps = ["FixedPointNumbers", "Random"]
git-tree-sha1 = "67e11ee83a43eb71ddc950302c53bf33f0690dfe"
uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f"
version = "0.12.1"
weakdeps = ["StyledStrings"]

    [deps.ColorTypes.extensions]
    StyledStringsExt = "StyledStrings"

[[deps.ColorVectorSpace]]
deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "Requires", "Statistics", "TensorCore"]
git-tree-sha1 = "8b3b6f87ce8f65a2b4f857528fd8d70086cd72b1"
uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4"
version = "0.11.0"
weakdeps = ["SpecialFunctions"]

    [deps.ColorVectorSpace.extensions]
    SpecialFunctionsExt = "SpecialFunctions"

[[deps.Colors]]
deps = ["ColorTypes", "FixedPointNumbers", "Reexport"]
git-tree-sha1 = "37ea44092930b1811e666c3bc38065d7d87fcc74"
uuid = "5ae59095-9a9b-59fe-a467-6f913c188581"
version = "0.13.1"

[[deps.Compat]]
deps = ["TOML", "UUIDs"]
git-tree-sha1 = "9d8a54ce4b17aa5bdce0ea5c34bc5e7c340d16ad"
uuid = "34da2185-b29b-5c13-b0c7-acf172513d20"
version = "4.18.1"
weakdeps = ["Dates", "LinearAlgebra"]

    [deps.Compat.extensions]
    CompatLinearAlgebraExt = "LinearAlgebra"

[[deps.CompilerSupportLibraries_jll]]
deps = ["Artifacts", "Libdl"]
uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae"
version = "1.3.0+1"

[[deps.ComputePipeline]]
deps = ["Observables", "Preferences"]
git-tree-sha1 = "cb1299fee09da21e65ec88c1ff3a259f8d0b5802"
uuid = "95dc2771-c249-4cd0-9c9f-1f3b4330693c"
version = "0.1.4"

[[deps.ConstructionBase]]
git-tree-sha1 = "b4b092499347b18a015186eae3042f72267106cb"
uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9"
version = "1.6.0"
weakdeps = ["IntervalSets", "LinearAlgebra", "StaticArrays"]

    [deps.ConstructionBase.extensions]
    ConstructionBaseIntervalSetsExt = "IntervalSets"
    ConstructionBaseLinearAlgebraExt = "LinearAlgebra"
    ConstructionBaseStaticArraysExt = "StaticArrays"

[[deps.Contour]]
git-tree-sha1 = "439e35b0b36e2e5881738abc8857bd92ad6ff9a8"
uuid = "d38c429a-6771-53c6-b99e-75d170b6e991"
version = "0.6.3"

[[deps.DataAPI]]
git-tree-sha1 = "abe83f3a2f1b857aac70ef8b269080af17764bbe"
uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a"
version = "1.16.0"

[[deps.DataStructures]]
deps = ["OrderedCollections"]
git-tree-sha1 = "6c72198e6a101cccdd4c9731d3985e904ba26037"
uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8"
version = "0.19.1"

[[deps.DataValueInterfaces]]
git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6"
uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464"
version = "1.0.0"

[[deps.Dates]]
deps = ["Printf"]
uuid = "ade2ca70-3891-5945-98fb-dc099432e06a"
version = "1.11.0"

[[deps.DelaunayTriangulation]]
deps = ["AdaptivePredicates", "EnumX", "ExactPredicates", "Random"]
git-tree-sha1 = "5620ff4ee0084a6ab7097a27ba0c19290200b037"
uuid = "927a84f5-c5f4-47a5-9785-b46e178433df"
version = "1.6.4"

[[deps.Distributed]]
deps = ["Random", "Serialization", "Sockets"]
uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b"
version = "1.11.0"

[[deps.Distributions]]
deps = ["AliasTables", "FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns"]
git-tree-sha1 = "3bc002af51045ca3b47d2e1787d6ce02e68b943a"
uuid = "31c24e10-a181-5473-b8eb-7969acd0382f"
version = "0.25.122"

    [deps.Distributions.extensions]
    DistributionsChainRulesCoreExt = "ChainRulesCore"
    DistributionsDensityInterfaceExt = "DensityInterface"
    DistributionsTestExt = "Test"

    [deps.Distributions.weakdeps]
    ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
    DensityInterface = "b429d917-457f-4dbc-8f4c-0cc954292b1d"
    Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"

[[deps.DocStringExtensions]]
git-tree-sha1 = "7442a5dfe1ebb773c29cc2962a8980f47221d76c"
uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae"
version = "0.9.5"

[[deps.Downloads]]
deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"]
uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6"
version = "1.7.0"

[[deps.EarCut_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "e3290f2d49e661fbd94046d7e3726ffcb2d41053"
uuid = "5ae413db-bbd1-5e63-b57d-d24a61df00f5"
version = "2.2.4+0"

[[deps.EnumX]]
git-tree-sha1 = "bddad79635af6aec424f53ed8aad5d7555dc6f00"
uuid = "4e289a0a-7415-4d19-859d-a7e5c4648b56"
version = "1.0.5"

[[deps.ExactPredicates]]
deps = ["IntervalArithmetic", "Random", "StaticArrays"]
git-tree-sha1 = "83231673ea4d3d6008ac74dc5079e77ab2209d8f"
uuid = "429591f6-91af-11e9-00e2-59fbe8cec110"
version = "2.2.9"

[[deps.Expat_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl"]
git-tree-sha1 = "7bb1361afdb33c7f2b085aa49ea8fe1b0fb14e58"
uuid = "2e619515-83b5-522b-bb60-26c02a35a201"
version = "2.7.1+0"

[[deps.Extents]]
git-tree-sha1 = "b309b36a9e02fe7be71270dd8c0fd873625332b4"
uuid = "411431e0-e8b7-467b-b5e0-f676ba4f2910"
version = "0.1.6"

[[deps.FFMPEG_jll]]
deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "PCRE2_jll", "Zlib_jll", "libaom_jll", "libass_jll", "libfdk_aac_jll", "libvorbis_jll", "x264_jll", "x265_jll"]
git-tree-sha1 = "eaa040768ea663ca695d442be1bc97edfe6824f2"
uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5"
version = "6.1.3+0"

[[deps.FFTW]]
deps = ["AbstractFFTs", "FFTW_jll", "Libdl", "LinearAlgebra", "MKL_jll", "Preferences", "Reexport"]
git-tree-sha1 = "97f08406df914023af55ade2f843c39e99c5d969"
uuid = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341"
version = "1.10.0"

[[deps.FFTW_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl"]
git-tree-sha1 = "6d6219a004b8cf1e0b4dbe27a2860b8e04eba0be"
uuid = "f5851436-0d7a-5f13-b9de-f02708fd171a"
version = "3.3.11+0"

[[deps.FileIO]]
deps = ["Pkg", "Requires", "UUIDs"]
git-tree-sha1 = "d60eb76f37d7e5a40cc2e7c36974d864b82dc802"
uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549"
version = "1.17.1"

    [deps.FileIO.extensions]
    HTTPExt = "HTTP"

    [deps.FileIO.weakdeps]
    HTTP = "cd3eb016-35fb-5094-929b-558a96fad6f3"

[[deps.FilePaths]]
deps = ["FilePathsBase", "MacroTools", "Reexport", "Requires"]
git-tree-sha1 = "919d9412dbf53a2e6fe74af62a73ceed0bce0629"
uuid = "8fc22ac5-c921-52a6-82fd-178b2807b824"
version = "0.8.3"

[[deps.FilePathsBase]]
deps = ["Compat", "Dates"]
git-tree-sha1 = "3bab2c5aa25e7840a4b065805c0cdfc01f3068d2"
uuid = "48062228-2e41-5def-b9a4-89aafe57970f"
version = "0.9.24"
weakdeps = ["Mmap", "Test"]

    [deps.FilePathsBase.extensions]
    FilePathsBaseMmapExt = "Mmap"
    FilePathsBaseTestExt = "Test"

[[deps.FileWatching]]
uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee"
version = "1.11.0"

[[deps.FillArrays]]
deps = ["LinearAlgebra"]
git-tree-sha1 = "173e4d8f14230a7523ae11b9a3fa9edb3e0efd78"
uuid = "1a297f60-69ca-5386-bcde-b61e274b549b"
version = "1.14.0"
weakdeps = ["PDMats", "SparseArrays", "Statistics"]

    [deps.FillArrays.extensions]
    FillArraysPDMatsExt = "PDMats"
    FillArraysSparseArraysExt = "SparseArrays"
    FillArraysStatisticsExt = "Statistics"

[[deps.FixedPointNumbers]]
deps = ["Statistics"]
git-tree-sha1 = "05882d6995ae5c12bb5f36dd2ed3f61c98cbb172"
uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93"
version = "0.8.5"

[[deps.Fontconfig_jll]]
deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Zlib_jll"]
git-tree-sha1 = "f85dac9a96a01087df6e3a749840015a0ca3817d"
uuid = "a3f928ae-7b40-5064-980b-68af3947d34b"
version = "2.17.1+0"

[[deps.Format]]
git-tree-sha1 = "9c68794ef81b08086aeb32eeaf33531668d5f5fc"
uuid = "1fa38f19-a742-5d3f-a2b9-30dd87b9d5f8"
version = "1.3.7"

[[deps.FreeType]]
deps = ["CEnum", "FreeType2_jll"]
git-tree-sha1 = "907369da0f8e80728ab49c1c7e09327bf0d6d999"
uuid = "b38be410-82b0-50bf-ab77-7b57e271db43"
version = "4.1.1"

[[deps.FreeType2_jll]]
deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Zlib_jll"]
git-tree-sha1 = "2c5512e11c791d1baed2049c5652441b28fc6a31"
uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7"
version = "2.13.4+0"

[[deps.FreeTypeAbstraction]]
deps = ["BaseDirs", "ColorVectorSpace", "Colors", "FreeType", "GeometryBasics", "Mmap"]
git-tree-sha1 = "4ebb930ef4a43817991ba35db6317a05e59abd11"
uuid = "663a7486-cb36-511b-a19d-713bb74d65c9"
version = "0.10.8"

[[deps.FriBidi_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl"]
git-tree-sha1 = "7a214fdac5ed5f59a22c2d9a885a16da1c74bbc7"
uuid = "559328eb-81f9-559d-9380-de523a88c83c"
version = "1.0.17+0"

[[deps.GeometryBasics]]
deps = ["EarCut_jll", "Extents", "IterTools", "LinearAlgebra", "PrecompileTools", "Random", "StaticArrays"]
git-tree-sha1 = "1f5a80f4ed9f5a4aada88fc2db456e637676414b"
uuid = "5c1252a2-5f33-56bf-86c9-59e7332b4326"
version = "0.5.10"

    [deps.GeometryBasics.extensions]
    GeometryBasicsGeoInterfaceExt = "GeoInterface"

    [deps.GeometryBasics.weakdeps]
    GeoInterface = "cf35fbd7-0cd7-5166-be24-54bfbe79505f"

[[deps.GettextRuntime_jll]]
deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll"]
git-tree-sha1 = "45288942190db7c5f760f59c04495064eedf9340"
uuid = "b0724c58-0f36-5564-988d-3bb0596ebc4a"
version = "0.22.4+0"

[[deps.Ghostscript_jll]]
deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Zlib_jll"]
git-tree-sha1 = "38044a04637976140074d0b0621c1edf0eb531fd"
uuid = "61579ee1-b43e-5ca0-a5da-69d92c66a64b"
version = "9.55.1+0"

[[deps.Giflib_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl"]
git-tree-sha1 = "6570366d757b50fabae9f4315ad74d2e40c0560a"
uuid = "59f7168a-df46-5410-90c8-f2779963d0ec"
version = "5.2.3+0"

[[deps.Glib_jll]]
deps = ["Artifacts", "GettextRuntime_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Zlib_jll"]
git-tree-sha1 = "50c11ffab2a3d50192a228c313f05b5b5dc5acb2"
uuid = "7746bdde-850d-59dc-9ae8-88ece973131d"
version = "2.86.0+0"

[[deps.Graphics]]
deps = ["Colors", "LinearAlgebra", "NaNMath"]
git-tree-sha1 = "a641238db938fff9b2f60d08ed9030387daf428c"
uuid = "a2bd30eb-e257-5431-a919-1863eab51364"
version = "1.1.3"

[[deps.Graphite2_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl"]
git-tree-sha1 = "8a6dbda1fd736d60cc477d99f2e7a042acfa46e8"
uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472"
version = "1.3.15+0"

[[deps.GridLayoutBase]]
deps = ["GeometryBasics", "InteractiveUtils", "Observables"]
git-tree-sha1 = "93d5c27c8de51687a2c70ec0716e6e76f298416f"
uuid = "3955a311-db13-416c-9275-1d80ed98e5e9"
version = "0.11.2"

[[deps.Grisu]]
git-tree-sha1 = "53bb909d1151e57e2484c3d1b53e19552b887fb2"
uuid = "42e2da0e-8278-4e71-bc24-59509adca0fe"
version = "1.0.2"

[[deps.HarfBuzz_jll]]
deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll"]
git-tree-sha1 = "f923f9a774fcf3f5cb761bfa43aeadd689714813"
uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566"
version = "8.5.1+0"

[[deps.HypergeometricFunctions]]
deps = ["LinearAlgebra", "OpenLibm_jll", "SpecialFunctions"]
git-tree-sha1 = "68c173f4f449de5b438ee67ed0c9c748dc31a2ec"
uuid = "34004b35-14d8-5ef3-9330-4cdb6864b03a"
version = "0.3.28"

[[deps.Hyperscript]]
deps = ["Test"]
git-tree-sha1 = "179267cfa5e712760cd43dcae385d7ea90cc25a4"
uuid = "47d2ed2b-36de-50cf-bf87-49c2cf4b8b91"
version = "0.0.5"

[[deps.HypertextLiteral]]
deps = ["Tricks"]
git-tree-sha1 = "7134810b1afce04bbc1045ca1985fbe81ce17653"
uuid = "ac1192a8-f4b3-4bfe-ba22-af5b92cd3ab2"
version = "0.9.5"

[[deps.IOCapture]]
deps = ["Logging", "Random"]
git-tree-sha1 = "b6d6bfdd7ce25b0f9b2f6b3dd56b2673a66c8770"
uuid = "b5f81e59-6552-4d32-b1f0-c071b021bf89"
version = "0.2.5"

[[deps.ImageAxes]]
deps = ["AxisArrays", "ImageBase", "ImageCore", "Reexport", "SimpleTraits"]
git-tree-sha1 = "e12629406c6c4442539436581041d372d69c55ba"
uuid = "2803e5a7-5153-5ecf-9a86-9b4c37f5f5ac"
version = "0.6.12"

[[deps.ImageBase]]
deps = ["ImageCore", "Reexport"]
git-tree-sha1 = "eb49b82c172811fd2c86759fa0553a2221feb909"
uuid = "c817782e-172a-44cc-b673-b171935fbb9e"
version = "0.1.7"

[[deps.ImageCore]]
deps = ["ColorVectorSpace", "Colors", "FixedPointNumbers", "MappedArrays", "MosaicViews", "OffsetArrays", "PaddedViews", "PrecompileTools", "Reexport"]
git-tree-sha1 = "8c193230235bbcee22c8066b0374f63b5683c2d3"
uuid = "a09fc81d-aa75-5fe9-8630-4744c3626534"
version = "0.10.5"

[[deps.ImageIO]]
deps = ["FileIO", "IndirectArrays", "JpegTurbo", "LazyModules", "Netpbm", "OpenEXR", "PNGFiles", "QOI", "Sixel", "TiffImages", "UUIDs", "WebP"]
git-tree-sha1 = "696144904b76e1ca433b886b4e7edd067d76cbf7"
uuid = "82e4d734-157c-48bb-816b-45c225c6df19"
version = "0.6.9"

[[deps.ImageMetadata]]
deps = ["AxisArrays", "ImageAxes", "ImageBase", "ImageCore"]
git-tree-sha1 = "2a81c3897be6fbcde0802a0ebe6796d0562f63ec"
uuid = "bc367c6b-8a6b-528e-b4bd-a4b897500b49"
version = "0.9.10"

[[deps.Imath_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl"]
git-tree-sha1 = "0936ba688c6d201805a83da835b55c61a180db52"
uuid = "905a6f67-0a94-5f89-b386-d35d92009cd1"
version = "3.1.11+0"

[[deps.IndirectArrays]]
git-tree-sha1 = "012e604e1c7458645cb8b436f8fba789a51b257f"
uuid = "9b13fd28-a010-5f03-acff-a1bbcff69959"
version = "1.0.0"

[[deps.Inflate]]
git-tree-sha1 = "d1b1b796e47d94588b3757fe84fbf65a5ec4a80d"
uuid = "d25df0c9-e2be-5dd7-82c8-3ad0b3e990b9"
version = "0.1.5"

[[deps.IntelOpenMP_jll]]
deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl"]
git-tree-sha1 = "ec1debd61c300961f98064cfb21287613ad7f303"
uuid = "1d5cc7b8-4909-519e-a0f8-d0f5ad9712d0"
version = "2025.2.0+0"

[[deps.InteractiveUtils]]
deps = ["Markdown"]
uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240"
version = "1.11.0"

[[deps.Interpolations]]
deps = ["Adapt", "AxisAlgorithms", "ChainRulesCore", "LinearAlgebra", "OffsetArrays", "Random", "Ratios", "SharedArrays", "SparseArrays", "StaticArrays", "WoodburyMatrices"]
git-tree-sha1 = "65d505fa4c0d7072990d659ef3fc086eb6da8208"
uuid = "a98d9a8b-a2ab-59e6-89dd-64a1c18fca59"
version = "0.16.2"

    [deps.Interpolations.extensions]
    InterpolationsForwardDiffExt = "ForwardDiff"
    InterpolationsUnitfulExt = "Unitful"

    [deps.Interpolations.weakdeps]
    ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210"
    Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d"

[[deps.IntervalArithmetic]]
deps = ["CRlibm", "MacroTools", "OpenBLASConsistentFPCSR_jll", "Printf", "Random", "RoundingEmulator"]
git-tree-sha1 = "815e74f416953c348c9da1d1bc977bbc97c84e18"
uuid = "d1acc4aa-44c8-5952-acd4-ba5d80a2a253"
version = "1.0.0"

    [deps.IntervalArithmetic.extensions]
    IntervalArithmeticArblibExt = "Arblib"
    IntervalArithmeticDiffRulesExt = "DiffRules"
    IntervalArithmeticForwardDiffExt = "ForwardDiff"
    IntervalArithmeticIntervalSetsExt = "IntervalSets"
    IntervalArithmeticLinearAlgebraExt = "LinearAlgebra"
    IntervalArithmeticRecipesBaseExt = "RecipesBase"
    IntervalArithmeticSparseArraysExt = "SparseArrays"

    [deps.IntervalArithmetic.weakdeps]
    Arblib = "fb37089c-8514-4489-9461-98f9c8763369"
    DiffRules = "b552c78f-8df3-52c6-915a-8e097449b14b"
    ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210"
    IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953"
    LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
    RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01"
    SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"

[[deps.IntervalSets]]
git-tree-sha1 = "5fbb102dcb8b1a858111ae81d56682376130517d"
uuid = "8197267c-284f-5f27-9208-e0e47529a953"
version = "0.7.11"

    [deps.IntervalSets.extensions]
    IntervalSetsRandomExt = "Random"
    IntervalSetsRecipesBaseExt = "RecipesBase"
    IntervalSetsStatisticsExt = "Statistics"

    [deps.IntervalSets.weakdeps]
    Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
    RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01"
    Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"

[[deps.InverseFunctions]]
git-tree-sha1 = "a779299d77cd080bf77b97535acecd73e1c5e5cb"
uuid = "3587e190-3f89-42d0-90ee-14403ec27112"
version = "0.1.17"
weakdeps = ["Dates", "Test"]

    [deps.InverseFunctions.extensions]
    InverseFunctionsDatesExt = "Dates"
    InverseFunctionsTestExt = "Test"

[[deps.IrrationalConstants]]
git-tree-sha1 = "e2222959fbc6c19554dc15174c81bf7bf3aa691c"
uuid = "92d709cd-6900-40b7-9082-c6be49f344b6"
version = "0.2.4"

[[deps.Isoband]]
deps = ["isoband_jll"]
git-tree-sha1 = "f9b6d97355599074dc867318950adaa6f9946137"
uuid = "f1662d9f-8043-43de-a69a-05efc1cc6ff4"
version = "0.1.1"

[[deps.IterTools]]
git-tree-sha1 = "42d5f897009e7ff2cf88db414a389e5ed1bdd023"
uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e"
version = "1.10.0"

[[deps.IteratorInterfaceExtensions]]
git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856"
uuid = "82899510-4779-5014-852e-03e436cf321d"
version = "1.0.0"

[[deps.JLLWrappers]]
deps = ["Artifacts", "Preferences"]
git-tree-sha1 = "0533e564aae234aff59ab625543145446d8b6ec2"
uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210"
version = "1.7.1"

[[deps.JSON]]
deps = ["Dates", "Mmap", "Parsers", "Unicode"]
git-tree-sha1 = "31e996f0a15c7b280ba9f76636b3ff9e2ae58c9a"
uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6"
version = "0.21.4"

[[deps.JpegTurbo]]
deps = ["CEnum", "FileIO", "ImageCore", "JpegTurbo_jll", "TOML"]
git-tree-sha1 = "9496de8fb52c224a2e3f9ff403947674517317d9"
uuid = "b835a17e-a41a-41e7-81f0-2f016b05efe0"
version = "0.1.6"

[[deps.JpegTurbo_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl"]
git-tree-sha1 = "4255f0032eafd6451d707a51d5f0248b8a165e4d"
uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8"
version = "3.1.3+0"

[[deps.JuliaSyntaxHighlighting]]
deps = ["StyledStrings"]
uuid = "ac6e5ff7-fb65-4e79-a425-ec3bc9c03011"
version = "1.12.0"

[[deps.KernelDensity]]
deps = ["Distributions", "DocStringExtensions", "FFTW", "Interpolations", "StatsBase"]
git-tree-sha1 = "ba51324b894edaf1df3ab16e2cc6bc3280a2f1a7"
uuid = "5ab0869b-81aa-558d-bb23-cbf5423bbe9b"
version = "0.6.10"

[[deps.LAME_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl"]
git-tree-sha1 = "059aabebaa7c82ccb853dd4a0ee9d17796f7e1bc"
uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d"
version = "3.100.3+0"

[[deps.LERC_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl"]
git-tree-sha1 = "aaafe88dccbd957a8d82f7d05be9b69172e0cee3"
uuid = "88015f11-f218-50d7-93a8-a6af411a945d"
version = "4.0.1+0"

[[deps.LLVMOpenMP_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl"]
git-tree-sha1 = "eb62a3deb62fc6d8822c0c4bef73e4412419c5d8"
uuid = "1d63c593-3942-5779-bab2-d838dc0a180e"
version = "18.1.8+0"

[[deps.LZO_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl"]
git-tree-sha1 = "1c602b1127f4751facb671441ca72715cc95938a"
uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac"
version = "2.10.3+0"

[[deps.LaTeXStrings]]
git-tree-sha1 = "dda21b8cbd6a6c40d9d02a73230f9d70fed6918c"
uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f"
version = "1.4.0"

[[deps.Latexify]]
deps = ["Format", "Ghostscript_jll", "InteractiveUtils", "LaTeXStrings", "MacroTools", "Markdown", "OrderedCollections", "Requires"]
git-tree-sha1 = "44f93c47f9cd6c7e431f2f2091fcba8f01cd7e8f"
uuid = "23fbe1c1-3f47-55db-b15f-69d7ec21a316"
version = "0.16.10"

    [deps.Latexify.extensions]
    DataFramesExt = "DataFrames"
    SparseArraysExt = "SparseArrays"
    SymEngineExt = "SymEngine"
    TectonicExt = "tectonic_jll"

    [deps.Latexify.weakdeps]
    DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
    SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
    SymEngine = "123dc426-2d89-5057-bbad-38513e3affd8"
    tectonic_jll = "d7dd28d6-a5e6-559c-9131-7eb760cdacc5"

[[deps.LazyArtifacts]]
deps = ["Artifacts", "Pkg"]
uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3"
version = "1.11.0"

[[deps.LazyModules]]
git-tree-sha1 = "a560dd966b386ac9ae60bdd3a3d3a326062d3c3e"
uuid = "8cdb02fc-e678-4876-92c5-9defec4f444e"
version = "0.3.1"

[[deps.LibCURL]]
deps = ["LibCURL_jll", "MozillaCACerts_jll"]
uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21"
version = "0.6.4"

[[deps.LibCURL_jll]]
deps = ["Artifacts", "LibSSH2_jll", "Libdl", "OpenSSL_jll", "Zlib_jll", "nghttp2_jll"]
uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0"
version = "8.15.0+0"

[[deps.LibGit2]]
deps = ["LibGit2_jll", "NetworkOptions", "Printf", "SHA"]
uuid = "76f85450-5226-5b5a-8eaa-529ad045b433"
version = "1.11.0"

[[deps.LibGit2_jll]]
deps = ["Artifacts", "LibSSH2_jll", "Libdl", "OpenSSL_jll"]
uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5"
version = "1.9.0+0"

[[deps.LibSSH2_jll]]
deps = ["Artifacts", "Libdl", "OpenSSL_jll"]
uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8"
version = "1.11.3+1"

[[deps.Libdl]]
uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb"
version = "1.11.0"

[[deps.Libffi_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl"]
git-tree-sha1 = "c8da7e6a91781c41a863611c7e966098d783c57a"
uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490"
version = "3.4.7+0"

[[deps.Libglvnd_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll", "Xorg_libXext_jll"]
git-tree-sha1 = "d36c21b9e7c172a44a10484125024495e2625ac0"
uuid = "7e76a0d4-f3c7-5321-8279-8d96eeed0f29"
version = "1.7.1+1"

[[deps.Libiconv_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl"]
git-tree-sha1 = "be484f5c92fad0bd8acfef35fe017900b0b73809"
uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531"
version = "1.18.0+0"

[[deps.Libmount_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl"]
git-tree-sha1 = "3acf07f130a76f87c041cfb2ff7d7284ca67b072"
uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9"
version = "2.41.2+0"

[[deps.Libtiff_jll]]
deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "LERC_jll", "Libdl", "XZ_jll", "Zlib_jll", "Zstd_jll"]
git-tree-sha1 = "f04133fe05eff1667d2054c53d59f9122383fe05"
uuid = "89763e89-9b03-5906-acba-b20f662cd828"
version = "4.7.2+0"

[[deps.Libuuid_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl"]
git-tree-sha1 = "2a7a12fc0a4e7fb773450d17975322aa77142106"
uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700"
version = "2.41.2+0"

[[deps.LinearAlgebra]]
deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"]
uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
version = "1.12.0"

[[deps.LogExpFunctions]]
deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"]
git-tree-sha1 = "13ca9e2586b89836fd20cccf56e57e2b9ae7f38f"
uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688"
version = "0.3.29"

    [deps.LogExpFunctions.extensions]
    LogExpFunctionsChainRulesCoreExt = "ChainRulesCore"
    LogExpFunctionsChangesOfVariablesExt = "ChangesOfVariables"
    LogExpFunctionsInverseFunctionsExt = "InverseFunctions"

    [deps.LogExpFunctions.weakdeps]
    ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
    ChangesOfVariables = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0"
    InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112"

[[deps.Logging]]
uuid = "56ddb016-857b-54e1-b83d-db4d58db5568"
version = "1.11.0"

[[deps.MIMEs]]
git-tree-sha1 = "c64d943587f7187e751162b3b84445bbbd79f691"
uuid = "6c6e2e6c-3030-632d-7369-2d6c69616d65"
version = "1.1.0"

[[deps.MKL_jll]]
deps = ["Artifacts", "IntelOpenMP_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "oneTBB_jll"]
git-tree-sha1 = "282cadc186e7b2ae0eeadbd7a4dffed4196ae2aa"
uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7"
version = "2025.2.0+0"

[[deps.MacroTools]]
git-tree-sha1 = "1e0228a030642014fe5cfe68c2c0a818f9e3f522"
uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09"
version = "0.5.16"

[[deps.Makie]]
deps = ["Animations", "Base64", "CRC32c", "ColorBrewer", "ColorSchemes", "ColorTypes", "Colors", "ComputePipeline", "Contour", "Dates", "DelaunayTriangulation", "Distributions", "DocStringExtensions", "Downloads", "FFMPEG_jll", "FileIO", "FilePaths", "FixedPointNumbers", "Format", "FreeType", "FreeTypeAbstraction", "GeometryBasics", "GridLayoutBase", "ImageBase", "ImageIO", "InteractiveUtils", "Interpolations", "IntervalSets", "InverseFunctions", "Isoband", "KernelDensity", "LaTeXStrings", "LinearAlgebra", "MacroTools", "Markdown", "MathTeXEngine", "Observables", "OffsetArrays", "PNGFiles", "Packing", "Pkg", "PlotUtils", "PolygonOps", "PrecompileTools", "Printf", "REPL", "Random", "RelocatableFolders", "Scratch", "ShaderAbstractions", "Showoff", "SignedDistanceFields", "SparseArrays", "Statistics", "StatsBase", "StatsFuns", "StructArrays", "TriplotBase", "UnicodeFun", "Unitful"]
git-tree-sha1 = "368542cde25d381e44d84c3c4209764f05f4ef19"
uuid = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a"
version = "0.24.6"

[[deps.MappedArrays]]
git-tree-sha1 = "2dab0221fe2b0f2cb6754eaa743cc266339f527e"
uuid = "dbb5928d-eab1-5f90-85c2-b9b0edb7c900"
version = "0.4.2"

[[deps.Markdown]]
deps = ["Base64", "JuliaSyntaxHighlighting", "StyledStrings"]
uuid = "d6f4376e-aef5-505a-96c1-9c027394607a"
version = "1.11.0"

[[deps.MathTeXEngine]]
deps = ["AbstractTrees", "Automa", "DataStructures", "FreeTypeAbstraction", "GeometryBasics", "LaTeXStrings", "REPL", "RelocatableFolders", "UnicodeFun"]
git-tree-sha1 = "a370fef694c109e1950836176ed0d5eabbb65479"
uuid = "0a4f8689-d25c-4efe-a92b-7142dfc1aa53"
version = "0.6.6"

[[deps.Missings]]
deps = ["DataAPI"]
git-tree-sha1 = "ec4f7fbeab05d7747bdf98eb74d130a2a2ed298d"
uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28"
version = "1.2.0"

[[deps.Mmap]]
uuid = "a63ad114-7e13-5084-954f-fe012c677804"
version = "1.11.0"

[[deps.MosaicViews]]
deps = ["MappedArrays", "OffsetArrays", "PaddedViews", "StackViews"]
git-tree-sha1 = "7b86a5d4d70a9f5cdf2dacb3cbe6d251d1a61dbe"
uuid = "e94cdb99-869f-56ef-bcf0-1ae2bcbe0389"
version = "0.3.4"

[[deps.MozillaCACerts_jll]]
uuid = "14a3606d-f60d-562e-9121-12d972cd8159"
version = "2025.11.4"

[[deps.NaNMath]]
deps = ["OpenLibm_jll"]
git-tree-sha1 = "9b8215b1ee9e78a293f99797cd31375471b2bcae"
uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3"
version = "1.1.3"

[[deps.Netpbm]]
deps = ["FileIO", "ImageCore", "ImageMetadata"]
git-tree-sha1 = "d92b107dbb887293622df7697a2223f9f8176fcd"
uuid = "f09324ee-3d7c-5217-9330-fc30815ba969"
version = "1.1.1"

[[deps.NetworkOptions]]
uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908"
version = "1.3.0"

[[deps.Observables]]
git-tree-sha1 = "7438a59546cf62428fc9d1bc94729146d37a7225"
uuid = "510215fc-4207-5dde-b226-833fc4488ee2"
version = "0.5.5"

[[deps.OffsetArrays]]
git-tree-sha1 = "117432e406b5c023f665fa73dc26e79ec3630151"
uuid = "6fe1bfb0-de20-5000-8ca7-80f57d26f881"
version = "1.17.0"
weakdeps = ["Adapt"]

    [deps.OffsetArrays.extensions]
    OffsetArraysAdaptExt = "Adapt"

[[deps.Ogg_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl"]
git-tree-sha1 = "b6aa4566bb7ae78498a5e68943863fa8b5231b59"
uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051"
version = "1.3.6+0"

[[deps.OpenBLASConsistentFPCSR_jll]]
deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl"]
git-tree-sha1 = "567515ca155d0020a45b05175449b499c63e7015"
uuid = "6cdc7f73-28fd-5e50-80fb-958a8875b1af"
version = "0.3.29+0"

[[deps.OpenBLAS_jll]]
deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"]
uuid = "4536629a-c528-5b80-bd46-f80d51c5b363"
version = "0.3.29+0"

[[deps.OpenEXR]]
deps = ["Colors", "FileIO", "OpenEXR_jll"]
git-tree-sha1 = "97db9e07fe2091882c765380ef58ec553074e9c7"
uuid = "52e1d378-f018-4a11-a4be-720524705ac7"
version = "0.3.3"

[[deps.OpenEXR_jll]]
deps = ["Artifacts", "Imath_jll", "JLLWrappers", "Libdl", "Zlib_jll"]
git-tree-sha1 = "8292dd5c8a38257111ada2174000a33745b06d4e"
uuid = "18a262bb-aa17-5467-a713-aee519bc75cb"
version = "3.2.4+0"

[[deps.OpenLibm_jll]]
deps = ["Artifacts", "Libdl"]
uuid = "05823500-19ac-5b8b-9628-191a04bc5112"
version = "0.8.7+0"

[[deps.OpenSSL_jll]]
deps = ["Artifacts", "Libdl"]
uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95"
version = "3.5.4+0"

[[deps.OpenSpecFun_jll]]
deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl"]
git-tree-sha1 = "1346c9208249809840c91b26703912dff463d335"
uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e"
version = "0.5.6+0"

[[deps.Opus_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl"]
git-tree-sha1 = "c392fc5dd032381919e3b22dd32d6443760ce7ea"
uuid = "91d4177d-7536-5919-b921-800302f37372"
version = "1.5.2+0"

[[deps.OrderedCollections]]
git-tree-sha1 = "05868e21324cede2207c6f0f466b4bfef6d5e7ee"
uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d"
version = "1.8.1"

[[deps.PCRE2_jll]]
deps = ["Artifacts", "Libdl"]
uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15"
version = "10.44.0+1"

[[deps.PDMats]]
deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"]
git-tree-sha1 = "f07c06228a1c670ae4c87d1276b92c7c597fdda0"
uuid = "90014a1f-27ba-587c-ab20-58faa44d9150"
version = "0.11.35"

[[deps.PNGFiles]]
deps = ["Base64", "CEnum", "ImageCore", "IndirectArrays", "OffsetArrays", "libpng_jll"]
git-tree-sha1 = "cf181f0b1e6a18dfeb0ee8acc4a9d1672499626c"
uuid = "f57f5aa1-a3ce-4bc8-8ab9-96f992907883"
version = "0.4.4"

[[deps.Packing]]
deps = ["GeometryBasics"]
git-tree-sha1 = "bc5bf2ea3d5351edf285a06b0016788a121ce92c"
uuid = "19eb6ba3-879d-56ad-ad62-d5c202156566"
version = "0.5.1"

[[deps.PaddedViews]]
deps = ["OffsetArrays"]
git-tree-sha1 = "0fac6313486baae819364c52b4f483450a9d793f"
uuid = "5432bcbf-9aad-5242-b902-cca2824c8663"
version = "0.5.12"

[[deps.Pango_jll]]
deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "FriBidi_jll", "Glib_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl"]
git-tree-sha1 = "1f7f9bbd5f7a2e5a9f7d96e51c9754454ea7f60b"
uuid = "36c8627f-9965-5494-a995-c6b170f724f3"
version = "1.56.4+0"

[[deps.Parsers]]
deps = ["Dates", "PrecompileTools", "UUIDs"]
git-tree-sha1 = "7d2f8f21da5db6a806faf7b9b292296da42b2810"
uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0"
version = "2.8.3"

[[deps.Pixman_jll]]
deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LLVMOpenMP_jll", "Libdl"]
git-tree-sha1 = "db76b1ecd5e9715f3d043cec13b2ec93ce015d53"
uuid = "30392449-352a-5448-841d-b1acce4e97dc"
version = "0.44.2+0"

[[deps.Pkg]]
deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "Random", "SHA", "TOML", "Tar", "UUIDs", "p7zip_jll"]
uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"
version = "1.12.1"
weakdeps = ["REPL"]

    [deps.Pkg.extensions]
    REPLExt = "REPL"

[[deps.PkgVersion]]
deps = ["Pkg"]
git-tree-sha1 = "f9501cc0430a26bc3d156ae1b5b0c1b47af4d6da"
uuid = "eebad327-c553-4316-9ea0-9fa01ccd7688"
version = "0.3.3"

[[deps.PlotUtils]]
deps = ["ColorSchemes", "Colors", "Dates", "PrecompileTools", "Printf", "Random", "Reexport", "StableRNGs", "Statistics"]
git-tree-sha1 = "3ca9a356cd2e113c420f2c13bea19f8d3fb1cb18"
uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043"
version = "1.4.3"

[[deps.PlutoTeachingTools]]
deps = ["Downloads", "HypertextLiteral", "Latexify", "Markdown", "PlutoUI"]
git-tree-sha1 = "dacc8be63916b078b592806acd13bb5e5137d7e9"
uuid = "661c6b06-c737-4d37-b85c-46df65de6f69"
version = "0.4.6"

[[deps.PlutoUI]]
deps = ["AbstractPlutoDingetjes", "Base64", "ColorTypes", "Dates", "Downloads", "FixedPointNumbers", "Hyperscript", "HypertextLiteral", "IOCapture", "InteractiveUtils", "JSON", "Logging", "MIMEs", "Markdown", "Random", "Reexport", "URIs", "UUIDs"]
git-tree-sha1 = "8329a3a4f75e178c11c1ce2342778bcbbbfa7e3c"
uuid = "7f904dfe-b85e-4ff6-b463-dae2292396a8"
version = "0.7.71"

[[deps.PolygonOps]]
git-tree-sha1 = "77b3d3605fc1cd0b42d95eba87dfcd2bf67d5ff6"
uuid = "647866c9-e3ac-4575-94e7-e3d426903924"
version = "0.1.2"

[[deps.PrecompileTools]]
deps = ["Preferences"]
git-tree-sha1 = "5aa36f7049a63a1528fe8f7c3f2113413ffd4e1f"
uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a"
version = "1.2.1"

[[deps.Preferences]]
deps = ["TOML"]
git-tree-sha1 = "8b770b60760d4451834fe79dd483e318eee709c4"
uuid = "21216c6a-2e73-6563-6e65-726566657250"
version = "1.5.2"

[[deps.Printf]]
deps = ["Unicode"]
uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7"
version = "1.11.0"

[[deps.ProgressMeter]]
deps = ["Distributed", "Printf"]
git-tree-sha1 = "fbb92c6c56b34e1a2c4c36058f68f332bec840e7"
uuid = "92933f4c-e287-5a05-a399-4b506db050ca"
version = "1.11.0"

[[deps.PtrArrays]]
git-tree-sha1 = "1d36ef11a9aaf1e8b74dacc6a731dd1de8fd493d"
uuid = "43287f4e-b6f4-7ad1-bb20-aadabca52c3d"
version = "1.3.0"

[[deps.QOI]]
deps = ["ColorTypes", "FileIO", "FixedPointNumbers"]
git-tree-sha1 = "8b3fc30bc0390abdce15f8822c889f669baed73d"
uuid = "4b34888f-f399-49d4-9bb3-47ed5cae4e65"
version = "1.0.1"

[[deps.QuadGK]]
deps = ["DataStructures", "LinearAlgebra"]
git-tree-sha1 = "9da16da70037ba9d701192e27befedefb91ec284"
uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc"
version = "2.11.2"

    [deps.QuadGK.extensions]
    QuadGKEnzymeExt = "Enzyme"

    [deps.QuadGK.weakdeps]
    Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9"

[[deps.REPL]]
deps = ["InteractiveUtils", "JuliaSyntaxHighlighting", "Markdown", "Sockets", "StyledStrings", "Unicode"]
uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb"
version = "1.11.0"

[[deps.Random]]
deps = ["SHA"]
uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
version = "1.11.0"

[[deps.RangeArrays]]
git-tree-sha1 = "b9039e93773ddcfc828f12aadf7115b4b4d225f5"
uuid = "b3c3ace0-ae52-54e7-9d0b-2c1406fd6b9d"
version = "0.3.2"

[[deps.Ratios]]
deps = ["Requires"]
git-tree-sha1 = "1342a47bf3260ee108163042310d26f2be5ec90b"
uuid = "c84ed2f1-dad5-54f0-aa8e-dbefe2724439"
version = "0.4.5"
weakdeps = ["FixedPointNumbers"]

    [deps.Ratios.extensions]
    RatiosFixedPointNumbersExt = "FixedPointNumbers"

[[deps.Reexport]]
git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b"
uuid = "189a3867-3050-52da-a836-e630ba90ab69"
version = "1.2.2"

[[deps.RelocatableFolders]]
deps = ["SHA", "Scratch"]
git-tree-sha1 = "ffdaf70d81cf6ff22c2b6e733c900c3321cab864"
uuid = "05181044-ff0b-4ac5-8273-598c1e38db00"
version = "1.0.1"

[[deps.Requires]]
deps = ["UUIDs"]
git-tree-sha1 = "62389eeff14780bfe55195b7204c0d8738436d64"
uuid = "ae029012-a4dd-5104-9daa-d747884805df"
version = "1.3.1"

[[deps.Rmath]]
deps = ["Random", "Rmath_jll"]
git-tree-sha1 = "852bd0f55565a9e973fcfee83a84413270224dc4"
uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa"
version = "0.8.0"

[[deps.Rmath_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl"]
git-tree-sha1 = "58cdd8fb2201a6267e1db87ff148dd6c1dbd8ad8"
uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f"
version = "0.5.1+0"

[[deps.RoundingEmulator]]
git-tree-sha1 = "40b9edad2e5287e05bd413a38f61a8ff55b9557b"
uuid = "5eaf0fd0-dfba-4ccb-bf02-d820a40db705"
version = "0.2.1"

[[deps.SHA]]
uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce"
version = "0.7.0"

[[deps.SIMD]]
deps = ["PrecompileTools"]
git-tree-sha1 = "e24dc23107d426a096d3eae6c165b921e74c18e4"
uuid = "fdea26ae-647d-5447-a871-4b548cad5224"
version = "3.7.2"

[[deps.Scratch]]
deps = ["Dates"]
git-tree-sha1 = "9b81b8393e50b7d4e6d0a9f14e192294d3b7c109"
uuid = "6c6a2e73-6563-6170-7368-637461726353"
version = "1.3.0"

[[deps.Serialization]]
uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b"
version = "1.11.0"

[[deps.ShaderAbstractions]]
deps = ["ColorTypes", "FixedPointNumbers", "GeometryBasics", "LinearAlgebra", "Observables", "StaticArrays"]
git-tree-sha1 = "818554664a2e01fc3784becb2eb3a82326a604b6"
uuid = "65257c39-d410-5151-9873-9b3e5be5013e"
version = "0.5.0"

[[deps.SharedArrays]]
deps = ["Distributed", "Mmap", "Random", "Serialization"]
uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383"
version = "1.11.0"

[[deps.Showoff]]
deps = ["Dates", "Grisu"]
git-tree-sha1 = "91eddf657aca81df9ae6ceb20b959ae5653ad1de"
uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f"
version = "1.0.3"

[[deps.SignedDistanceFields]]
deps = ["Random", "Statistics", "Test"]
git-tree-sha1 = "d263a08ec505853a5ff1c1ebde2070419e3f28e9"
uuid = "73760f76-fbc4-59ce-8f25-708e95d2df96"
version = "0.4.0"

[[deps.SimpleTraits]]
deps = ["InteractiveUtils", "MacroTools"]
git-tree-sha1 = "be8eeac05ec97d379347584fa9fe2f5f76795bcb"
uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d"
version = "0.9.5"

[[deps.Sixel]]
deps = ["Dates", "FileIO", "ImageCore", "IndirectArrays", "OffsetArrays", "REPL", "libsixel_jll"]
git-tree-sha1 = "0494aed9501e7fb65daba895fb7fd57cc38bc743"
uuid = "45858cf5-a6b0-47a3-bbea-62219f50df47"
version = "0.1.5"

[[deps.Sockets]]
uuid = "6462fe0b-24de-5631-8697-dd941f90decc"
version = "1.11.0"

[[deps.SortingAlgorithms]]
deps = ["DataStructures"]
git-tree-sha1 = "64d974c2e6fdf07f8155b5b2ca2ffa9069b608d9"
uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c"
version = "1.2.2"

[[deps.SparseArrays]]
deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"]
uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
version = "1.12.0"

[[deps.SpecialFunctions]]
deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"]
git-tree-sha1 = "f2685b435df2613e25fc10ad8c26dddb8640f547"
uuid = "276daf66-3868-5448-9aa4-cd146d93841b"
version = "2.6.1"
weakdeps = ["ChainRulesCore"]

    [deps.SpecialFunctions.extensions]
    SpecialFunctionsChainRulesCoreExt = "ChainRulesCore"

[[deps.StableRNGs]]
deps = ["Random"]
git-tree-sha1 = "95af145932c2ed859b63329952ce8d633719f091"
uuid = "860ef19b-820b-49d6-a774-d7a799459cd3"
version = "1.0.3"

[[deps.StackViews]]
deps = ["OffsetArrays"]
git-tree-sha1 = "be1cf4eb0ac528d96f5115b4ed80c26a8d8ae621"
uuid = "cae243ae-269e-4f55-b966-ac2d0dc13c15"
version = "0.1.2"

[[deps.StaticArrays]]
deps = ["LinearAlgebra", "PrecompileTools", "Random", "StaticArraysCore"]
git-tree-sha1 = "b8693004b385c842357406e3af647701fe783f98"
uuid = "90137ffa-7385-5640-81b9-e52037218182"
version = "1.9.15"
weakdeps = ["ChainRulesCore", "Statistics"]

    [deps.StaticArrays.extensions]
    StaticArraysChainRulesCoreExt = "ChainRulesCore"
    StaticArraysStatisticsExt = "Statistics"

[[deps.StaticArraysCore]]
git-tree-sha1 = "192954ef1208c7019899fbf8049e717f92959682"
uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c"
version = "1.4.3"

[[deps.Statistics]]
deps = ["LinearAlgebra"]
git-tree-sha1 = "ae3bb1eb3bba077cd276bc5cfc337cc65c3075c0"
uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
version = "1.11.1"
weakdeps = ["SparseArrays"]

    [deps.Statistics.extensions]
    SparseArraysExt = ["SparseArrays"]

[[deps.StatsAPI]]
deps = ["LinearAlgebra"]
git-tree-sha1 = "9d72a13a3f4dd3795a195ac5a44d7d6ff5f552ff"
uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0"
version = "1.7.1"

[[deps.StatsBase]]
deps = ["AliasTables", "DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"]
git-tree-sha1 = "2c962245732371acd51700dbb268af311bddd719"
uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91"
version = "0.34.6"

[[deps.StatsFuns]]
deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"]
git-tree-sha1 = "8e45cecc66f3b42633b8ce14d431e8e57a3e242e"
uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c"
version = "1.5.0"
weakdeps = ["ChainRulesCore", "InverseFunctions"]

    [deps.StatsFuns.extensions]
    StatsFunsChainRulesCoreExt = "ChainRulesCore"
    StatsFunsInverseFunctionsExt = "InverseFunctions"

[[deps.StructArrays]]
deps = ["ConstructionBase", "DataAPI", "Tables"]
git-tree-sha1 = "8ad2e38cbb812e29348719cc63580ec1dfeb9de4"
uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a"
version = "0.7.1"

    [deps.StructArrays.extensions]
    StructArraysAdaptExt = "Adapt"
    StructArraysGPUArraysCoreExt = ["GPUArraysCore", "KernelAbstractions"]
    StructArraysLinearAlgebraExt = "LinearAlgebra"
    StructArraysSparseArraysExt = "SparseArrays"
    StructArraysStaticArraysExt = "StaticArrays"

    [deps.StructArrays.weakdeps]
    Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e"
    GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527"
    KernelAbstractions = "63c18a36-062a-441e-b654-da1e3ab1ce7c"
    LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
    SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
    StaticArrays = "90137ffa-7385-5640-81b9-e52037218182"

[[deps.StyledStrings]]
uuid = "f489334b-da3d-4c2e-b8f0-e476e12c162b"
version = "1.11.0"

[[deps.SuiteSparse]]
deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"]
uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9"

[[deps.SuiteSparse_jll]]
deps = ["Artifacts", "Libdl", "libblastrampoline_jll"]
uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c"
version = "7.8.3+2"

[[deps.TOML]]
deps = ["Dates"]
uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76"
version = "1.0.3"

[[deps.TableTraits]]
deps = ["IteratorInterfaceExtensions"]
git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39"
uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c"
version = "1.0.1"

[[deps.Tables]]
deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "OrderedCollections", "TableTraits"]
git-tree-sha1 = "f2c1efbc8f3a609aadf318094f8fc5204bdaf344"
uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c"
version = "1.12.1"

[[deps.Tar]]
deps = ["ArgTools", "SHA"]
uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e"
version = "1.10.0"

[[deps.TensorCore]]
deps = ["LinearAlgebra"]
git-tree-sha1 = "1feb45f88d133a655e001435632f019a9a1bcdb6"
uuid = "62fd8b95-f654-4bbd-a8a5-9c27f68ccd50"
version = "0.1.1"

[[deps.Test]]
deps = ["InteractiveUtils", "Logging", "Random", "Serialization"]
uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
version = "1.11.0"

[[deps.TiffImages]]
deps = ["ColorTypes", "DataStructures", "DocStringExtensions", "FileIO", "FixedPointNumbers", "IndirectArrays", "Inflate", "Mmap", "OffsetArrays", "PkgVersion", "PrecompileTools", "ProgressMeter", "SIMD", "UUIDs"]
git-tree-sha1 = "98b9352a24cb6a2066f9ababcc6802de9aed8ad8"
uuid = "731e570b-9d59-4bfa-96dc-6df516fadf69"
version = "0.11.6"

[[deps.TranscodingStreams]]
git-tree-sha1 = "0c45878dcfdcfa8480052b6ab162cdd138781742"
uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa"
version = "0.11.3"

[[deps.Tricks]]
git-tree-sha1 = "311349fd1c93a31f783f977a71e8b062a57d4101"
uuid = "410a4b4d-49e4-4fbc-ab6d-cb71b17b3775"
version = "0.1.13"

[[deps.TriplotBase]]
git-tree-sha1 = "4d4ed7f294cda19382ff7de4c137d24d16adc89b"
uuid = "981d1d27-644d-49a2-9326-4793e63143c3"
version = "0.1.0"

[[deps.URIs]]
git-tree-sha1 = "bef26fb046d031353ef97a82e3fdb6afe7f21b1a"
uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4"
version = "1.6.1"

[[deps.UUIDs]]
deps = ["Random", "SHA"]
uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4"
version = "1.11.0"

[[deps.Unicode]]
uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5"
version = "1.11.0"

[[deps.UnicodeFun]]
deps = ["REPL"]
git-tree-sha1 = "53915e50200959667e78a92a418594b428dffddf"
uuid = "1cfade01-22cf-5700-b092-accc4b62d6e1"
version = "0.4.1"

[[deps.Unitful]]
deps = ["Dates", "LinearAlgebra", "Random"]
git-tree-sha1 = "cec2df8cf14e0844a8c4d770d12347fda5931d72"
uuid = "1986cc42-f94f-5a68-af5c-568840ba703d"
version = "1.25.0"

    [deps.Unitful.extensions]
    ConstructionBaseUnitfulExt = "ConstructionBase"
    ForwardDiffExt = "ForwardDiff"
    InverseFunctionsUnitfulExt = "InverseFunctions"
    LatexifyExt = ["Latexify", "LaTeXStrings"]
    PrintfExt = "Printf"

    [deps.Unitful.weakdeps]
    ConstructionBase = "187b0558-2788-49d3-abe0-74a17ed4e7c9"
    ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210"
    InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112"
    LaTeXStrings = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f"
    Latexify = "23fbe1c1-3f47-55db-b15f-69d7ec21a316"
    Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7"

[[deps.WebP]]
deps = ["CEnum", "ColorTypes", "FileIO", "FixedPointNumbers", "ImageCore", "libwebp_jll"]
git-tree-sha1 = "aa1ca3c47f119fbdae8770c29820e5e6119b83f2"
uuid = "e3aaa7dc-3e4b-44e0-be63-ffb868ccd7c1"
version = "0.1.3"

[[deps.WoodburyMatrices]]
deps = ["LinearAlgebra", "SparseArrays"]
git-tree-sha1 = "c1a7aa6219628fcd757dede0ca95e245c5cd9511"
uuid = "efce3f68-66dc-5838-9240-27a6d6f5f9b6"
version = "1.0.0"

[[deps.XZ_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl"]
git-tree-sha1 = "fee71455b0aaa3440dfdd54a9a36ccef829be7d4"
uuid = "ffd25f8a-64ca-5728-b0f7-c24cf3aae800"
version = "5.8.1+0"

[[deps.Xorg_libX11_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll", "Xorg_xtrans_jll"]
git-tree-sha1 = "b5899b25d17bf1889d25906fb9deed5da0c15b3b"
uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc"
version = "1.8.12+0"

[[deps.Xorg_libXau_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl"]
git-tree-sha1 = "aa1261ebbac3ccc8d16558ae6799524c450ed16b"
uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec"
version = "1.0.13+0"

[[deps.Xorg_libXdmcp_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl"]
git-tree-sha1 = "52858d64353db33a56e13c341d7bf44cd0d7b309"
uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05"
version = "1.1.6+0"

[[deps.Xorg_libXext_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"]
git-tree-sha1 = "a4c0ee07ad36bf8bbce1c3bb52d21fb1e0b987fb"
uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3"
version = "1.3.7+0"

[[deps.Xorg_libXrender_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"]
git-tree-sha1 = "7ed9347888fac59a618302ee38216dd0379c480d"
uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa"
version = "0.9.12+0"

[[deps.Xorg_libxcb_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libXau_jll", "Xorg_libXdmcp_jll"]
git-tree-sha1 = "bfcaf7ec088eaba362093393fe11aa141fa15422"
uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b"
version = "1.17.1+0"

[[deps.Xorg_xtrans_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl"]
git-tree-sha1 = "a63799ff68005991f9d9491b6e95bd3478d783cb"
uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10"
version = "1.6.0+0"

[[deps.Zlib_jll]]
deps = ["Libdl"]
uuid = "83775a58-1f1d-513f-b197-d71354ab007a"
version = "1.3.1+2"

[[deps.Zstd_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl"]
git-tree-sha1 = "446b23e73536f84e8037f5dce465e92275f6a308"
uuid = "3161d3a3-bdf6-5164-811a-617609db77b4"
version = "1.5.7+1"

[[deps.isoband_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "51b5eeb3f98367157a7a12a1fb0aa5328946c03c"
uuid = "9a68df92-36a6-505f-a73e-abb412b6bfb4"
version = "0.2.3+0"

[[deps.libaom_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl"]
git-tree-sha1 = "371cc681c00a3ccc3fbc5c0fb91f58ba9bec1ecf"
uuid = "a4ae2306-e953-59d6-aa16-d00cac43593b"
version = "3.13.1+0"

[[deps.libass_jll]]
deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Zlib_jll"]
git-tree-sha1 = "125eedcb0a4a0bba65b657251ce1d27c8714e9d6"
uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0"
version = "0.17.4+0"

[[deps.libblastrampoline_jll]]
deps = ["Artifacts", "Libdl"]
uuid = "8e850b90-86db-534c-a0d3-1478176c7d93"
version = "5.15.0+0"

[[deps.libfdk_aac_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl"]
git-tree-sha1 = "646634dd19587a56ee2f1199563ec056c5f228df"
uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280"
version = "2.0.4+0"

[[deps.libpng_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Zlib_jll"]
git-tree-sha1 = "07b6a107d926093898e82b3b1db657ebe33134ec"
uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f"
version = "1.6.50+0"

[[deps.libsixel_jll]]
deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "Libdl", "libpng_jll"]
git-tree-sha1 = "c1733e347283df07689d71d61e14be986e49e47a"
uuid = "075b6546-f08a-558a-be8f-8157d0f608a5"
version = "1.10.5+0"

[[deps.libvorbis_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll"]
git-tree-sha1 = "11e1772e7f3cc987e9d3de991dd4f6b2602663a5"
uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a"
version = "1.3.8+0"

[[deps.libwebp_jll]]
deps = ["Artifacts", "Giflib_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libglvnd_jll", "Libtiff_jll", "libpng_jll"]
git-tree-sha1 = "4e4282c4d846e11dce56d74fa8040130b7a95cb3"
uuid = "c5f90fcd-3b7e-5836-afba-fc50a0988cb2"
version = "1.6.0+0"

[[deps.nghttp2_jll]]
deps = ["Artifacts", "Libdl"]
uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d"
version = "1.64.0+1"

[[deps.oneTBB_jll]]
deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl"]
git-tree-sha1 = "d5a767a3bb77135a99e433afe0eb14cd7f6914c3"
uuid = "1317d2d5-d96f-522e-a858-c73665f53c3e"
version = "2022.0.0+0"

[[deps.p7zip_jll]]
deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"]
uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0"
version = "17.7.0+0"

[[deps.x264_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl"]
git-tree-sha1 = "14cc7083fc6dff3cc44f2bc435ee96d06ed79aa7"
uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a"
version = "10164.0.1+0"

[[deps.x265_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl"]
git-tree-sha1 = "e7b67590c14d487e734dcb925924c5dc43ec85f3"
uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76"
version = "4.1.0+0"
"""

# ╔═╡ Cell order:
# ╟─644886f5-ff05-444c-9b2c-5f4f0c5ef37e
# ╟─501f10c5-16fc-4250-91b7-405038b356c4
# ╟─d638a6f8-1c7e-11f1-001e-59999a8dfd53
# ╟─37b665d6-1127-4dac-a03d-fd404a440d46
# ╟─705c3e2b-f408-4506-b77d-e118b9c6b816
# ╟─de759c8c-df0b-48e9-8df0-c8f7a8346092
# ╟─a7adf8c8-0c4d-4749-a2e9-b3fb9e8dfcce
# ╟─1c809114-1cf1-4cdf-a52d-ffe10a0bdb45
# ╟─cd5b92a2-78ec-4d62-beab-25a7ae1d1f74
# ╟─2a00b81a-7344-4e0d-a55b-30c9bf7449bb
# ╟─272024bf-d77d-4761-9a8b-39a0e418eb91
# ╟─86b143ec-13ab-42a3-a69f-84e6c2f9e2b8
# ╟─fde92f57-7047-4201-9111-0fab764b9a14
# ╟─6bba0466-4441-45d0-aef1-10ce6df9904d
# ╟─a7d42bdd-2e33-4ed7-9fb2-ac1d07c01855
# ╟─bd837a2d-6f50-465d-b0f6-0a9ed78725f9
# ╟─f1d331ba-5670-4b13-ada2-5db174b5a974
# ╟─fba57cbf-7c9d-4fa3-b127-fb69942bf238
# ╟─d48d1091-de14-48f7-b2b5-00ff13904191
# ╟─cd42e4ec-3dea-494e-a0d6-1cf1f364613d
# ╟─2c312344-413c-4329-969b-2ef4b9385b35
# ╟─72acb906-5813-4359-a5d2-7b4f4f965f04
# ╟─cf2d255e-f172-49c1-add1-d387e1940cb9
# ╟─ddfc97b2-20b7-4988-9d8e-985d62d030ea
# ╟─bb8711ab-16f4-4383-92c0-067b615f9c32
# ╟─7f7d0b6b-53cc-4f77-8d8d-2b563c31e2b4
# ╟─2cc39eb6-15e2-4906-b81d-e49cc102062e
# ╟─f43a007e-d998-4533-90bc-69f561a76dca
# ╟─70bd6e6d-edad-4fa5-bd88-758c6fd4b282
# ╟─32cf3235-e28c-42f9-ab5f-d442941d85f7
# ╟─b111ea53-1829-448b-8755-49237452ccb9
# ╟─2b6a7418-25a2-425d-8c32-f59b4965020d
# ╟─d2657166-50d1-4602-b8b3-30f58cae9310
# ╟─0b2a502e-3fa5-49ae-b639-815d1dc86780
# ╟─1e9ed9e7-b7a3-4f49-a2f4-a3427b1b2d3a
# ╟─c42cfcc5-919a-4f1d-88c9-b1392865bc1d
# ╟─a8ff4208-cb83-47a8-b05d-37600206ad32
# ╟─b6828b0d-31b2-44da-bf6d-14ccf7df8f8b
# ╟─9af0515f-5ee2-4857-8d54-f1c1b62cfcc2
# ╟─b77b4c16-5277-4bb6-80e8-01bb90a7d0b2
# ╟─1585111b-8ccf-41bc-9434-852a82a2f732
# ╟─bee1bef7-92e0-411a-9546-a764a88bc477
# ╟─10d946f4-d30e-4e04-87d4-69d3c170322b
# ╟─e3e30523-854f-47ed-8aef-aa26a0829c4a
# ╟─9b4d1ccf-1153-45a1-b535-41e421d5c0f1
# ╟─4f74fb37-de37-4b31-b3ae-cd94cdb14607
# ╟─ab5a243d-1c44-4676-8fe5-20154926e194
# ╟─17e992a4-f9f7-44de-9272-071828dee798
# ╟─39f7fa27-e99e-4d36-8dd1-f8349187c507
# ╟─8862d324-44d9-4cfb-8c75-477acc41a47d
# ╟─b8a523cb-1282-41e3-933c-7a55e9b58dff
# ╟─5e74f85e-95af-42a1-82ff-b36f8f1728cf
# ╟─538b1d6d-710d-4a1d-8f25-9d732f23a5cd
# ╟─3cb7186c-9ca2-4413-b369-214b1497fa4e
# ╟─275c2528-42b0-4fe0-8bc2-2d3fa12a964c
# ╟─5a7851ba-70cc-4f0f-96fa-ac7088b787cf
# ╟─d1837cc0-a22c-46de-97d3-27ac30877eff
# ╟─14433d47-3ceb-42b7-80d8-259ed768cdd8
# ╟─3ccdaadf-d754-4d36-89bf-57da67cae148
# ╟─3c7a0c3e-9cf9-475c-b7b9-58f3e87a4565
# ╟─e6d21947-f7ba-4619-838c-0d7bb06d0c9c
# ╟─505dcf09-20de-403e-a38a-f123a2666f56
# ╟─18e157e4-13a3-4af8-9d49-90b265c18ea3
# ╟─a0b01c16-5a8b-4023-a3f5-018f0f110a59
# ╟─4a665d38-4931-415e-b6e1-2ca130155f58
# ╟─1d7bb1a0-b41d-4e91-93b9-ab801cd05b6e
# ╟─a5817e06-c8d1-4765-8ffd-3ad7b1f31f05
# ╟─51493505-28f5-467f-afa6-813366db705a
# ╟─223b6b78-29c8-4d49-9091-ec24a13e4b2b
# ╟─589aa6ed-4169-4096-8b98-65e8fa794f41
# ╟─ff9d6027-6343-46f0-991d-ee694a95bd00
# ╟─76f79c6b-4eda-45ef-b69c-3df0d5a31f23
# ╟─e7fceccf-c1eb-4e68-81e0-f3229abbc533
# ╟─e4496ba3-9405-4643-8680-78ec06dfe294
# ╟─22653a5a-bfd1-4991-8b6c-d1662c638625
# ╟─556dab3a-e772-4498-b9e9-a7d7ffa26aa9
# ╟─28e9cd82-80aa-4f46-ae83-34ce65c9eaea
# ╟─f8148d33-4bfd-4a9b-a0bf-4382b6ff65ef
# ╟─3af4708b-42fc-4428-928e-401c4a452aa8
# ╟─4e113358-5031-4cf0-aabe-a2529b34a3ff
# ╟─5bb4ab2e-50c0-47f6-8598-7d7d7f170c74
# ╟─8e9fe001-91d2-42f1-92c9-1f9c995a2d25
# ╟─f1710510-16a5-4f6c-b87f-20063f0280c6
# ╟─97f357b0-3658-438e-a1a8-a76f1db881ae
# ╟─623af91e-dd92-48c0-906c-7a7381437a93
# ╟─f0b99f33-b310-4eeb-91e4-d0e2f1883cf7
# ╟─d8789cac-e7e7-4f06-bd23-ceae2359f87b
# ╟─6a896743-df9e-46fa-89ea-5acdafee0618
# ╟─b3361b70-8d87-41b4-a0c1-672ac5395564
# ╟─2604872f-72c1-469c-874f-5b361c9319eb
# ╟─11a47cc5-a8e3-4fca-aaa3-371838fe7368
# ╟─1df2d2f1-a270-46a6-961e-db39122807b6
# ╟─9e76e84c-6eac-46dd-9f14-f56705d02440
# ╟─f4ba4d5f-aa1a-4b67-a350-60695e536a63
# ╟─f104d8a7-b1b2-488b-aac0-dc7a8ab38146
# ╟─d9c97418-3fc5-4ac9-9550-6cf947cfa500
# ╟─6a5e2a8f-8b13-443b-b1cb-8414697eeae0
# ╟─fc7c04d4-5ac6-4ff3-8d60-3cd6e68a69ab
# ╟─ec48d765-9866-477d-937a-b19a02ca61b9
# ╟─87f3875b-be93-4c4c-90fb-ee633c69bdc5
# ╟─8745d18c-3bb3-4ac7-8182-58dabfa868cf
# ╟─d696f636-1a71-4fe5-a3ff-8dd7bb93f463
# ╟─2cf580da-d04a-4af7-baec-36344d3954d2
# ╟─8d25c672-324c-49fd-b347-263aab0f1842
# ╟─f4b2d2dd-f527-4fc4-a942-65e7d328878f
# ╟─c68a13ac-76c8-4787-8e49-0dd04d40ab69
# ╟─4ec262fc-00c5-470b-b7a3-f9f0e3231d4e
# ╟─ca2f00e8-be6f-4366-996f-3575e41820b0
# ╟─beb10bd2-c344-4401-b27d-8df5cb4560db
# ╟─00000000-0000-0000-0000-000000000001
# ╟─00000000-0000-0000-0000-000000000002
