From 1573913f3fc186170e97220f1c9544a2e62969ef Mon Sep 17 00:00:00 2001 From: alexander Date: Sat, 31 Jan 2026 19:17:45 +0100 Subject: [PATCH 1/6] Added verschaltung --- src/cheatsheets/Digitaltechnik.typ | 7 +- src/cheatsheets/Schaltungstheorie.typ | 69 +++++++- src/lib/circuit.typ | 2 +- src/lib/common_rewrite.typ | 13 +- src/lib/fetModel.typ | 242 ++++++++++++++++++++++++++ 5 files changed, 318 insertions(+), 15 deletions(-) create mode 100644 src/lib/fetModel.typ diff --git a/src/cheatsheets/Digitaltechnik.typ b/src/cheatsheets/Digitaltechnik.typ index 688e720..8958d3e 100644 --- a/src/cheatsheets/Digitaltechnik.typ +++ b/src/cheatsheets/Digitaltechnik.typ @@ -1,8 +1,10 @@ -#import "../lib/common_rewrite.typ" : * #import "@preview/mannot:0.3.1" #import "@preview/cetz:0.4.2" #import "@preview/zap:0.5.0" + +#import "../lib/common_rewrite.typ" : * #import "../lib/truthtable.typ" : * +#import "../lib/fetModel.typ" : * #show math.integral: it => math.limits(math.integral) #show math.sum: it => math.limits(math.sum) @@ -565,10 +567,7 @@ (cycle_start,signal_hight), (cycle_time*(t_setup + 2), signal_hight), (cycle_time*(t_setup + 2) + switch_offset, 0), (cycle_end + switch_offset, 0), stroke: signal_storke ) - - }) - ] diff --git a/src/cheatsheets/Schaltungstheorie.typ b/src/cheatsheets/Schaltungstheorie.typ index 186cc16..cd5a139 100644 --- a/src/cheatsheets/Schaltungstheorie.typ +++ b/src/cheatsheets/Schaltungstheorie.typ @@ -108,7 +108,63 @@ #bgBlock(fill: colorAllgemein)[ #subHeading(fill: colorAllgemein)[Verschaltung] + $1/x_"ges" = 1/x_1 + 1/x_2 + 1/x_3 + ...$ + $x_1 parallel x_2 = 1/(1/x_1 + 1/x_2) = (x_1 x_2)/(x_1 + x_2)$ + + $x_1 parallel x_2 parallel x_3 = (x_1 x_2 x_3)/(x_1 x_2 + x_2 x_3 + x_1 x_3)$ + + #table( + columns: (1fr, 1fr), + fill: (x, y) => if calc.rem(x, 2) == 1 { tableFillLow } else { tableFillHigh }, + + [*Serie*], + [*Reihe/Parrallel*], + + + align( + horizon+center, + scale(100%, + zap.circuit({ + import zap : * + + resistor("R1", (0,0.375), (1.5,0.375), fill: none, width: 1, height: 0.4) + resistor("R2", (1.5,0.375), (3,0.375), fill: none, width: 1, height: 0.4) + }) + ) + ), + align( + horizon+center, + scale( + 100%, + zap.circuit({ + import zap : * + + resistor("R1", (0,0), (2,0), fill: none, width: 1, height: 0.4) + resistor("R2", (0,0.75), (2,0.75), fill: none, width: 1, height: 0.4) + wire("R1.in", "R2.in") + wire("R1.out", "R2.out") + + node("N2", (0,0.375)) + node("N3", (2,0.375)) + + wire("N2", (rel: (-0.3, 0))) + wire("N3", (rel: (0.3, 0))) + }), + ) + ), + + + + $R_"ges" = R_1+R_2$, + $R_"ges" = R_1 parallel R_2$, + $G_"ges" = G_1 parallel G_2$, + $G_"ges" = G_1 + G_2$, + $L_"ges" = L_1 + L_2$, + $L_"ges" = L_1 parallel L_2$, + $C_"ges" = C_1 parallel C_2$, + $C_"ges" = C_1 + C_2$, + ) ] // Quell Wandlung @@ -133,8 +189,6 @@ ) ] - #colbreak() - // Quell Wandlung #bgBlock(fill: colorEineTore)[ #subHeading(fill: colorEineTore)[Quelle Wandlung] @@ -785,13 +839,14 @@ *Levi's Lustig Leistung* - $underline(S) = underline(U) dot underline(I)^*$\ + $(P =) space underline(S) = underline(U) dot underline(I)^*$\ #table( columns: (auto, 1fr, auto), - [Scheinleitsung], [$abs(underline(S))$], [$["VA"]$], - [Wirkleistung], [$P = "Real"(underline(S)) $], [$["W"]$], - [Blindleistung], [$Q = "Imag"(underline(S))$], [$["var"]$] + fill: (x, y) => if calc.rem(y, 2) == 0 { tableFillLow } else { tableFillHigh }, + [Scheinleitsung], [$(P_s =) space abs(underline(S))$], [$["VA"]$], + [Wirkleistung], [$(P_w =) space P = "Real"(underline(S)) $], [$["W"]$], + [Blindleistung], [$(P_b =) space Q = "Imag"(underline(S))$], [$["var"]$] ) ] @@ -829,6 +884,8 @@ columns: (auto, auto, auto, auto), inset: 2mm, align: horizon, + fill: (x, y) => if calc.rem(y, 2) == 1 { rgb("#c5c5c5") } else { white }, + table.header([], [*Ein-Tor*], [*Zwei-Tor*], [*Reaktive Elemente*]), [*passiv*\ (nimmt Energie auf)\ $not$aktiv], [$forall (u,i) in cal(F): u dot i >= 0$], diff --git a/src/lib/circuit.typ b/src/lib/circuit.typ index f09b286..c5efbb3 100644 --- a/src/lib/circuit.typ +++ b/src/lib/circuit.typ @@ -13,7 +13,7 @@ ctx.zap.style.insert("einTor", ( scale: auto, - fill: auto, + fill: none, height: 3mm, width: 6mm, )) diff --git a/src/lib/common_rewrite.typ b/src/lib/common_rewrite.typ index 8272635..e19e38f 100644 --- a/src/lib/common_rewrite.typ +++ b/src/lib/common_rewrite.typ @@ -27,6 +27,9 @@ align(left, block(e)) } +#let tableFillHigh = white +#let tableFillLow = color.lighten(gray, 30%) + #let sinTable = [ #let data = json("../sintable.json") #table( @@ -34,10 +37,11 @@ rows: data.keys().len(), stroke: none, table.hline(stroke: (thickness: 0.3mm)), - fill: (x, y) => if (calc.rem(y, 2) == 0) { color.lighten(gray, 50%) } else { white }, + fill: (x, y) => if (calc.rem(y, 2) == 0) { tableFillLow } else { tableFillHigh }, - ..for (label) in data.keys() { - ([*#eval(label, mode: "math")*], ) + table.vline(), + ..for (i, label) in data.keys().enumerate() { + ([*#eval(label, mode: "math")*], if i > 0 { table.vline() } else { table.vline(stroke: none) }) }, table.hline(stroke: (thickness: 0.3mm)), @@ -46,6 +50,7 @@ for (col) in data.keys() { (eval(data.at(col).at(i), mode: "math"),) } - } + }, + table.hline(stroke: (thickness: 0.3mm)), ) ] \ No newline at end of file diff --git a/src/lib/fetModel.typ b/src/lib/fetModel.typ new file mode 100644 index 0000000..6661e0d --- /dev/null +++ b/src/lib/fetModel.typ @@ -0,0 +1,242 @@ +#import "@preview/zap:0.5.0" + +#set page(width: auto, height: auto) + +#let FetModelSubstrate = zap.circuit({ + import zap: * + import cetz.draw: * + + rect( + (0, 0), + (12, 4), + fill: rgb("#ffb1b1"), + name: "p", + ) + rect((0, -0.05), (12, -0.05), stroke: 3pt, name: "substrate") + earth("g1", (11.5, 0)) + + content("substrate", [Bulk], anchor: "north", padding: 0.2) +}) + +#let FetModel1 = zap.circuit({ + import zap: * + import cetz.draw: * + + rect( + (0, 0), + (12, 4), + fill: rgb("#ffb1b1"), + name: "p", + ) + rect((0, -0.05), (12, -0.05), stroke: 3pt, name: "substrate") + earth("g1", (11.5, 0)) + + rect((2.75, 3), (5.25, 4), fill: rgb("#61ff9f"), name: "kanal1", radius: ( + south: 0.2, + )) + rect((6.75, 3), (9.25, 4), fill: rgb("#61ff9f"), name: "kanal2", radius: ( + south: 0.2, + )) + + content("kanal1", [n+], anchor: "center", padding: 0.2) + content("kanal2", [n+], anchor: "center", padding: 0.2) + content("substrate", [Bulk], anchor: "north", padding: 0.2) +}) + +#let FetModel2 = zap.circuit({ + import zap: * + import cetz.draw: * + + rect( + (0, 0), + (12, 4), + fill: rgb("#ffb1b1"), + name: "p", + ) + rect((0, -0.05), (12, -0.05), stroke: 3pt, name: "substrate") + earth("g1", (11.5, 0)) + + rect((2.75, 3), (5.25, 4), fill: rgb("#61ff9f"), name: "kanal1", radius: ( + south: 0.2, + )) + rect((6.75, 3), (9.25, 4), fill: rgb("#61ff9f"), name: "kanal2", radius: ( + south: 0.2, + )) + + content("kanal1", [n+], anchor: "center", padding: 0.2) + content("kanal2", [n+], anchor: "center", padding: 0.2) + content("substrate", [Bulk], anchor: "north", padding: 0.2) + + + rect((0, 4), (12, 4.5), fill: rgb("#fffc61"), name: "isolator") + content("isolator.west", [Isolator ($"SiO"_2$)], anchor: "west", padding: .2) +}) + +#let FetModel3 = zap.circuit({ + import zap: * + import cetz.draw: * + + rect( + (0, 0), + (12, 4), + fill: rgb("#ffb1b1"), + name: "p", + ) + rect((0, -0.05), (12, -0.05), stroke: 3pt, name: "substrate") + earth("g1", (11.5, 0)) + + rect((2.75, 3), (5.25, 4), fill: rgb("#61ff9f"), name: "kanal1", radius: ( + south: 0.2, + )) + rect((6.75, 3), (9.25, 4), fill: rgb("#61ff9f"), name: "kanal2", radius: ( + south: 0.2, + )) + + content("kanal1", [n+], anchor: "center", padding: 0.2) + content("kanal2", [n+], anchor: "center", padding: 0.2) + content("substrate", [Bulk], anchor: "north", padding: 0.2) + + + rect((0, 4), (3, 4.5), fill: rgb("#fffc61"), name: "isolator2") + rect((5, 4), (7, 4.5), fill: rgb("#fffc61")) + rect((9, 4), (12, 4.5), fill: rgb("#fffc61"), name: "isolator") + + rect((3, 4), (5, 4.25), fill: gray) + rect((7, 4), (9, 4.25), fill: gray) + rect((5.1, 4.5), (6.9, 4.75), fill: gray) + + content("isolator", [$"SiO"_2$]) + content("isolator2", [Isolator]) +}) + +#let FetModel(type: "N", s: 100%) = zap.circuit({ + import zap: * + import cetz.draw: rect, content + + cetz.draw.scale(s) + + let pTypeFill = rgb("#ffb1b1"); + let pTypeFill = rgb("#ffb1b1"); + let nTypeFill = rgb("#61ff9f") + + rect( + (0, 0), + (12, 4), + fill: if(type == "N") { pTypeFill } else { nTypeFill }, + name: "p", + ) + rect((0, -0.05), (12, -0.05), stroke: 3pt, name: "substrate") + earth("g1", (11.5, 0)) + + wire((13, 5.5), (13, 0), mark: (end: ">")) + node("n-r1", (13, 5.75)) + + wire((6, 4.5), (6, 5.75)) + node("n-g1", (6, 5.75)) + wire("n-g1", "n-r1") + + node("n-s1", (4, 5)) + wire("n-s1", (4, 4.25)) + + node("n-d1", (8, 5)) + wire("n-d1", (8, 4.25)) + + rect((0, 4), (3, 4.5), fill: rgb("#fffc61"), name: "isolator2") + rect((5, 4), (7, 4.5), fill: rgb("#fffc61")) + rect((9, 4), (12, 4.5), fill: rgb("#fffc61"), name: "isolator") + + rect((3, 4), (5, 4.25), fill: gray) + rect((7, 4), (9, 4.25), fill: gray) + rect((5.1, 4.5), (6.9, 4.75), fill: gray) + + content("n-g1", [*G*\ate], anchor: "south", padding: 0.2, auto-scale: true) + content("n-s1", [*S*\ource], anchor: "south", padding: 0.2) + content("n-d1", [*D*\rain], anchor: "south", padding: 0.2, auto-scale: true) + content("substrate", [Bulk], anchor: "north", padding: 0.2, auto-scale: true) + content("p", if type == "N" [p] else [n], auto-scale: true) + content("isolator", [$"SiO"_2$], auto-scale: true) + + content("isolator2", [Isolator], auto-scale: true) + + rect((2.75, 3), (5.25, 4), fill: if(type == "N") { nTypeFill } else { pTypeFill }, name: "kanal1", radius: ( + south: 0.2, + )) + rect((6.75, 3), (9.25, 4), fill: if(type == "N") { nTypeFill } else { pTypeFill }, name: "kanal2", radius: ( + south: 0.2, + )) + + content("kanal1", if type == "N" [n+] else [p+], anchor: "center", padding: 0.2, auto-scale: true) + content("kanal2", if type == "N" [n+] else [p+], anchor: "center", padding: 0.2, auto-scale: true) +}) + +#let FetModelConducting = zap.circuit({ + import zap: * + import cetz.draw: * + + rect( + (0, 0), + (12, 4), + fill: rgb("#ffb1b1"), + name: "p", + ) + rect((0, -0.05), (12, -0.05), stroke: 3pt, name: "substrate") + earth("g1", (11.5, 0)) + + wire((13, 5.5), (13, 0), mark: (end: ">")) + node("n-r1", (13, 5.75)) + + wire((6, 4.5), (6, 5.75)) + node("n-g1", (6, 5.75)) + wire("n-g1", "n-r1") + + node("n-s1", (4, 5)) + wire("n-s1", (4, 4.25)) + + node("n-d1", (8, 5)) + wire("n-d1", (8, 4.25)) + + rect((0, 4), (3, 4.5), fill: rgb("#fffc61"), name: "isolator2") + rect((5, 4), (7, 4.5), fill: rgb("#fffc61")) + rect((9, 4), (12, 4.5), fill: rgb("#fffc61"), name: "isolator") + + rect((3, 4), (5, 4.25), fill: gray) + rect((7, 4), (9, 4.25), fill: gray) + rect((5.1, 4.5), (6.9, 4.75), fill: gray) + + content("n-g1", [*G*\ate], anchor: "south", padding: 0.2) + content("n-s1", [*S*\ource], anchor: "south", padding: 0.2) + content("n-d1", [*D*\rain], anchor: "south", padding: 0.2) + content("substrate", [Bulk], anchor: "north", padding: 0.2) + content("p", [p]) + content("isolator", [$"SiO"_2$]) + content("isolator2", [Isolator]) + + rect((2.75, 3), (5.25, 4), fill: rgb("#61ff9f"), name: "kanal1", radius: ( + south: 0.2, + )) + rect((6.75, 3), (9.25, 4), fill: rgb("#61ff9f"), name: "kanal2", radius: ( + south: 0.2, + )) + rect((5.20, 3.99), (6.8, 3.9), fill: rgb("#61ff9f"), stroke: none) + + content("kanal1", [n+], anchor: "center", padding: 0.2) + content("kanal2", [n+], anchor: "center", padding: 0.2) + + rect((0.5, -1), (1, -0.70), fill: gray, stroke: none, name: "metal") + content("metal", [metal], anchor: "west", padding: 0.3) + + rect((0.5, -1.2), (1, -1.5), fill: rgb("#61ff9f"), stroke: none, name: "n") + content("n", [n+], anchor: "west", padding: 0.3) + + rect( + (2.5, -1), + (3, -0.7), + fill: rgb("#ffb1b1"), + stroke: none, + name: "p-substrate", + ) + content("p-substrate", [p], anchor: "west", padding: 0.3) + + rect((2.5, -1.2), (3, -1.5), fill: rgb("#fffc61"), stroke: none, name: "siO2") + content("siO2", [oxide], anchor: "west", padding: 0.3) +}) From d7703597bbdf3d9e1df2b6c65fac2afebe4ffecf Mon Sep 17 00:00:00 2001 From: alexander Date: Sun, 1 Feb 2026 11:49:45 +0100 Subject: [PATCH 2/6] Added Qullen Plot --- src/cheatsheets/Schaltungstheorie.typ | 141 ++++++++++++++++++++++++-- src/lib/common_rewrite.typ | 2 +- src/lib/fetModel.typ | 48 +++++++++ 3 files changed, 181 insertions(+), 10 deletions(-) diff --git a/src/cheatsheets/Schaltungstheorie.typ b/src/cheatsheets/Schaltungstheorie.typ index cd5a139..a4460f5 100644 --- a/src/cheatsheets/Schaltungstheorie.typ +++ b/src/cheatsheets/Schaltungstheorie.typ @@ -1,9 +1,11 @@ -#import "../lib/common_rewrite.typ" : * #import "@preview/mannot:0.3.1" #import "@preview/zap:0.5.0" #import "@preview/cetz:0.4.2" -#import "../lib/circuit.typ" : * #import "@preview/unify:0.7.1": num,qty,unit +#import "@preview/cetz-plot:0.1.3" + +#import "../lib/common_rewrite.typ" : * +#import "../lib/circuit.typ" : * #set math.mat(delim: "[") #show math.equation.where(block: true): it => math.inline(it) @@ -164,6 +166,13 @@ $L_"ges" = L_1 parallel L_2$, $C_"ges" = C_1 parallel C_2$, $C_"ges" = C_1 + C_2$, + + $U_"ges" = U_1 + U_2$, + $U_"ges" = U_1 = U_2$, + $I_"ges" = I_1 = I_2$, + $I_"ges" = I_1 + I_2$, + [In $U$-Richtung Addieren], + [In $I$-Richtung Addieren], ) ] @@ -189,6 +198,108 @@ ) ] + // Lineare Quelle + #bgBlock(fill: colorEineTore)[ + #subHeading(fill: colorEineTore)[Lineare Quelle] + + #align( + center+horizon, + cetz.canvas({ + import cetz.draw: * + import cetz-plot: * + plot.plot(size: (3, 3), name: "plot", + axis-style: "school-book", + x-label: "u", y-label: "i", + x-tick-step: none, y-tick-step: none, + axes: ("u", "i"), + x-min: -1, x-max: 2, x-grid: "both", + y-min: -2, y-max: 1, y-grid: "both", { + plot.add(((-2, -3), (3,2))) + plot.add-anchor("u0", (1,0)) + plot.add-anchor("i0", (0,-1)) + }) + + content("plot.u0", $U_0$, anchor: "south", padding: .2) + content("plot.i0", $-I_0$, anchor: "east", padding: .2) + + mark("plot.u0", 0deg, symbol: "+", fill: black) + mark("plot.i0", 0deg, symbol: "+", fill: black) + + line("plot.i0", (horizontal: "plot.u0", vertical: "plot.i0"), "plot.u0", stroke: (dash: "dashed", paint: rgb("#005c00"))) + + content((horizontal: "plot.u0", vertical: "plot.i0"), anchor: "south-west", text(rgb("#005c00"))[$R$], padding: 0.1) + }) + ) + + $U_0$: LL-Spannung ($i = 0 => u = U_0$) \ + $I_0$: KS-Strom ($u = 0 => i = -I_0$) + + $R_i$: Innenwiderstand $R_i = U_0/I_0$ + + #table( + columns: (1fr, 1fr), + fill: (x, y) => if calc.rem(x, 2) == 1 { tableFillLow } else { tableFillHigh }, + inset: 3mm, + align(center, [*$u$-gesteuert*]), + align(center, [*$i$-gesteuert*]), + + align( + horizon+center, + zap.circuit({ + import zap : * + import cetz.draw + + zap.resistor("R1", (1, 0), (1, -1.5), fill: none, width: 0.8, height: 0.3) + zap.isource("I0", (0, 0), (0, -1.5), fill: none, scale: 0.6, i: (content: $-I_0$, distance: 6pt, label-distance: -11pt, anchor: "west", invert: true)) + node("N0", "R1.in") + node("N0", "R1.out") + + wire("I0.out", "R1.out", (rel: (0.5, 0))) + wire("I0.in", "R1.in") + wire("R1.in", (rel: (0.5, 0)), i: (content: $i$, invert: true)) + + cetz.draw.content((0.62, -0.75), [$R$]) + cetz.draw.set-style(mark: (end: ">", fill: black, scale: 0.6)) + cetz.draw.content((1.7, -0.75), [$u$]) + cetz.draw.line((1.5, -0.1), (1.5, -1.4), stroke: 0.5pt) + }) + ), + align( + horizon+center, + zap.circuit({ + import zap : * + import cetz.draw + + zap.vsource("U0", (0, 0), (0, -1.5), fill: none, scale: 0.6, u: (content: $U_0$, distance: -4pt, label-distance: -8pt, anchor: "south-west", invert: true)) + zap.resistor("R1", (0, 0), (1.75, 0), fill: none, width: 0.8, height: 0.3, + i: (content: $i$, invert: true, distance: 0.3) + ) + wire((0, -1.5), (1.75, -1.5)) + + cetz.draw.content((0.62, -0.75), [$R$]) + cetz.draw.set-style(mark: (end: ">", fill: black, scale: 0.6)) + cetz.draw.content((1.95, -0.75), [$u$]) + cetz.draw.line((1.75, -0.1), (1.75, -1.4), stroke: 0.5pt) + }) + ), + + [ + $u = R_i i + u_0$ \ + + ], + [ + $i = 1/R_i u - I_0$ + ], + + table.cell(colspan: 2)[ + #align($-->$) + ], + table.cell(colspan: 2)[ + $<--$ + ], + ) + ] + // Quell Wandlung #bgBlock(fill: colorEineTore)[ #subHeading(fill: colorEineTore)[Quelle Wandlung] @@ -245,14 +356,14 @@ $R_i=1/G_i$ - $r(i) = R_i i + U_0$ + $u = r(i) = R_i i + U_0$ ], [ $I_0 = U_0 G_i$ $G_i=1/R_i$ - $g(u) = G_i u + I_0$ + $i = g(u) = G_i u + I_0$ ] ); ] @@ -786,12 +897,16 @@ $E_L = Phi^2/2L = (L i^2)/2$ ], [ - $C$: Admetanz $hat(=) G$ + $C$: Admittanz $hat(=) G$ ], [], [ $L$: Impedanz $hat(=) R$ ] ) + + Admittanz: $Y = I/U$\ + Impedanz: $Z = U/I$ + ] // Reaktive Dual Wandlung @@ -836,18 +951,26 @@ U_"ges"^2 = U_1^2 + 2 U_1 U_2 + U_2^2 \ tan(phi) = (U_2 sin(phi))/(U_1 + U_2 cos(phi)) $ + ] - *Levi's Lustig Leistung* + #bgBlock(fill: colorComplexAC)[ + #subHeading(fill: colorComplexAC)[*Levi's Lustig Leistung*] - $(P =) space underline(S) = underline(U) dot underline(I)^*$\ + $P = 1/2 U dot I^*$\ #table( columns: (auto, 1fr, auto), fill: (x, y) => if calc.rem(y, 2) == 0 { tableFillLow } else { tableFillHigh }, [Scheinleitsung], [$(P_s =) space abs(underline(S))$], [$["VA"]$], - [Wirkleistung], [$(P_w =) space P = "Real"(underline(S)) $], [$["W"]$], - [Blindleistung], [$(P_b =) space Q = "Imag"(underline(S))$], [$["var"]$] + [Wirkleistung], [$(P_w =) space P = "Re"{} $], [$["W"]$], + [Blindleistung], [$(P_b =) space Q = "Im"{}$], [$["var"]$] ) + + Bei Wiederstand: $R$ + + $P_w = U_m^2 / 2R = (I_m^2 R)/2$ + + $U_"eff" = U_m/sqrt(2), I_"eff" = I_m / sqrt(2)$ ] // Komplexe Zahlen diff --git a/src/lib/common_rewrite.typ b/src/lib/common_rewrite.typ index e19e38f..71d53be 100644 --- a/src/lib/common_rewrite.typ +++ b/src/lib/common_rewrite.typ @@ -28,7 +28,7 @@ } #let tableFillHigh = white -#let tableFillLow = color.lighten(gray, 30%) +#let tableFillLow = color.lighten(gray, 50%) #let sinTable = [ #let data = json("../sintable.json") diff --git a/src/lib/fetModel.typ b/src/lib/fetModel.typ index 6661e0d..8639b6a 100644 --- a/src/lib/fetModel.typ +++ b/src/lib/fetModel.typ @@ -1,4 +1,6 @@ #import "@preview/zap:0.5.0" +#import "@preview/cetz-plot:0.1.3" + #set page(width: auto, height: auto) @@ -240,3 +242,49 @@ rect((2.5, -1.2), (3, -1.5), fill: rgb("#fffc61"), stroke: none, name: "siO2") content("siO2", [oxide], anchor: "west", padding: 0.3) }) + +#let FetPlot() = { + let u_gs = 1 + let beta = 1 + + cetz.canvas({ + import cetz-plot: plot + import cetz: draw.content + + cetz.draw.set-style(axes: ( + shared-zero: false, + overshoot: 0.2, + x: (mark: (end: ">", fill: black, scale: 0.6)), + y: (mark: (end: ">", fill: black, scale: 0.6)), + )) + + plot.plot( + size: (2, 2), + name: "plot", + axis-style: "school-book", + x-min: 0, + x-tick-step: none, + y-tick-step: none, + x-label: $U_"GS"$, + y-label: $U_"DS"$, + { + plot.add-fill-between(domain: (1, 6), ((1, 0), (1, 5)), u_gs => u_gs - u_t) + + plot.add(domain: (0, 5), fill: true, axes: ("y", "x"), _ => 1) + + plot.add(domain: (1, 6), fill: true, u_gs => u_gs - u_t) + + plot.add-anchor("I", (0.5, 2.5)) + plot.add-anchor("II", (4.5, 1.5)) + plot.add-anchor("III", (2.5, 3.5)) + + plot.add-anchor("ut", (u_t, 0)) + } + ) + content("plot.ut", $U_t$, anchor: "north", padding: 0.1) + + content("plot.I", [I]) + content("plot.II", [II]) + content("plot.III", [III]) + }) +} \ No newline at end of file From 72e31ef355c56c4c426410fe767f8b0af305f76a Mon Sep 17 00:00:00 2001 From: alexander Date: Sun, 1 Feb 2026 23:56:11 +0100 Subject: [PATCH 3/6] Added alot of linAlg --- src/cheatsheets/Analysis1.typ | 3 +- src/cheatsheets/LinearAlgebra.typ | 328 ++++++++++++++++++-------- src/cheatsheets/Schaltungstheorie.typ | 8 +- src/lib/common_rewrite.typ | 15 ++ 4 files changed, 247 insertions(+), 107 deletions(-) diff --git a/src/cheatsheets/Analysis1.typ b/src/cheatsheets/Analysis1.typ index 8a899f2..f742bb5 100644 --- a/src/cheatsheets/Analysis1.typ +++ b/src/cheatsheets/Analysis1.typ @@ -106,9 +106,8 @@ // Complex Zahlen #bgBlock(fill: colorAllgemein)[ #subHeading(fill: colorAllgemein)[Complexe Zahlen] - $z = r dot e^(phi i) = r (cos(phi) + i sin(phi))$ - $z^n = r^n dot e^(phi i dot n) = r^n (cos(n phi) + i sin(n phi))$ + #ComplexNumbersSection() #grid( columns: (1fr, 1fr), diff --git a/src/cheatsheets/LinearAlgebra.typ b/src/cheatsheets/LinearAlgebra.typ index 4b047dc..ee46336 100644 --- a/src/cheatsheets/LinearAlgebra.typ +++ b/src/cheatsheets/LinearAlgebra.typ @@ -1,5 +1,8 @@ #import "@preview/biceps:0.0.1" : * #import "@preview/mannot:0.3.1" +#import "@preview/fletcher:0.5.8" +#import "@preview/cetz:0.4.2" + #import "../lib/styles.typ" : * #import "../lib/common_rewrite.typ" : * @@ -23,11 +26,22 @@ )) #let colorAllgemein = color.hsl(105.13deg, 92.13%, 75.1%) +#let colorMatrixVerfahren = color.hsl(330.19deg, 100%, 68.43%) #let colorMatrix = color.hsl(202.05deg, 92.13%, 75.1%) -#let colorReihen = color.hsl(280deg, 92.13%, 75.1%) +#let colorVR = color.hsl(280deg, 92.13%, 75.1%) #let colorAbbildungen = color.hsl(356.92deg, 92.13%, 75.1%) #let colorGruppen = color.hsl(34.87deg, 92.13%, 75.1%) +// Math macors +#let kern(x) = $op("kern")(#x)$ +#let alg(x) = $op("alg")(#x)$ +#let geo(x) = $op("geo")(#x)$ +#let spann(x) = $op("spann")(#x)$ +#let Bild(x) = $op("Bild")(#x)$ +#let Rang(x) = $op("Rang")(#x)$ +#let Eig(x) = $op("Eig")(#x)$ + +#let ip(x, y) = $lr(angle.l #x, #y angle.r)$ #let SeperatorLine = line(length: 100%, stroke: (paint: black, thickness: 0.3mm)) #let MathAlignLeft(e) = { @@ -35,11 +49,19 @@ } #columns(4, gutter: 2mm)[ #bgBlock(fill: colorAllgemein)[ - #subHeading(fill: colorAllgemein)[Notation] + #subHeading(fill: colorAllgemein)[Algemein] ] + #bgBlock(fill: colorAllgemein)[ + #subHeading(fill: colorAllgemein)[Komplexe Zahlen] + + #ComplexNumbersSection() + + #sinTable + ] + #bgBlock(fill: colorGruppen)[ #subHeading(fill: colorGruppen)[Gruppen] @@ -75,8 +97,6 @@ - $(R, dot)$ Halbgruppe - $(a + b) dot c = (a dot c) + (a dot b) space$ (Distributiv Gesetz) - #colbreak() - *Körper:* Menge $K$ mit: - $(K, +), (K without {0} , dot)$ kommutativ Gruppe \ ($0$ ist Neutrales Element von $+$) @@ -84,8 +104,8 @@ _Beweiß durch Überprüfung der Eigneschaften_ ] - #bgBlock(fill: colorReihen)[ - #subHeading(fill: colorReihen)[Vektorräume (VR)] + #bgBlock(fill: colorVR)[ + #subHeading(fill: colorVR)[Vektorräume (VR)] $(V, plus.o, dot.o)$ ist ein über Körper $K$ - $+: V times V -> V, (v,w) -> v + w$ - $dot: K times V -> V, (lambda,v) -> lambda v$ @@ -102,8 +122,8 @@ - $(U inter W) subset V$ ] - #bgBlock(fill: colorReihen)[ - #subHeading(fill: colorReihen)[Basis und Dim] + #bgBlock(fill: colorVR)[ + #subHeading(fill: colorVR)[Basis und Dim] *Linear Abbildung:* $Phi: V -> V$ - $Phi(0) = 0$ - $Phi(lambda v + w) = lambda Phi(v) + Phi(w)$ @@ -154,6 +174,7 @@ *Vektorraum-Homomorphismus:* linear Abbildung zwischen VR ] + // Spann und Bild, Kern #bgBlock(fill: colorAbbildungen)[ #subHeading(fill: colorAbbildungen)[Spann und Bild] *Spann:* @@ -173,131 +194,242 @@ *Rang* $op("Rang") f := dim op("Bild") f$ + + *Dimensionssatz:* Sei $A$ lineare Abbildung \ + $dim(V) = dim(kern(A)) + dim(Bild(A))$ \ + $dim(V) = dim(kern(A)) + Rang(A)$ \ + + $dim(V) = dim(Bild(A)) "oder" dim(kern(A)) = 0 \ <=> A "bijektiv" <=> "invertierbar"$ ] + #bgBlock(fill: colorAbbildungen)[ + #subHeading(fill: colorAbbildungen)[Determinate und Bilinearform] + ] + + #bgBlock(fill: colorVR)[ + #subHeading(fill: colorVR)[Eukldische Vektorräume] + ] + + #bgBlock(fill: colorVR)[ + #subHeading(fill: colorVR)[Unitair Vektorräume ] + ] + + + // Matrix Typem #bgBlock(fill: colorMatrix)[ + #let colred(x) = text(fill: red, $#x$) + #let colblue(x) = text(fill: blue, $#x$) + #subHeading(fill: colorMatrix)[Matrix Typen] + #align(center, scale($colred(m "Zeilen") colblue(n "Splate")\ A in KK^(colred(m) times colblue(n))$, 120%)) #grid(columns: (1fr, 1fr), + $quad mat( + a_11, a_12, ..., a_(1n); + a_21, a_22, ..., a_(2n); + dots.v, dots.v, dots.down, dots.v; + a_(m 1), a_(m 2), ..., a_(m n) + ) + $, + + cetz.canvas({ + import cetz.draw : * - *Einheits Matrix* $I,E$ + rect((0, 0), (1, 1), fill: rgb("#9292926b")) - *Diagonalmatrix* + set-style(mark: (end: (symbol: "straight"))) + line((0, -0.2), (1, -0.2), stroke: (paint: blue, thickness: 0.3mm)) + line((-0.2, 1), (-0.2, 0), stroke: (paint: red, thickness: 0.3mm)) - *Symetrisch* $S$: \ - $A A^T$ ist symetrisch - - *Orthogonal* $O$: + content((-0.45, 0.5), $colred(bold(m))$) + content((0.5, -0.35), $colblue(bold(n))$) + content((0.5, 0.5), $A$) + }) + ) - *Unitair:* + #table( + columns: (auto, 1fr), + inset: 2mm, + fill: (x, y) => if (calc.rem(y, 2) == 0) { tableFillLow } else { tableFillHigh }, + [*Einheits Matrix*\ $I,E$], [], + [*Diagonalmatrix* \ $Sigma,D$], [ + Nur Einträger auf Hauptdiagonalen \ + $det(D) = d_00 dot d_11 dot d_22 dot ...$ + ], + [*Symetrisch*\ $S$], [ + $S = S^T$, $S in KK^(n times n)$\ + $A A^T$, $A^T A$ ist symetrisch \ + $S$ immer diagonaliserbar \ + EW immer $in RR$, EV orthogonal + ], + [*Invertierbar*], [ + $exists A^(-1) : A A^(-1) = A^(-1) A = E$ \ - *postiv-semi-definit* \ - $forall$ Eigenwerte $>= 0$ + *Invertierbar wenn:* \ + $A$ bijektiv, $det(A) = 0$ \ + $"Spalten Vekoren lin. unabhänig"$ \ + $det(A) = 0$ \ + + *Nicht Invertierbar wenn:*\ + $exists$ EW $!= 0 => not "invertierbar"$ + Keine Qudratische Matrix + ], + [*Orthogonal*\ $O$], [ + $O^T = O^(-1)$ \ + $ip(O v, O w) = ip(v, w)$ + ], + [*Unitair*], [ + + ], + [*Diagonaliserbar*], [ + $exists A = B D B^(-1)$, $D$ diagonal, + + $B$: Splaten sind EV von $A$ + + - Selbst-Adujunkte diagonalisierbar + - Symetrisch Matrix + - $A in KK^(n times n) "AND" alg(lambda) = geo(lambda)$ + ], + [*postiv-semi-definit*], [ + $forall$ EW $>= 0$ + ], + ) ] - #colbreak() + #bgBlock(fill: colorMatrixVerfahren)[ - #bgBlock(fill: colorMatrix)[ - - #subHeading(fill: colorMatrix)[Eigenwert und Eigenvektoren ] + #subHeading(fill: colorMatrixVerfahren)[Eigenwert und Eigenvektoren ] $A in CC^(n times n):$ $n$ Complexe Eigenwerte \ $A in RR^(n times n)$ - *Eigentwete bestimmen* + *1. Eigentwete bestimmen* - $A v = lambda v$ + $A v = lambda v => det(A-E lambda) = 0$ - Lösen: $0 = det mat(#mannot.markhl($x_11 - lambda_1$, color: red), x_12, ..., x_(1n); + $0 = det mat(#mannot.markhl($x_11 - lambda_1$, color: red), x_12, ..., x_(1n); x_21, #mannot.markhl($x_22 - lambda_2$, color: red), ..., x_(2n); dots.v, dots.v, dots.down, dots.v; x_(n 1), x_(n 2), ..., #mannot.markhl($x_(n n) -lambda_n$, color: red) )$ - Charakteristisches Polynom: $chi_(A)$ + $--> chi_A = (lambda_0 - lambda)^(n_0) dot (lambda_1 - lambda)^(n_1) ... $ - *Eigenvektor bestimmen* + $lambda_0, lambda_1, ... = $ Nst von $chi_A$ + + + *2. Eigenvektor bestimmen* - Eigentwerte einsetzen: $lambda in {lambda_1, lambda_2, ... lambda}$ + $Eig(lambda_k) = kern(A - lambda_k E)$ + + $mat(#mannot.markhl($x_11 - lambda_k$, color: red), x_12, ..., x_(1n); + x_21, #mannot.markhl($x_22 - lambda_k$, color: red), ..., x_(2n); + dots.v, dots.v, dots.down, dots.v; + x_(n 1), x_(n 2), ..., #mannot.markhl($x_(n n) -lambda_k$, color: red) + ) vec(v_1, v_2, dots.v, v_n) = vec(0, 0, dots.v, 0)$ - *Algebrasche Vielfacheit:* \ - $sum$ Häufikeit der Nsts von $chi_A$ - *Geometrische Vielfacheit:*\ - $dim(op("spann")(v_lambda_1, v_lambda_2 ..., v_lambda_n))$ \ + *Algebrasche Vielfacheit:* $alg(lambda) = n_0 + n_1 + ...$ \ + *Geometrische Vielfacheit:* $geo(lambda) = dim("Eig"_A (lambda))$ \ - Anzahl der linearunabhänige $v_lambda_i$ + $1 <= geo(lambda) <= alg(lambda)$ - $"Geometrische" <= "Algebrasche"$ + ] + + #bgBlock(fill: colorMatrixVerfahren)[ + #subHeading(fill: colorMatrixVerfahren)[Gram-Schmit ONB] + + + + ] + + #bgBlock(fill: colorMatrixVerfahren)[ + #subHeading(fill: colorMatrixVerfahren)[Diagonalisierung] + $A = R D R^(-1)$ + + #grid( + columns: (1fr, 1fr), + $D = mat( + lambda_1, 0, 0,...; + 0, lambda_1, 0, ...; + 0, 0, lambda_2, ...; + dots.v, dots.v, dots.v, dots.down + )$, + + $D^n = mat( + lambda_1^n, 0, 0,...; + 0, lambda_1^n, 0, ...; + 0, 0, lambda_2^n, ...; + dots.v, dots.v, dots.v, dots.down + )$ + ) \ + + *Rezept Diagonalisierung* + + 1. *EW* bestimmen + 2. $chi_A$ bestimmen und in $(lambda_0 - lambda)^(n_0) dot (lambda_1 - lambda)^(n_1) ...$ Form bringen \ + $chi_A$ nicht vollstandig zerfällt (in $RR$), $=>$ NICHT diagonalisierbar + 3. *EV* bestimmen + 4. $R = mat( bar, bar, ..; v_(lambda 0), v_(lambda 1), ...; bar, bar, ...)$ + 5. $R^(-1)$ bestimmen + ] + + + #bgBlock(fill: colorMatrixVerfahren)[ + #subHeading(fill: colorMatrixVerfahren)[Schur-Zerlegung] + immer anwendbar; + ] + + #bgBlock(fill: colorMatrixVerfahren)[ + #subHeading(fill: colorMatrixVerfahren)[SVD] + + $A in RR^(m times n)$ zerlegbar in $A = U Sigma V^T$ \ + + + $U in RR^(m times m)$ Orthogonal \ + $Sigma in RR^(m times n)$ Diagonal \ + $V in RR^(n times n)$ Orthogonal + + + 1. $A^T A$ berechnen $A^T A in RR^(k times k), k = min(n, m)$ + + 2. Eigenwerte bestimmen $det(A^T A - E lambda) = 0$ \ + $lambda_0, lambda_1 ... lambda_k$ nach Größe sortieren \ + Singulärewerte: $sigma_i = sqrt(lambda_i)$ + + 3. Eigenvekoren von $A^T A$ bestimmen und *Normalisieren* + $v_(lambda 0), v_(lambda 1), ... v_(lambda k)$ + + 4. $V = mat( |, |, ..., |; v_0, v_1, ..., v_n; |, |, ..., |) --> V^T$ \ + (Evt. zu ONB ergenze mit Gram-Schmit/Kreuzprodukt) + + 5. $u_i = 1/sigma_i A v_(lambda i) quad quad L = mat( |, |, ..., |; u_0, u_1, ..., u_m; |, |, ..., |)$ \ + (Evt. zu ONB ergenze mit Gram-Schmit/Kreuzprodukt) + + 6. $S in RR^(n times m)$ (wie $A$): + + $S = mat(sigma_0, 0; 0, sigma_1; dots.v, dots.v; 0, 0) quad quad quad S = mat(sigma_0, 0, dots, 0; 0, sigma_1, ..., 0)$ + ] + + #bgBlock(fill: colorMatrix)[ + #subHeading(fill: colorMatrix)[Matrix Normen] + ] + + #bgBlock(fill: colorMatrix)[ + #subHeading(fill: colorMatrix)[Rekursive Folgen] + + E.g: $a_1 x_(n-1) + a_2 x_(n) = x_(n+1)$ + + 1. Als Matrix Schreiben $F: vec(x_(n-1), x_(n)) = vec(x_n, x_(n+1))$ \ + $F s_(n-1) = s_(n)$ + + 2. Diagonaliseren: $F = R D R^(-1) $ \ + 3. Wiederholte Anwendung: $F^n = R D^n R^(-1)$ ] #bgBlock(fill: colorMatrix)[ - #subHeading(fill: colorMatrix)[Diagonalisierung] - - $A = R D R^T$ - - $D$: Diagonalmatrix + #subHeading(fill: colorMatrix)[Differenzialgleichungen] ] - - #bgBlock(fill: colorMatrix)[ - #subHeading(fill: colorMatrix)[Schur-Zerlegung] - immer anwendbar; - - $A in RR^(n times n)\/CC^(n times n)$ zerlegbar in $O^T R O$ - - Orthogonal $O,O^T$, Dreiecksmatrix $R$ - - $R = mat(lambda_1, *, *,..., *; - 0, lambda_2, *, ..., *; - 0, 0, lambda_3, ..., *; - dots.v, dots.v, dots.v, dots.down, dots.v; - 0, 0, 0, ..., lambda_n; - )$ - - 1. Eigenwerte bestimmen $lambda_1, lambda_2, ... lambda_n$ - 2. Eigenvektor $v_lambda_1, v_lambda_2 ..., v_lambda_n$ - 3. - ] - - #colbreak() - #bgBlock(fill: colorMatrix)[ - #subHeading(fill: colorMatrix)[SVD] - - $A in RR^(n times m)$ zerlegbar in $A = L S R^T$ \ - $L$ Orthogonal, $S$ Diagonalmatrix, $R$ Orthogonal \ - $A^T = R S^T L^T$ - - - *1. $A A^T$ berechnen* $A A^T in RR^(n times n) $ - - *2. Eigenwerte von $A A^T$ bestimmen* $lambda_1, lambda_2, ... lambda_n$ - - *3. $S$ aufstellen* ($S$ hat gleiche Form wie $A$) - - $sigma_i = sqrt(lambda_i) = S in RR^(n x m) =\ mat( - sigma_1, 0, 0, ..., 0, 0, ..., 0; - 0, sigma_2, 0, ..., 0, 0, ..., 0; - 0, 0, sigma_3, ..., 0, 0, ..., 0; - dots.v, dots.v, dots.v, dots.down, dots.v, dots.v, dots.down, dots.v; - 0, 0, 0, ..., sigma_m, 0, ... , 0 - )$ - - *4. $R$ bestimmen* - - $op("Eig")(lambda_i) = op("kern")(A A^T - lambda_i) ->$ - - $A A^T - lambda_i = 0$ (Gaußverfahren) - - $R = 1/sqrt(lambda_i)$ - - *5. $L$ bestimmen* - - $L = 1/sqrt(lambda_i) $ - ] - - - - ] diff --git a/src/cheatsheets/Schaltungstheorie.typ b/src/cheatsheets/Schaltungstheorie.typ index a4460f5..720899e 100644 --- a/src/cheatsheets/Schaltungstheorie.typ +++ b/src/cheatsheets/Schaltungstheorie.typ @@ -977,13 +977,7 @@ #bgBlock(fill: colorAllgemein)[ #subHeading(fill: colorAllgemein)[Komplexe Zahlen] - #grid( - columns: (auto, auto), - row-gutter: 2mm, - column-gutter: 3mm, - [Euler-Darstellung], $A e^(j phi)$, - [Catesiche-Darstellung], $a + b j$ - ) + #ComplexNumbersSection(i: $j$) ] diff --git a/src/lib/common_rewrite.typ b/src/lib/common_rewrite.typ index 71d53be..a501c8a 100644 --- a/src/lib/common_rewrite.typ +++ b/src/lib/common_rewrite.typ @@ -53,4 +53,19 @@ }, table.hline(stroke: (thickness: 0.3mm)), ) +] + +#let ComplexNumbersSection(i: $i$) = [ + $1/#i = #i^(-1) = -#i quad quad #i^2=-1 quad quad sqrt(#i) = 1/sqrt(2) + 1/sqrt(2)#i$ + + $z in CC = a + b #i quad quad quad z = r dot e^(phi #i)$ \ + $z_0 + z_1 = (a_0 + a_1) + (b_0 + b_1) #i$\ + $z_0 dot z_1 = (a_1 a_2 - b_1 b_2) + #i (a_1b_2 + a_2 b_1) = r_0 r_1 e^(#i (phi_0 + phi_1))$\ + $z^x = r^x dot e^(phi #i dot x) quad x in RR$ \ + $z_0/z_1 = r_0/r_1 e^(#i (phi_0 - phi_1)) quad quad quad$ + + $r = abs(z) quad phi = cases( + + arccos(a/r) space : space b >= 0, + - arccos(a/r) space : space b < 0, + )$ ] \ No newline at end of file From 446be9a38f1c5e4ff9c720ffcdc5f4f0e26dc00d Mon Sep 17 00:00:00 2001 From: alexander Date: Sun, 1 Feb 2026 23:56:42 +0100 Subject: [PATCH 4/6] removed allgemein from LinearAlgebra --- src/cheatsheets/LinearAlgebra.typ | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/cheatsheets/LinearAlgebra.typ b/src/cheatsheets/LinearAlgebra.typ index ee46336..dc9551f 100644 --- a/src/cheatsheets/LinearAlgebra.typ +++ b/src/cheatsheets/LinearAlgebra.typ @@ -48,12 +48,6 @@ align(left, block(e)) } #columns(4, gutter: 2mm)[ - #bgBlock(fill: colorAllgemein)[ - #subHeading(fill: colorAllgemein)[Algemein] - - - ] - #bgBlock(fill: colorAllgemein)[ #subHeading(fill: colorAllgemein)[Komplexe Zahlen] From d3e4df0a3ff0b6570134787f59b39374eb07bc3a Mon Sep 17 00:00:00 2001 From: alexander Date: Mon, 2 Feb 2026 07:34:12 +0100 Subject: [PATCH 5/6] Moved Math macros to seperte file --- src/cheatsheets/Analysis1.typ | 6 ++---- src/cheatsheets/LinearAlgebra.typ | 11 +---------- src/lib/mathExpressions.typ | 14 ++++++++++++++ 3 files changed, 17 insertions(+), 14 deletions(-) create mode 100644 src/lib/mathExpressions.typ diff --git a/src/cheatsheets/Analysis1.typ b/src/cheatsheets/Analysis1.typ index f742bb5..fc35741 100644 --- a/src/cheatsheets/Analysis1.typ +++ b/src/cheatsheets/Analysis1.typ @@ -1,9 +1,7 @@ -#import "../lib/common_rewrite.typ" : * #import "@preview/mannot:0.3.1" -#show math.integral: it => math.limits(math.integral) -#show math.sum: it => math.limits(math.sum) -#let lim = $limits("lim")$ +#import "../lib/common_rewrite.typ" : * +#import "../lib/mathExpressions.typ" : * #set text(7.5pt) diff --git a/src/cheatsheets/LinearAlgebra.typ b/src/cheatsheets/LinearAlgebra.typ index dc9551f..edf95a1 100644 --- a/src/cheatsheets/LinearAlgebra.typ +++ b/src/cheatsheets/LinearAlgebra.typ @@ -5,6 +5,7 @@ #import "../lib/styles.typ" : * #import "../lib/common_rewrite.typ" : * +#import "../lib/mathExpressions.typ" : * #set page( paper: "a4", @@ -32,16 +33,6 @@ #let colorAbbildungen = color.hsl(356.92deg, 92.13%, 75.1%) #let colorGruppen = color.hsl(34.87deg, 92.13%, 75.1%) -// Math macors -#let kern(x) = $op("kern")(#x)$ -#let alg(x) = $op("alg")(#x)$ -#let geo(x) = $op("geo")(#x)$ -#let spann(x) = $op("spann")(#x)$ -#let Bild(x) = $op("Bild")(#x)$ -#let Rang(x) = $op("Rang")(#x)$ -#let Eig(x) = $op("Eig")(#x)$ - -#let ip(x, y) = $lr(angle.l #x, #y angle.r)$ #let SeperatorLine = line(length: 100%, stroke: (paint: black, thickness: 0.3mm)) #let MathAlignLeft(e) = { diff --git a/src/lib/mathExpressions.typ b/src/lib/mathExpressions.typ new file mode 100644 index 0000000..848f623 --- /dev/null +++ b/src/lib/mathExpressions.typ @@ -0,0 +1,14 @@ +// Math macors +#let kern(x) = $op("kern")(#x)$ +#let alg(x) = $op("alg")(#x)$ +#let geo(x) = $op("geo")(#x)$ +#let spann(x) = $op("spann")(#x)$ +#let Bild(x) = $op("Bild")(#x)$ +#let Rang(x) = $op("Rang")(#x)$ +#let Eig(x) = $op("Eig")(#x)$ + +#let ip(x, y) = $lr(angle.l #x, #y angle.r)$ + +#show math.integral: it => math.limits(math.integral) +#show math.sum: it => math.limits(math.sum) +#let lim = $limits("lim")$ \ No newline at end of file From 68b599eea48b9010c6f67524f34b96c08e02939c Mon Sep 17 00:00:00 2001 From: alexander Date: Mon, 2 Feb 2026 12:40:23 +0100 Subject: [PATCH 6/6] Fixed complex --- src/cheatsheets/LinearAlgebra.typ | 18 +++++++++++++++++- src/lib/mathExpressions.typ | 5 ++--- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/cheatsheets/LinearAlgebra.typ b/src/cheatsheets/LinearAlgebra.typ index edf95a1..c98942c 100644 --- a/src/cheatsheets/LinearAlgebra.typ +++ b/src/cheatsheets/LinearAlgebra.typ @@ -262,7 +262,7 @@ $ip(O v, O w) = ip(v, w)$ ], [*Unitair*], [ - + $V^* )$ ], [*Diagonaliserbar*], [ $exists A = B D B^(-1)$, $D$ diagonal, @@ -398,6 +398,22 @@ #bgBlock(fill: colorMatrix)[ #subHeading(fill: colorMatrix)[Matrix Normen] + + $|| dot ||_M$ Matrix Norm, $|| dot ||_V$ Vektornorm + + Generisch Vektor Norm: $|| v ||_p = root(p, sum_(k=1)^n (x_k)^p)$ + + - submultiplikativ: $||A B||_"M" <= ||A||||B||$ + - verträglich mit einer Vektornorm: $||A v||_"V" <= ||A||_"M" ||v||_"V"$ + + *Frobenius-Norm* $||A||_"M" = sqrt(sum_(i=1)^m sum_(j=1)^n a_(m n)^2)$ + + *Induzierte Norm* $||A||_"M" = sup_(v in V without {0}) (||A v||_V)/(||v||_V)$\ + $ = sup_(||v|| = 1) (||A v||_V)/(||v||_V)$ + - submultiplikativ + - verträglich mit einer Vektornorm $||dot||_V$ + + *maximale Spaltensumme* $||A||_r = max_(1<= i <= n) sum_(j=1)^n |a_(j)|$ ] #bgBlock(fill: colorMatrix)[ diff --git a/src/lib/mathExpressions.typ b/src/lib/mathExpressions.typ index 848f623..5930fd7 100644 --- a/src/lib/mathExpressions.typ +++ b/src/lib/mathExpressions.typ @@ -6,9 +6,8 @@ #let Bild(x) = $op("Bild")(#x)$ #let Rang(x) = $op("Rang")(#x)$ #let Eig(x) = $op("Eig")(#x)$ - +#let lim = $limits("lim")$ #let ip(x, y) = $lr(angle.l #x, #y angle.r)$ #show math.integral: it => math.limits(math.integral) -#show math.sum: it => math.limits(math.sum) -#let lim = $limits("lim")$ \ No newline at end of file +#show math.sum: it => math.limits(math.sum) \ No newline at end of file