commit 5dbb792f9d622133979f2cd0edc71892265b049a Author: Nils Pukropp Date: Thu Feb 12 15:43:35 2026 +0100 init diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..567609b --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +build/ diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..b506092 --- /dev/null +++ b/build.sh @@ -0,0 +1,44 @@ +#!/bin/bash + +# Define ANSI Color Codes +RED='\033[0;31m' +GREEN='\033[0;32m' +BLUE='\033[0;34m' +YELLOW='\033[1;33m' +CYAN='\033[0;36m' +NC='\033[0m' # No Color (Reset) + +SOURCE="./src/mathe_2_merkblatt.typ" +BUILD_DIR="./build" + +# Check if Build Directory exists +if [ ! -d "$BUILD_DIR" ]; then + echo -e "${BLUE}[INFO]${NC} Creating build directory: $BUILD_DIR" + mkdir -p "$BUILD_DIR" +fi + +# Check if Source File exists +if [ ! -f "$SOURCE" ]; then + echo -e "${RED}[ERROR]${NC} Source file '$SOURCE' not found!" + exit 1 +fi + +echo -e "${YELLOW}Starting compilation...${NC}" + +# Compile Dark Mode +typst compile --input dark-mode=true "$SOURCE" "${BUILD_DIR}/mathe_2_merkblatt_dark.pdf" +if [ $? -eq 0 ]; then + echo -e "${GREEN}[SUCCESS]${NC} Darkmode build: ${CYAN}${BUILD_DIR}/mathe_2_merkblatt_dark.pdf${NC}" +else + echo -e "${RED}[FAIL]${NC} Error compiling Darkmode target" +fi + +# Compile Light Mode +typst compile --input dark-mode=false "$SOURCE" "${BUILD_DIR}/mathe_2_merkblatt_light.pdf" +if [ $? -eq 0 ]; then + echo -e "${GREEN}[SUCCESS]${NC} Lightmode build: ${CYAN}${BUILD_DIR}/mathe_2_merkblatt_light.pdf${NC}" +else + echo -e "${RED}[FAIL]${NC} Error compiling Lightmode target" +fi + +echo -e "${YELLOW}Build process finished!${NC}" diff --git a/src/mathe_2_merkblatt.typ b/src/mathe_2_merkblatt.typ new file mode 100644 index 0000000..b1619b5 --- /dev/null +++ b/src/mathe_2_merkblatt.typ @@ -0,0 +1,377 @@ +// THEME SETUP +#let dark-mode = sys.inputs.at("dark-mode", default: "true") == "true" + +// Catppuccin Farben Definition +#let palette = if dark-mode { + ( + bg: rgb("#1e1e2e"), + fg: rgb("#cdd6f4"), + base: rgb("#181825"), + blue: rgb("#89b4fa"), + red: rgb("#f38ba8"), + teal: rgb("#94e2d5"), + subtext: rgb("#a6adc8"), + surface: rgb("#313244"), + line: rgb("#45475a") + ) +} else { + ( + bg: rgb("#FFFFFF"), + fg: rgb("#232634"), + base: rgb("#303446"), + blue: rgb("#8caaee"), + red: rgb("#e78284"), + teal: rgb("#81c8be"), + subtext: rgb("#b5bfe2"), + surface: rgb("#414559"), + line: rgb("#bcc0cc") + ) +} + +// SETUP & DESIGN +#set page( + paper: "a4", + flipped: true, + margin: (top: 1cm, left: 1cm, right: 1cm, bottom: 1.5cm), + fill: palette.bg, + footer: [ + #set text(fill: palette.fg, size: 7pt) + #block(width: 100%, inset: (top: 0.5em))[ + #line(length: 100%, stroke: 0.5pt + palette.line) + #v(0.2em) + #grid( + columns: (1fr, 2fr, 1fr), + align: (left, center, right), + + [Nils Pukropp], + + [ + #link("mailto:nils@narl.io") #h(1em) | #h(1em) + #link("https://git.narl.io/nvrl/Mathe-II-f-r-Informatiker-Merkblatt")[#underline[https://git.narl.io/nvrl/Mathe-II-f-r-Informatiker-Merkblatt]] + ], + [Stand: WS2026] + ) + ] + ], + footer-descent: 0.3cm +) + +#set text( + font: "FiraCode Nerd Font", + size: 7pt, + lang: "de", + fill: palette.fg +) + +// Spalten-Layout +#show: columns.with(3, gutter: 1.5em) + +#set heading(numbering: none) + +#show heading.where(level: 1): it => block( + width: 100%, + above: 1.5em, + below: 0.8em, + fill: palette.blue, + inset: (x: 4pt, y: 3pt), + radius: 2pt, + text(fill: palette.bg, weight: "bold", 10pt, upper(it.body)) +) + +#show heading.where(level: 2): it => block( + width: 100%, + above: 1.2em, + below: 0.6em, + sticky: true, + { + text(fill: palette.red, weight: "bold", it.body) + v(0.1em) + line(length: 100%, stroke: 0.5pt + palette.line) + } +) + +// HILFSFUNKTIONEN + +#let defbox(title, body) = block( + width: 100%, + fill: palette.teal.lighten(if dark-mode { 60% } else { 90% }), + stroke: (left: 2pt + palette.teal), + inset: 5pt, + radius: (right: 2pt), + above: 1em, + below: 1em, + breakable: false, + [#text(fill: if dark-mode { palette.bg } else { palette.fg })[#strong(title): #body]] +) + +#let alertbox(body) = block( + width: 100%, + fill: palette.surface.lighten(if dark-mode { 10% } else { 50% }), + stroke: 0.5pt + palette.line, + inset: 5pt, + radius: 3pt, + above: 1em, + below: 1em, + breakable: false, + [#text(fill: palette.fg)[#body]] +) + +// Operatoren & Symbole +#let rang = math.op("Rang") +#let ker = math.op("Kern") +#let bild = math.op("Bild") +#let span = math.op("span") +#let dim = math.op("dim") +#let spur = math.op("Spur") +#let id = math.bb("1") +#let grad = math.op("grad") +#let div = math.op("div") +#let rot = math.op("rot") +#let Hess = math.op("Hess") +#let ggT = math.op("ggT") + +// Zahlbereiche +#let RR = math.bb("R") +#let ZZ = math.bb("Z") +#let NN = math.bb("N") +#let QQ = math.bb("Q") +#let CC = math.bb("C") +#let FF = math.bb("F") + +// CONTENT + += Analysis (Mehrdimensional) + +#defbox[Gradient & Hesse-Matrix][ + Für $f: RR^n -> RR$: + - *Gradient:* $nabla f(x) = (partial_1 f, ..., partial_n f)^T$ + - *Hesse-Matrix:* $H_f (x) = ( (partial^2 f) / (partial x_i partial x_j) )_(i,j)$ + (Symmetrisch nach Satz von Schwarz) +] + +== Stationäre Punkte & Extrema +1. *Notwendig:* Berechne $nabla f(x) = 0$. Löse LGS. +2. *Hinreichend:* Prüfe Definitheit von $H_f(x_0)$. + +#alertbox[ + *Definitheit der Hesse-Matrix $H_f(x_0)$*: + - *Positiv definit* ($>0$): *Lokales Minimum* + - *Negativ definit* ($<0$): *Lokales Maximum* + - *Indefinit:* *Sattelpunkt* +] + +== Hurwitz-Kriterium (Definitheit) +Für symmetrische Matrix $A in RR^(n times n)$. Betrachte Hauptminoren $D_k$ (Det. der oberen linken $k times k$ Untermatrix). +- *Pos. Def.:* Alle $D_k > 0$ ($D_1 > 0, D_2 > 0, ...$) +- *Neg. Def.:* Vorzeichenwechsel beginnend mit Minus ($- + - + ...$), d.h. $D_1 < 0, D_2 > 0, D_3 < 0 ...$ +- *Indefinit:* $det(A) != 0$, aber kein Muster oben passt. +- *Semidefinit:* Wenn $det(A)=0$ (Eigenwerte prüfen!). +*Spezialfall $2 times 2$:* $H_f = mat(f_(x x), f_(x y); f_(y x), f_(y y))$ +- $det(H) > 0$ und $f_(x x) > 0 =>$ Minimum. +- $det(H) > 0$ und $f_(x x) < 0 =>$ Maximum. +- $det(H) < 0 =>$ Sattelpunkt. + +== Richtungsableitung +Ableitung in Punkt $x$ in Richtung $v$ ($v$ muss normiert sein! $||v||=1$): +$ (partial f) / (partial v) (x) = nabla f(x) dot v / ||v|| $ + +== Konvexität +- $f$ konvex $<=> H_f(x)$ positiv (semi-)definit für alle $x$. +- $f$ konkav $<=> H_f(x)$ negativ (semi-)definit für alle $x$. +- $S$ konvex: Verbindungslinie zweier Punkte liegt in $S$. + +#colbreak() + += Zahlentheorie + +== Modulo-Rechnung +$\ZZ_n = \{0, ..., n-1\}$. Rechnen mit Rest. +- *Einheiten* $\ZZ_n^*$: Elemente $a in \ZZ_n$ mit $ggT(a, n) = 1$. +- *Euler $phi(n)$*: Anzahl der Einheiten. + - $p$ prim: $phi(p) = p-1$. + - $n = p dot q$: $phi(n) = (p-1)(q-1)$. + - $n = p^k$: $phi(p^k) = p^k - p^(k-1)$. + +== Wichtige Sätze +#alertbox[ + *Kleiner Fermat:* $p$ prim, $a$ kein Vielfaches: + $ a^(p-1) equiv 1 mod p $ + *Satz von Euler:* $ggT(a, n) = 1$: + $ a^phi(n) equiv 1 mod n $ +] +- *Anwendung (Inverse):* In $\ZZ_n$ ist $a^(-1) = a^(phi(n)-1) mod n$. +- *Schnelle Exponentiation:* +Berechne $b^e mod m$. +1. Exponent $e$ binär schreiben. +2. Quadrieren und bei 1 multiplizieren (Square & Multiply). +3. Oder: $e$ reduzieren modulo $phi(m)$ (falls Basis $b$ teilerfremd zu $m$!). + +== Euklidischer Algorithmus (ggT) +Zur Berechnung von $ggT(a, b)$ und $s, t$ mit $ggT(a,b) = s dot a + t dot b$. +Beispiel $ggT(12, 7)$: +$12 = 1 dot 7 + 5 => 5 = 12 - 1 dot 7$ +$7 = 1 dot 5 + 2 => 2 = 7 - 1 dot 5 = 7 - (12-7) = 2 dot 7 - 1 dot 12$ +$5 = 2 dot 2 + 1 => 1 = 5 - 2 dot 2 = (12-7) - 2(2 dot 7 - 12) = 3 dot 12 - 5 dot 7$ +$=> 1 = 3 dot 12 + (-5) dot 7$. Inverse von 7 mod 12 ist -5 (=7). + +== Chinesischer Restsatz (CRT) +Löse System: $x equiv a_i mod m_i$ (moduli $m_i$ paarweise teilerfremd). +$M = product m_i, quad M_i = M / m_i$. +Löse $M_i y_i equiv 1 mod m_i$ (Inverse von $M_i$). +Lösung: $x = sum_(i) a_i M_i y_i mod M$. + +#colbreak() + += Lineare Algebra: Matrizen + +== Matrizen & LGS +$A in K^(m times n)$. LGS $A x = b$. +*Gauß-Verfahren:* Auf Zeilenstufenform bringen. +- Rang $r$: Anzahl der Stufen (Nicht-Null-Zeilen). +- $r = n$: Eindeutige Lsg. (bei hom. nur 0). +- $r < n$: Unendlich viele Lsg. ($n-r$ Parameter frei). +- $r < m$: Lösbar nur wenn Nullzeilen rechts 0 sind. + +== Determinante (nur $n times n$) +- $det(A) != 0 <=> A$ invertierbar $<=> rang(A)=n$. +- $2 times 2$: $det mat(a, b; c, d) = a d - b c$. +- $3 times 3$: Sarrus (Jägerzaun). +- $n times n$: Laplace (Entwicklung nach Zeile/Spalte mit vielen 0). +- Regeln: $det(A B) = det A det B$, $det(A^T) = det A$. +- $det(lambda A) = lambda^n det A$. + +== Inverse Matrix +$A^(-1)$ existiert nur wenn $det A != 0$. +- $2 times 2$: $A^(-1) = 1/(det A) mat(d, -b; -c, a)$. +- Allgemein: Gauß $(A | I_n) -> (I_n | A^(-1))$. + += Lineare Abbildungen + +$phi: V -> W$ linear ($phi(v+w)=phi(v)+phi(w), phi(c v)=c phi(v)$). +- *Bild:* Spaltenraum der Matrix $A$. $dim(bild) = rang(A)$. +- *Kern:* Lösungsraum von $A x = 0$. +#alertbox[ + *Dimensionssatz:* + $ dim(V) = dim(ker(phi)) + dim(bild(phi)) $ + $ n = "Anzahl freie Parameter" + rang(A) $ +] +- *Injektiv:* $ker(phi) = \{0\}$. +- *Surjektiv:* $bild(phi) = W$ (Rang = Zeilenzahl). +- *Bijektiv:* $n=m$ und Determinante $!= 0$. + +== Abbildungsmatrix +$M_B^C(phi)$: Matrix bzgl. Basis $B$ (Start) und $C$ (Ziel). +Spalten sind Bilder der Basisvektoren von $B$, dargestellt in $C$. +$ "Spalte" j = phi(b_j)_C $ +*Basiswechsel:* $M_B^C(id)$ transformiert von $B$ nach $C$. +$A' = T^(-1) A T$ (wenn $T$ Transformationsmatrix). + +#colbreak() + += Eigenwerte (EW) & Diagonalisierung + +1. *Charakteristisches Polynom:* $P_A(lambda) = det(A - lambda I) = 0$. +2. Nullstellen sind EW $lambda_i$. + - *Alg. Vielfachheit:* Potenz im Polynom. + - *Geom. Vielfachheit:* $dim(ker(A - lambda_i I)) = n - rang(A - lambda_i I)$. +3. *Eigenraum:* $E_lambda = ker(A - lambda I)$ (LGS lösen). + +#alertbox[ + *Diagonalisierbar gdw:* + 1. $P_A$ zerfällt komplett in Linearfaktoren. + 2. Für jeden EW gilt: *Alg. VFH = Geom. VFH*. + Symmetrische Matrizen sind *immer* diagonalisierbar! +] +Matrix $D = S^(-1) A S$ (Diagonalmatrix mit EW). +$S$: Spalten sind die Eigenvektoren. + +== Spektralsatz (Symmetrische Matrizen) +Ist $A = A^T$, dann: +- Alle EW sind reell. +- $A$ ist orthogonal diagonalisierbar: $D = Q^T A Q$ mit $Q^T = Q^(-1)$. +- Eigenvektoren zu versch. EW sind *orthogonal*. + += Euklidische Vektorräume + +== Skalarprodukt & Norm +Standard $\RR^n$: $chevron.l u, v chevron.r = u^T v = sum u_i v_i$. +- Norm: $||u|| = sqrt(chevron.l u\, u chevron.r)$. +- Winkel: $cos alpha = chevron.l u, v chevron.r / (||u|| dot ||v||)$. +- Orthogonal: $chevron.l u, v chevron.r = 0$. + +== Gram-Schmidt (ONB) +Aus Basis $v_1, ..., v_n$ mache Orthonormalbasis $b_1, ..., b_n$. +1. $u_1 = v_1$, dann $b_1 = u_1 / ||u_1||$. +2. $u_2 = v_2 - chevron.l v_2, b_1 chevron.r b_1$, dann $b_2 = u_2 / ||u_2||$. +3. $u_k = v_k - sum_(j=1)^(k-1) chevron.l v_k, b_j chevron.r b_j$. +4. $b_k = u_k / ||u_k||$. + +== Orthogonale Matrizen $Q$ +$Q^T Q = I$ ($Q^(-1) = Q^T$). Spalten bilden ONB. +Längentreu ($||Q x|| = ||x||$) und winkeltreu. +Determinante ist $\pm 1$. +*Drehmatrix (2D):* $mat(cos alpha, -sin alpha; sin alpha, cos alpha)$. +*Drehmatrix (3D):* Drehung um Achse $a$. Ein EW ist 1 (Achse). Spur ist $1 + 2 cos(alpha)$. + +#colbreak() + += Kodierungstheorie + +Lineare Codes $C subset RR^n$ (meist $\FF_2, \FF_3, \FF_5$). +Parameter $[n, k, d]$: Länge $n$, Dimension $k$, Minimaldistanz $d$. + +== Erzeugermatrix $G$ ($k times n$) +Zeilen bilden Basis von $C$. $G$ in Stufenform bringen um Dimension zu sehen. +Standardform: $G = (I_k | A)$. +Codierung: $x -> x G$. + +== Prüfmatrix $H$ ($(n-k) times n$) +Es gilt: $G H^T = 0$. +Wenn $G = (I_k | A)$, dann $H = (-A^T | I_(n-k))$. +(Im Binären ist $-A = A$, also $H = (A^T | I_(n-k))$). +Code ist Kern von $H$: $c in C <=> H c^T = 0$. + +== Minimaldistanz & Fehler +- *Hamming-Gewicht* $w(x)$: Anzahl Einträge $!= 0$. +- *Minimaldistanz* $d_(min) = min \{w(c) | c in C, c != 0\}$. +- $d_(min)$ ist auch das minimale Gewicht der Spalten von $H$, die linear abhängig sind (oft die kleinste Anzahl linear abh. Spalten). +#alertbox[ + *Erkennung:* $d-1$ Fehler erkennbar. + *Korrektur:* $e = floor((d-1)/2)$ Fehler korrigierbar. + ($d=3 => 1$ Fehler, $d=5 => 2$ Fehler) +] + +== Dekodierung (Syndrom) +Empfangenes Wort $r = c + e$ (Code + Fehler). +1. Berechne *Syndrom* $S = H r^T$. +2. Wenn $S = 0 =>$ kein Fehler. +3. Wenn $S != 0$: Suche Spalte in $H$, die Vielfaches von $S$ ist. + - Position der Spalte = Position des Fehlers. + - Wert des Fehlers aus Faktor bestimmen. + +#colbreak() + += Algebraische Strukturen + +#defbox[Gruppen $(G, dot)$][ + Assoziativ, Neutrales $e$, Inverses $a^(-1)$. + - *Abelsch:* + Kommutativ. + - *Zyklisch:* Ein Erzeuger $g$ generiert ganze Gruppe ($g^k$). $\ZZ_n$ ist zyklisch (Erzeuger 1). + - *Ordnung:* $|G|$ Anzahl Elemente. Satz von Lagrange: $|U|$ teilt $|G|$. +] +*Untergruppen:* Teilmenge, abgeschlossen bzgl. Op. und Inverse. +*Isomorphie:* $\ZZ_(n m) tilde.eq \ZZ_n times \ZZ_m$ gdw. $ggT(n,m)=1$. + +#defbox[Körper $(K, +, dot)$][ + $(K, +)$ abelsche Grp, $(K without \{0\}, dot)$ abelsche Grp, Distributiv. + Beispiele: $\RR, \QQ, \CC, \ZZ_p$ ($p$ prim). + $\ZZ_n$ ist kein Körper wenn $n$ nicht prim (Nullteiler!). +] +*Polynomring $K[x]$:* Division mit Rest möglich. + += Diverses & Tipps +- *LGS lösen:* Immer Gauß. Nie Cramer (zu langsam). +- *Komplexe Zahlen:* $i^2 = -1$. $z = a+b i$. $overline{z} = a-b i$. $|z|^2 = z overline{z} = a^2+b^2$. Polarkoordinaten $r e^(i phi)$. +- *Nilpotent:* $A^k = 0$. Einziger EW ist 0. Spur ist 0. Nicht invertierbar. +- *Äquivalenzrelation:* Reflexiv ($x tilde x$), Symmetrisch ($x tilde y => y tilde x$), Transitiv ($x tilde y, y tilde z => x tilde z$). Äquivalenzklassen bilden Partition. +- *Injektiv:* Kern = $\{0\}$. *Surjektiv:* Bild = Zielraum.