diff --git a/src/cheatsheets/Analysis1.typ b/src/cheatsheets/Analysis1.typ index fc35741..66d9d03 100644 --- a/src/cheatsheets/Analysis1.typ +++ b/src/cheatsheets/Analysis1.typ @@ -1,5 +1,6 @@ #import "@preview/mannot:0.3.1" +#import "../lib/ableitungs_tabelle.typ" : * #import "../lib/common_rewrite.typ" : * #import "../lib/mathExpressions.typ" : * @@ -75,30 +76,19 @@ *Binomische Formel*\ $(a + b)^n = sum^(n)_(k=0) binom(n,k) a^(n-k) b^k $ \ ], - [ - *Bekannte Werte* \ - $e approx 2.71828$ ($2 < e < 3$) \ - $pi approx 3.14159$ ($3 < pi < 4$) - ], + [ *Gaußklammer*: \ $floor(x) = text("floor")(x)$ \ $ceil(x) = text("ceil")(x)$ \ ], [ - *Fakultäten* $0! = 1! = 1$ \ ], - [ - *Mitternachtsformel* - $x_(1,2) = (-b plus.minus sqrt(b^2 + 4a c))/(2a)$ - ], - [ - *Binomische Formel*\ - $(a + b)^2 = a^2 + 2a b + b^2$\ - $(a - b)^2 = a^2 - 2a b + b^2$\ - $(a + b)(a - b) = a^2 - b^2$\ - ] ) + + $bold("Fakultäten") 0! = 1! = 1\ + e approx 2.71828 quad quad quad pi approx 3.14159 + $ ] // Complex Zahlen @@ -143,22 +133,17 @@ gutter: 2mm, columns: (auto, auto, auto), $cos^2(x) = (1 + cos(2x))/2$, - $sin^2(x) = (1 - cos(2x))/2$, - $cos(-x) = cos(x)$, - $sin(-x) = -sin(x)$, - grid.cell(colspan: 2, $cos^2(x) + sin^2(x) = 1$) + $sin^2(x) = (1 - cos(2x))/2$ ) - Subsitution mit Hilfsvariable + $tan(x)=sin(x)/cos(x) = -cot(x + pi/2)$ + + $cot(x)=cos(x)/sin(x)=-tan(x + pi/2)$ #grid( gutter: 5mm, row-gutter: 3mm, columns: (auto, auto), - [$tan(x)=sin(x)/cos(x)$], - [$cot(x)=cos(x)/sin(x)$], - [$tan(x)=-cot(x + pi/2)$], - [$cot(x)=-tan(x + pi/2)$], [$cos(x - pi/2) = sin(x)$], [$sin(x + pi/2) = cos(x)$], @@ -178,26 +163,17 @@ - Beweiße: durch Induktion - Beweiße: Hat min. ein konvergent Teilefolge - (Beweiße: Ungleichung $abs(a_n) <= k$) - - *Monoton fallend/steigended* + + *Monoton fallend/steigended $a_(n+1) lt.eq.gt a_(n)$* - Beweise: Induktion - #grid(columns: (1fr, 1fr), - inset: 0.2mm, - align(top+center, [*Fallend*]), align(top+center, [*Steigend*]), - [$ a_(n+1) <= a_(n), quad a_(n+1) >= a_(n) $], - [$ a_(n+1)/a_(n) < 1, quad a_(n+1)/a_(n) > 1 $], - ) *Konvergentz Allgemein* $lim_(n -> infinity) a_n = a$ $forall epsilon > 0 space exists n_epsilon in NN$ sodass \ - Konvergent $-> a$: $a_n in [a - epsilon, a + epsilon] $ - - Divergent $-> infinity$: $a_n in [epsilon, infinity) $ - - Divergent $-> infinity$: $a_n in (-infinity, epsilon) $ - - $space forall n > n_epsilon$ - + - unbeschränkt $=>$ Divergent + *Konvergentz Häufungspunkte* - $a_n -> a <=>$ Alle Teilfolgen $-> a$ @@ -376,13 +352,13 @@ *Reihendarstellungen* #grid( - columns: (1fr, 1fr), + columns: (1fr), gutter: 3mm, row-gutter: 3mm, - $e^x = limits(sum)_(n=0)^infinity (x^n)/(n!)$, - $ln(x) = limits(sum)_(n=0)^infinity (-1)^n x^(n+1)$, - $sin(x) = limits(sum)_(n=0)^infinity (-1)^n (z^(2n+1))/((2n + 1)!)$, - $cos(x) = limits(sum)_(n=0)^infinity (-1)^n (z^(2n))/((2n)!)$ + $e^x = limits(sum)_(n=0)^m (x^n)/(n!) + O(x^(m+1))$, + $ln(x) = limits(sum)_(n=0)^m (-1)^n x^(n+1) + O(x^(m+1))$, + $sin(x) = limits(sum)_(n=0)^m (-1)^n (z^(2n+1))/((2n + 1)!) + O(x^(2m + 3))$, + $cos(x) = limits(sum)_(n=0)^m (-1)^n (z^(2n))/((2n)!) + O(x^(2m + 2))$ ) ] @@ -396,7 +372,7 @@ $f(x) = f(y) <=> x = y quad$ *Surjectiv (Epimorhismis):* Output space coverered \ - - $forall x in B : exists x in A : f(x) = y$ + - $forall y in B : exists x in A : f(x) = y$ *Bijektiv* @@ -445,7 +421,7 @@ *Allgemein* $f(x)$ ist stetig wenn: \ - $ limits(lim)_(x->x_0-) f(x) = limits(lim)_(x->x_0+) f(x) = f(x_0) $ \ + $limits(lim)_(x->x_0-) f(x) = limits(lim)_(x->x_0+) f(x) = f(x_0)$ \ $x in DD$ Beachten! Definitionslücken $!=$ unstätig \ Definition gilt auch für $I subset RR$ @@ -486,10 +462,9 @@ #subHeading(fill: colorAbleitung)[Ableitung] *Differenzierbarkeit* - $f(x)$ ist an der Stelle $x_0 in DD$ diffbar wenn \ - #MathAlignLeft($ f'(x_0) = lim_(x->x_0 plus.minus) (f(x_0 + h - f(x_0))/h) $) + $f'(x_0) = lim_(x->x_0^plus.minus) (f(x_0 + h) - f(x_0))/h$ - Tangente an $x_0$: $f(x_0) + f'(x_0)(x - x_0)$ - Beste #underline([linear]) Annäherung - - Tangente $t(x)$ von $f(x)$ an der Stelle $x_0$: $ lim_(x->0) (f(x) - f(x_0))/(x-x_0) -f'(x_0) =0 $ *Ableitung Regeln* @@ -519,47 +494,7 @@ // Ableitungstabelle #block([ #set text(size: 7pt) - #table( - align: horizon, - columns: (auto, auto, auto), - table.header([*$F(x)$*], [*$f(x)$*], [*$f'(x)$*]), - row-gutter: 1mm, - inset: 1.4mm, - fill: (x, y) => if calc.rem(x, 3) == 0 { color.hsl(180deg, 89.47%, 88.82%) } - else if calc.rem(x, 3) == 1 { color.hsl(180deg, 100%, 93.14%) } else - { color.hsl(180deg, 81.82%, 95.69%) }, - [$1/(q + x) x^(q+1)$], [$x^q$], [$q x^(q-1)$], - [$ln abs(x)$], [$1/x$], [$-1/x^2$], - [$x ln(a x) - x$], [$ln(a x)$], [$a / x$], - [$2/3 sqrt(a x^3)$], [$sqrt(a x)$], [$a/(2 sqrt(a x))$], - [$e^x$], [$e^x$], [$e^x$], - [$a^x/ln(a)$], [$a^x$], [$a^x ln(a)$], - $-cos(x)$, $sin(x)$, $cos(x)$, - $sin(x)$, $cos(x)$, $-sin(x)$, - $-ln abs(cos(x))$, $tan(x)$, $1/(cos(x)^2)$, - $ln abs(sin(x))$, $cot(x)$, $-1/(sin(x)^2)$, - - [$x arcsin(x) + sqrt(1 - x^2)$], - [$arcsin(x)$], [$1/sqrt(1 - x^2)$], - - [$x arccos(x) - sqrt(1 - x^2)$], - [$arccos(x)$], [$-1/sqrt(1 - x^2)$], - - [$x arctan(x) - 1/2 ln abs(1 + x^2)$], - [$arctan(x)$], [$1/(1 + x^2)$], - - [$x op("arccot")(x) + 1/2 ln abs(1 + x^2)$], - [$op("arccot")(x)$], [$-1/(1 + x^2)$], - - [$x op("arsinH")(x) + sqrt(1 + x^2)$], - [$op("arsinH")(x)$], [$1/sqrt(1 + x^2)$], - - [$x op("arcosH")(x) + sqrt(1 + x^2)$], - [$op("arcosH")(x)$], [$1/sqrt(x^2-1)$], - - [$x op("artanH")(x) + 1/2 ln(1 - x^2)$], - [$op("artanH")(x)$], [$1/(1 - x^2)$], - ) + #ableitungsTabelle ]) // Extremstellen, Krümmung, Monotonie @@ -634,7 +569,7 @@ #bgBlock(fill: colorIntegral, [ #subHeading(fill: colorIntegral, [Integral]) - Wenn $f(x)$ stetig und monoton $=>$ integrierbar + Wenn $f(x)$ stetig oder monoton $=>$ integrierbar Summen: $integral f(x) + g(x) d x = integral f(x) d x + integral g(x)$ @@ -652,12 +587,32 @@ *Subsitution* - $integral_(x_0)^(x_1) f\(underbrace(g(x), "t")\) dot g'(x) d x$ + $integral_(x_0)^(x_1) f\(underbrace(g(x), "t")\) d x = integral_g(x_0)^g(x_1) f(t) dot <1/(g'(x)) d t$ + + 1. Ersetzung: $t := g(x)$ 2. Umformen: - $(d y)/(d x) = g'(x)$ - 3. $x$-kürzen sich weg + $(d t)/(d x) = g'(x)$ + + *Weierstrass Subsitution/Brechstange* \ + Subsitution: $t = tan(x/2)$ + + #grid( + columns: (1fr, 1fr), + row-gutter: 2.8mm, + $d x = 2/(1+t^2) d t$, + $sin(x) = 2t / (1 + t^2)$, + $tan(x) = (2t)/(1-t^2)$, + $cos(x) = (1-t^2) / (1 + t^2)$, + ) + + *Tricks aus der Schule* + + $integral f(a x+b) d x = 1/a F(a x + b) +c \ + integral (f'(x))/f(x) d x = ln abs(f(x)) \ + integral f'(x) e^(f(x)) d x = e^(f(x)) +c \ + $ ]) #bgBlock(fill: colorIntegral, [ @@ -692,11 +647,10 @@ *Subsitution* - $integral_(x_0)^(x_1) f\(underbrace(g(x), "t")\) dot 1/(g'(x)) d x$ + $integral_(x_0)^(x_1) f\(underbrace(g(x), "t")\) dot 1/(g'(x)) d t$ - 1. Ersetzung: $ d x := d t dot g'(x)$ und $t := g(x)$ + 1. Ersetzung: $ d x := 1/g'(x) dot d t$ und $t := g(x)$ 2. Grenzen: $t_0 = g(x_0)$, $t_1 = g(x_1)$ - 3. $x$-kürzen sich weg *Absolute "Konvergenz"* \ Wenn $g(x)$ konvergent, @@ -719,22 +673,27 @@ 5. $A,B,...$ : Nst einsetzen, dann Koeffizientenvergleich 6. *Intergral wiederzusammen setzen $+c$* - 7. Summen teile Integrieren + 7. *Summen teile Integrieren* - $delta = 4a - b^2$ - #grid(columns: (auto, auto), - row-gutter: 2mm, + $integral 1/(x-a) d x = ln(x - a) + c\ + integral 1/(x-a)^n d x = - 1/(n-1) 1/(x - a)^(n-1) + c quad "für" n >= 2 \ + integral 1/((x - a)^2 + b^2) d x = 1/b arctan((x - a)/b) + c quad "für" n > 0\ + integral (x - a)/((x-a)^a + b^2) d x = 1/2 ln((x-a)^2 + b^2) + c \ + $ + + #grid( + columns: (1fr), column-gutter: 2mm, - $integral 1/(x - x_0)$, $ln abs(x - x_0)$, - $integral 1/((x - x_0)^n)$, $-1/((n-1)(x-x_0)^(n-1))$, - $integral 1/(x^2 + b x + c)$, $2/sqrt(delta) arctan((2x + b)/sqrt(delta))$, - $integral 1/((x^2 + b x + c)^n)$, $(2x + b)/((n-1)(sigma)(x^2+b x +c)^(n-1)) + \ - (2(2n-3))/((n-1)(delta)) + (C ) - $, + row-gutter: 4mm, + $integral 1/x d x = ln abs(x) +c$, + $integral 1/x^2 d x = - 1/x + c$, + $integral 1/(a + x) d x = ln abs(a + x) + c$, + $integral 1/(a + x)^2 d x = - 1/(a + x) + c$, + $integral 1/(a - x) d x = - ln abs(a - x) + c$, + $integral 1/(a - x)^2 d x = 1/(a - x) + c$ ) - ]) #bgBlock(fill: colorAllgemein, [ @@ -742,6 +701,8 @@ #sinTable ]) + /* + // Notwending und Hinreichend #bgBlock(fill: colorAllgemein, [ #subHeading(fill: colorAllgemein)[Notwending und Hinreiched] @@ -757,4 +718,62 @@ $not "hin." arrow.r.double.not "Satz"$, ) ]) + */ + + // Taylor Reihen + #bgBlock(fill: colorAbleitung)[ + #subHeading(fill: colorAbleitung)[Taylorreihe] + + $T_m (x_0;x) = sum^m_(k=0) (f^((k))(x_0))/(k!) (x-x_0)^k$ + + $f(x) = T_m (x_0;x) + R_(m+1)(x_0;x)$ + + *Restglied* \ + $I = (a,b) quad x_0,x in I$ + + $R_(m+1) (x) = 1/(m!) integral_(x_0)^x (x-t)^m f^((m+1))(t) d t$ \ + + $forall x in I space space exists xi_x in I "sodass" \ + R_(m+1)(x_0;x) = (f^((m+1))(xi_x))/((m + 1)!) (x - x_0)^(m+1)\ + = f(x_0 + h) - T_m (x_0; x_0 + h) = o(h^m) = O(h^(m+1))$ + ] + + // Lamdauer Notation + #bgBlock(fill: colorFolgen, [ + #subHeading(fill: colorFolgen)[Landau Notation] + + $f(x) = o(g(x)) "wenn" lim_(x->a) f(x)/g(x) = 0 \ + f(x) = O(g(x)) "wenn" abs(f(x)) <= abs(g(g))$ + + *Rechen Regelen* \ + - $f = o(g) => f = O(g)$ + - $f_1 + f_2 = O\/o(f_1) + O\/o(f_2)$ + - $f_1 dot f_2 = O\/o(f_1 dot f_2)$ + + + ]) + + // Kurven + #bgBlock(fill: colorAbleitung)[ + #subHeading(fill: colorAbleitung)[Kurven] + + Länge einer Kurve $k(t)$: $L(k) = integral_a^b norm(k'(t)) d t$ + + Umparametrisierung: $h(tau)$ *streng monoton steigended* \ + $h(tau): [a,b] -> [overline(a), overline(b)]$ + + $overline(k): [overline(a), overline(b)] -> R^n, quad overline(k) = k(h(tau))$ + + Parametriesierung nach Länge: \ + $s(t) = integral_a^t norm(k'(tau)) d tau quad overline(k)(tau) = k(s^(-1)(tau))$ + + Wenn $k$ nach Länge param.: $T(t) =k'(t)$ + + Tangentenvektor: $T(t) = (k'(t))/norm(k'(t))$ \ + Krümmung: $kappa(t) = 1/(s'(t)) norm(T'(t))$ + + + $RR^2: kappa(t) = abs(x'(t)y''(t) - y'(t)x''(t))/((x'(t)^2 + y'(r)^2)^(3/2))$ \ + Param Länge: $kappa(t) = abs(x'(t)y''(t) - y'(t)x''(t))$ + ] ] diff --git a/src/cheatsheets/CT.typ b/src/cheatsheets/CT.typ index ef4e18c..9e57927 100644 --- a/src/cheatsheets/CT.typ +++ b/src/cheatsheets/CT.typ @@ -1,5 +1,6 @@ #import "../lib/styles.typ" : * #import "../lib/common_rewrite.typ" : * +#import "../lib/bit_fields.typ" : * #import "@preview/cetz:0.4.2" #set page( @@ -24,8 +25,8 @@ #let Allgemein = color.hsl(105.13deg, 92.13%, 75.1%) #let colorProgramming = color.hsl(330.19deg, 100%, 68.43%) #let colorNumberSystems = color.hsl(202.05deg, 92.13%, 75.1%) -// #let colorVR = color.hsl(280deg, 92.13%, 75.1%) -// #let colorAbbildungen = color.hsl(356.92deg, 92.13%, 75.1%) +#let colorMMIX = color.hsl(280deg, 92.13%, 75.1%) +#let colorRandomShit = color.hsl(356.92deg, 92.13%, 75.1%) // #let colorGruppen = color.hsl(34.87deg, 92.13%, 75.1%) @@ -48,7 +49,98 @@ ] #bgBlock(fill: colorNumberSystems)[ - #subHeading(fill: colorNumberSystems)[Einer-Kompilment, Zweier-Kompliment, Float (IEEE 754)] + #subHeading(fill: colorNumberSystems)[Fixed Point] + + #table( + columns: 17, + fill: (x, y) => if calc.rem(x, 2) == 1 { tableFillLow } else { tableFillHigh }, + + .. for i in range(0,17) { + ([$2^#i$],) + }, + .. for i in range(0,17) { + ($#calc.pow(2,i)$,) + } + ) + + #columns(2, [ + *Vorzeichen und Betrag:* + + #grid( + columns: (2fr, 1fr), + [ + $x = (-1)^"sign-bit" dot "Betrag"$ + + $0 -> "positiv", 1 -> "negativ"$ + + Range: \ $(-2^(n-1) - 1) dot 2^r$ bis $(2^(n-1) - 1) dot 2^r$ + + Achtung: $plus.minus 0$ + ], + image("../images/ct/betragUndVorzeich.png", width: 2cm) + ) + + #line(length: 100%, stroke: (thickness: 0.2mm)) + + *Einer-Komplement* + + #grid( + columns: (2fr, 1fr), + [ + $x = (-1)^"sign-bit" dot "Betrag"$ + + $0 -> "positiv normaler Betrag"$ + + $1 -> "negativ INVERT. Betrag"$ + + Range: \ + $(-2^(n-1) - 1) dot 2^r$ bis $(2^(n-1) - 1) dot 2^r$ + + Achtung: $plus.minus 0$ + ], + image("../images/ct/einerKomplement.png", width: 2cm) + ) + #colbreak() + + *Zweier-Komplement* + + #grid( + columns: (2fr, 1fr), + [ + $x = (-1)^"sign-bit" dot "Betrag"$ + + $0 -> "positiv"$ + + $1 -> "negativ"$ + + Range: \ $(-2^(n-1)) dot 2^r$ bis $(2^(n-1) - 1) dot 2^r$ + + Positiv: Normal Binär Kodierung + + Negativ: #raw("Invertiert(Binär) + 1") + + ], + image("../images/ct/zweierKomplement.png", width: 2cm) + ) + + #line(length: 100%, stroke: (thickness: 0.2mm)) + + *Radix / Fixed Point* + + $r = 0$ Normal Falle, nix änder sich + + $r > 0$ : Komma nach Rechts und Nullen auffüllen \ + Bsp. $r = 3 quad ->$ #raw("xxxxxxx000.") + + $r < 0$ : Komma nach Links verschieben \ + Bsp: $r = -4 quad ->$ #raw("xxxxx.xxxx") + + ]) + ] + + #colbreak() + #bgBlock(fill: colorNumberSystems)[ + #subHeading(fill: colorNumberSystems)[Float (IEEE 754)] *Float (IEEE 754)* @@ -133,11 +225,46 @@ content((cell_size*(total_bits), -0.2), anchor: "south", raw(str(0)), angle: 90deg) }) + + $x = (-1)^"sign" dot #raw("1.[mantisse]") dot 2^(("exponent" - k))$ + + #grid( + columns: (auto, auto), + column-gutter: 5mm, + row-gutter: 2mm, + $"float32"&, k = 127 &= #raw(" 111 1111") "(7 x Einser)" \ + "float64"&, k = 1023 &= #raw("11 1111 1111") "(10 x Einser)"$ + ) + + *Spezial Cases* + #table( + columns: (auto, auto), + [$0$], [exponent = 0 \ mantisse = 0], + [$plus.minus infinity$], [exponent = alle 1 \ mantisse = 0], + [NaN], [exponent = alle 1 \ mantisse > 0], + [denormalisierte Float], [exponent = 0 \ mantisse > 0], + [normalisierter Float], [0 < exponent < 255/2047] + ) ] #bgBlock(fill: colorProgramming)[ #subHeading(fill: colorProgramming)[C] + #table( + columns: (auto, auto, auto), + fill: (x, y) => if calc.rem(y, 2) == 0 { tableFillLow } else { tableFillHigh }, + + [*C-Type*], [*min size*], [*typ. size*], + raw("char"), raw("1 byte"), raw("1 byte"), + raw("short (int)"), raw("2 byte"), raw("2 byte"), + raw("int"), raw("2 byte"), raw("4 byte"), + raw("long (int)"), raw("4 byte"), raw("8 byte"), + raw("long long"), raw("4 byte"), raw("8 byte"), + raw("float"), raw("4 byte"), raw("4 byte"), + raw("double"), raw("8 byte"), raw("8 byte"), + + ) + #table( columns: (auto, 1fr), fill: white, @@ -151,4 +278,166 @@ ] ) ] + + #bgBlock(fill: colorProgramming)[ + #subHeading(fill: colorProgramming)[#raw("scanf/printf") Format Specifier] + + #columns(2)[ + *printf* + #table( + columns: (auto, auto), + fill: (x, y) => if calc.rem(y, 2) == 0 { tableFillLow } else { tableFillHigh }, + raw("%s"), [*String*], + raw("%d"), [*Decimal: #raw("int/short/long"))*], + raw("%f"), [*Float*], + raw("%f"), [*Float*], + raw("%lf"), [*Double*], + raw("%x"), [* Hexdecimal #raw("int/short/long")*], + ) + + Allgemeiner Syntax: #raw("%[flags][width][.precision]type") + + Flags: + - #raw("0") Prepend With left aligned + - #raw("-") Left-aligned + + #table(columns: (auto, auto), + fill: (x, y) => if calc.rem(y, 2) == 0 { tableFillLow } else { tableFillHigh }, + raw("\\n"), [New Line], + raw("\\t"), [Tab], + raw("\\0"), [Null Terminator], + raw("\\\\"), [#raw("\\")], + raw("\\\""), [#raw("\"")], + ) + + #colbreak() + + *scanf* + #table( + columns: (auto, auto), + fill: (x, y) => if calc.rem(y, 2) == 0 { tableFillLow } else { tableFillHigh }, + raw("%[size of String]s"), [*String* \ Size of String (without the #raw("\\0")) \ Terminates with Whitespace], + raw("%i"), [*#raw("int")*], + raw("%f"), [*#raw("float")*], + raw("%lf"), [*#raw("double")*], + raw("%x"), [*#raw("int")* als Hexadezimal], + raw("%c"), [*#raw("char")* ], + ) + + #raw("fgets(char * s, int count, stdin)") + ] + ] + + #bgBlock(fill: colorMMIX)[ + #subHeading(fill: colorMMIX)[MMIX] + - $32$ Speziel Register + - $256$ Allzwickregister + - $2^64$ Speicher + + Wort: $64$ Bit + + *Calling Convensions* + + #cetz.canvas({ + import cetz.draw : * + + let cellHeight = 0.4 + let cellWidth = 2 + + let c(y, c, x: 0, number: "") = { + rect((x, cellHeight*y), (x + cellWidth, cellHeight*(y+1)), fill: white) + content((x+ cellWidth/2, cellHeight*(y+0.5)), c) + content((x - 0.2, cellHeight*(y+0.5)), number, anchor: "mid-east") + } + + c(0, "3.Param", number: raw("0x3FFFFFFFFFFFFFF8")) + c(1, "2.Param", number: raw("0x3FFFFFFFFFFFFFF0")) + c(2, "1.Param", number: raw("0x3FFFFFFFFFFFFFE8")) + c(3, "Sicherung $1", number: raw("0x3FFFFFFFFFFFFFE0")) + c(4, "Sicherung $2", number: raw("0x3FFFFFFFFFFFFFD8")) + + c(0, "Rückgabe wert", x: cellWidth) + }) + + #colbreak() + +#text(rgb("#1a00aa"))[ +*1. (Aufrufer) Parameter auf Stack ablegen*\ +#raw("SUB :SP,:SP,n*8 +STO $x0,:SP,0*8 +STO $x1,:SP,1*8 +... +STO $xn,:SP,n*8") + +*2. (Aufrufer) Funktions Aufruf*\ +#raw("GO $0,:Fkt") +] + +#text(rgb("#aa0000"))[ +*3. (Funktion) Sicherung der Register*\ +#raw("SUB :SP,:SP,n*8 +STO $y0,:SP,0*8 +STO $y1,:SP,1*8 +... +STO $yn,:SP,n*8") + +*4. (Funktion) Funktions Code*\ + +*5. (Funktion) Schreiben des Rückgabewerts*\ +#raw(" +STO $r,:SP,m*8 +") + +*6. (Funktion) Wiederherstellung der Register*\ +#raw("LDO $x0,:SP, 0*8 + k +LDO $x1,:SP, 1*8 + k +... +LDO $xn,:SP, n*8 + k +") + +*7. (Funktion) Rücksprung*\ +] + +#text(rgb("#1a00aa"))[ +*8. (Aufrufer) Lesen des Rückgabewerts*\ + + +] +] + + #bgBlock(fill: colorRandomShit)[ + #subHeading(fill: colorRandomShit)[Register Register Magista] + + *Zwei-Address-Maschine:* $quad X <-- X dot.o Y$, Parameter: $(X,Y)$ \ + *Drei-Address-Maschine:* $quad X <-- Y dot.o Z$, Parameter: $(X,Y,Z)$ \ + *Ein-Address-Maschine:* $quad "ACC" <-- X$, Parameter: $(X)$ + + *Register-Speicher-Architekture:* \ + Operanden können Register und Addressen sein + + *Register-Register-Archiektur/Load-Store-Architektur* \ + Operanden nur Register. Extra Befehle fürs Laden aus Speicher + + + *CISC*: Complex Instruction Set Architecture + - Eine Befehl kann viel $->$ Wenige Befehle + - Befehlslänge Variable (meistens) + - z.B. x86 + + *RISC*: Reduced Instruction Set Architecture + - Eine Befehl kann wenig $->$ Viel Befehle + - Befehlslänge fix (meistens) + - z.B. Arm, RISC, MMIX + + *Universal Rechner* + + - M1: Ergebnis Qulle + - Input a,b,c oder ALU + - M2: ALU Operation + - M3,M4: Operanden + - R0-R7 + - D: Ergebnis Register + - R0-R7 + - K: Konstante für Operanden + ] ] \ No newline at end of file diff --git a/src/cheatsheets/LinearAlgebra.typ b/src/cheatsheets/LinearAlgebra.typ index 431d2f3..1c3ab02 100644 --- a/src/cheatsheets/LinearAlgebra.typ +++ b/src/cheatsheets/LinearAlgebra.typ @@ -141,7 +141,7 @@ *Surjectiv (Epimorhismis):* \ _Output space coverered_ \ - Zeigen das $f(f^(-1)(x)) = x$ für $x in DD$ - - $forall x in B: exists x in A : f(x) = y$ + - $forall y in B: exists x in A : f(x) = y$ NICHT surjektiv wenn $abs(a) < abs(b)$ *Bijektiv (Isomorphismus):* \ diff --git a/src/cheatsheets/Schaltungstheorie.typ b/src/cheatsheets/Schaltungstheorie.typ index 961a94c..1fd8f14 100644 --- a/src/cheatsheets/Schaltungstheorie.typ +++ b/src/cheatsheets/Schaltungstheorie.typ @@ -9,6 +9,7 @@ #import "../lib/schaltungstheorie/opampTable.typ": * #import "../lib/schaltungstheorie/tumCustomSymbols.typ" as tumSymbols +#import "../lib/ableitungs_tabelle.typ" : * #import "../lib/circuit.typ": * #import "../lib/common_rewrite.typ": * #import "../lib/circuit.typ": * @@ -54,16 +55,18 @@ [Schaltungstheorie], )) +#set text(8.5pt) + #columns(4, gutter: 2mm)[ + + // =============== Allgemein =============== // Allgemein #bgBlock(fill: colorAllgemein)[ #subHeading(fill: colorAllgemein)[Allgemeine] *Konzentriertheitshypotese*\ $lambda >> d quad quad lambda = c/f quad quad c approx 3.10dot 10^8 m/s$ - d: größe Bauteil Dimension - - f: Maximal Frequenze + #grid(columns: (1fr, 1fr), $d: "Schaltungs Dimension"$, $f: "Maximal Frequenze"$) *Kirchhoff* @@ -73,7 +76,7 @@ [ KCL: $sum_(k=1)^n i_k =0$ (Knotenregel) ], - [ + /*[ #cetz.canvas(length: 8mm, { import cetz.draw: * @@ -88,12 +91,12 @@ line((angle: 120deg, radius: 1.2), (angle: 120deg, radius: 0.4), stroke: red) line((angle: 240deg, radius: 1.2), (angle: 240deg, radius: 0.4), stroke: red) }) - ], + ],*/ [ KVL: $sum_(k=1)^n u_k =0$ (Maschenregel) ], - [ + /*[ #zap.circuit({ import zap: wire import cetz.draw: * @@ -113,15 +116,17 @@ translate((0, -2mm)) mark((angle: 0deg, radius: 4mm), 270deg, symbol: "straight", stroke: blue, scale: 0.75) }) - ], + ],*/ ) $u dot i > 0$: Nimmt Energie auf\ $u dot i = 0$: Verlustlos\ $u dot i < 0$: Gibt Energie ab\ + + #grid(columns: (1fr, 1fr), $[R] = Omega = "V"/"A"$, $[G] = S = "A"/"V"$) ] - // Eintrag + // Verschaltung #bgBlock(fill: colorAllgemein)[ #subHeading(fill: colorAllgemein)[Verschaltung] @@ -178,10 +183,10 @@ ) ] - // Quell Wandlung + // Kennline Addition #bgBlock(fill: colorEineTore)[ - #subHeading(fill: colorEineTore)[Ein-Tor] - + #subHeading(fill: colorEineTore)[Kennline Addition] + /* #grid( columns: (auto, auto), column-gutter: 3mm, @@ -202,8 +207,109 @@ $i_(cal(F),2) = i_(cal(F),1)$ ], ) + */ + + #grid( + columns: (1fr, auto, 1fr), + row-gutter: 2mm, + column-gutter: 3mm, + [Parallel-Schaltung], $-->$, [$i$-Richtung], + [Reihe-Schaltung], $-->$, [$u$-Richtung], + ) + + Bei Idealer Diode: Ruhe Bewahren. \ + Sich vorstellen als hätte die Diode eine endlich Steigung! ] + #bgBlock(fill: colorAllgemein)[ + #subHeading(fill: colorAllgemein)[Spannungs Teiler/Strom Teiler] + + #table( + columns: (1fr, 1fr), + fill: (x, y) => if calc.rem(x, 2) == 1 { tableFillLow } else { tableFillHigh }, + [*Spannungsteiler*], + [*Stromteiler*], + zap.circuit({ + import zap : * + + node("N1", (0,1.5)) + node("N2", (0,0)) + node("N3", (0,-1.5)) + + resistor("R1", "N1", "N2", label: (content: $R_2$, distance: 0.1), scale: 0.7, fill: none) + resistor("R2", "N2", "N3", label: (content: $R_1$, distance: 0.1), scale: 0.7, fill: none) + + joham.voltage((-0.4, 0), (-0.4, -1.5), $u_"out"$) + joham.voltage((0.8, 1.5), (0.8, -1.5), $u_"ges"$, anchor: "west") + + wire((-0.6, 1.5),(0.8, 1.5)) + wire((-0.6, -1.5),(0.8, -1.5)) + wire((-0.6, 0),(0,0), i: (content: $i =0 unit("A")$, distance: 0.1, anchor: "north-west")) + }), + zap.circuit({ + import zap : * + + node("N1", (0,0)) + node("N2", (0,2)) + + resistor("R1", "N1", "N2", label: (content: $R_1$, distance: 0.1), scale: 0.7, fill: none, i: (content: $i_"out"$, anchor: "south", distance: 0.25, invert: true)) + resistor("R2", (1,0), (1,2), label: (content: $R_2$, distance: 0.1), scale: 0.7, fill: none) + + wire((-1, 0), "R2.in") + wire((-1, 2), "R2.out") + wire((-1, 2), "N2", i: (content: $i_"ges"$, distance: 0.1)) + + }), + $ u_"out" = R_1/(R_1 + R_2) $, $ i_"out" = R_2/(R_1 + R_2) i_"ges" $, + $ u_"out" = G_2/(G_1 + G_2) $, $ i_"out" = G_1/(G_1 + G_2) i_"ges" $, + [Muss unbelasted sein], [Nur wenn $u_R_1 = u_R_2$] + ) + ] + + // Dual Wandlung + #bgBlock(fill: colorAllgemein)[ + #subHeading(fill: colorAllgemein)[Dual Wandlung] + Stumpfe Ersetzung mit: + + #table( + columns: (1fr, 1fr), + fill: (x, y) => if calc.rem(y, 2) == 0 { tableFillHigh } else { tableFillLow }, + + $ u --> R_d i^d $, + $ i --> u^d / R_d $, + $ Phi --> R_d q^d $, + $ q --> Phi / R_d $, + + $ R --> G^d = R / R_d^2 $, + $ G --> R^d = R_d^2 G $, + + $C --> L^d = R_d^2 C$, + $L --> C^d = L / R_d^2$, + + $"KS" --> "LL"$, $"LL" -> "KS"$, + $"Nullator" --> "Nullator"$, $"Norator" -> "Norator"$, + + $"Parallel" --> "Seriell"$, + $"Seriell" --> "Parallel"$, + + $"U-quelle" --> "I-quelle"\ "(polung = const.)"$, + $"I-quelle" --> "U-quelle"\ "(polung = const.)"$, + + table.cell(colspan: 2)[ + *Dualwandlung: Steurende & Ausgangs Größe* + $ + "VCVS" &: u_"out" &= mu dot u_"in" &--> i_"out"^d = mu i_"in"^d\ + "VCCS" &: i_"out" &= g dot u_"in" &--> u_"out"^d = g R_d^2 dot i_"in"^d \ + "CCVS" &: u_"out" &= r dot i_"in" &--> i_"out"^d = r/R_d^2 dot u_"in"\ + "CCCS" &: i_"out" &= beta dot i_"in" &--> u_"out"^d = beta u_"in"^d\ + $ + ], + + table.cell(colspan: 2)[$ (u, i) in cal(F) --> (u_d, i_d) in cal(F) = (R_d i, 1/R_d u) $] + ) + ] + + #colbreak() // Lineare Quelle #bgBlock(fill: colorEineTore)[ #subHeading(fill: colorEineTore)[Lineare Quelle] @@ -262,39 +368,48 @@ $R_i$: Innenwiderstand $R_i = U_0/I_0$ + *Quell Wandlung* #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(center, [ + *$u$-gesteuert* \ + Mayer / Norton + ]), align(center, [ + *$i$-gesteuert* \ + Helmholz / Thévenin + ]), - align( - horizon + center, - zap.circuit({ - import zap: * - import cetz.draw + [ + #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") + 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)) + 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), [$G_i$]) - 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) - }), - ), + cetz.draw.content((0.62, -0.75), [$G_i$]) + 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({ @@ -315,7 +430,7 @@ )) wire((0, -1.5), (1.75, -1.5)) - cetz.draw.content((0.62, -0.75), [$R_i$]) + cetz.draw.content((0.9, -0.4), [$R_i$]) 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) @@ -330,506 +445,129 @@ $i = G_i u - I_0$ ], - align(center, text(size: 7mm, $-->$)), [$G_i = 1/R_i \ I_0 = U_0 G_i$], - [$R_i = 1/G_i \ U_0 = I_0 R_i$], align(center, text(size: 7mm, $<--$)), + table.cell(colspan: 2)[ + #align(center, [*$u"-gesteuert" --> i"-gestuert"$*]) + + $ R_i = 1/G_i quad quad quad U_0 = -I_0 1/G_i $ + ], + + table.cell(colspan: 2, fill: tableFillLow)[ + #align(center, [*$i"-gesteuert" --> u"-gestuert"$*]) + + #align(center, $G_i = 1/R_i quad quad quad I_0 = -U_0 1/R_i$) + ], ) + + - Bei Dualwandlung, einfach Ersetzung durchführen + + - Bei explizit: *Mayer-Norten*: $-I_0$ als $I_0$ schreiben und $-$ in die Variable reinziehen. + + *NICHT* die Pfeilrichtung ändern! ] - /*// Quell Wandlung + #colbreak() + // Linearsierung #bgBlock(fill: colorEineTore)[ - #subHeading(fill: colorEineTore)[Quelle Wandlung] + #subHeading(fill: colorEineTore)[Linearisierung (Ein-Tore)] - #grid( - columns: (1fr, 1fr), - align: center, - scale(x: 65%, y: 65%, - zap.circuit({ - import zap : * - import cetz.draw : line, content + 1. Arbeitspunkt bestimmen \ $"AP" =(u_"AP", i_"AP")$ - vsource("U0", (0, 1.5), (0, -1.5), fill: none) + 2. Ableitung $g_cal(F)(u)$/$r_cal(F)(i)$ bilden \ $g'_cal(F)(u)$/$r'_cal(F)(i)$ - node("n2", (3.5,1.5), fill: false) - node("n3", (3.5,-1.5), fill: false) + #line(length: 100%, stroke: (thickness: 0.2mm)) - resistor("R0", "U0.in", "n2", fill: none, label: (content: $R_i$, anchor: "south", distance: 0.1)) - wire("U0.out", "n3") + *Stromgesteuert* - wire((2.49,1.5), "n2", i: (content: $i$, anchor: "south", invert: true)) + *Groß-Signal* \ + #grid(columns: (1fr, 1fr), + column-gutter: 4mm, + $I_0 = i_"AP" - g'_cal(F)(u_"AP")u_"AP"$, + $g_0 = g'_cal(F)(u_"AP")u$ + ) - set-style(mark: (end: ">", fill: black)) - line((3.5, 1.2), (3.5, -1.2), stroke: 0.5pt) - content((3.9, 0), $u$) + #linebreak() - line((0.7, 0.5), (0.7, -0.5), stroke: 0.5pt) - content((1.7, 0), $U_0 = I_0 / G_i$) - })), - scale(x: 65%, y: 65%, - zap.circuit({ - import zap : * - import cetz.draw : line, content + $i_"lin" = g_"lin" (u) = g'_cal(F)(u_"AP")(u-u_"AP") + i_"AP"\ + i_"lin" = g_"lin" (u) = g_0 u + I_0$ + + #block( + height: 20mm, + scale(x: 75%, y: 75%, zap.circuit({ + import zap: * + import cetz.draw: content, line isource("I0", (0, 1.5), (0, -1.5), fill: none) - node("n0", (2,1.5)) - node("n1", (2,-1.5)) + node("n0", (2, 1.5)) + node("n1", (2, -1.5)) - node("n2", (3.5,1.5), fill: false) - node("n3", (3.5,-1.5), fill: false) + node("n2", (3.5, 1.5), fill: false) + node("n3", (3.5, -1.5), fill: false) - resistor("g0", "n1", "n0", fill: none, label: (content: $G_i$, anchor: "south", distance: 0.2)) + resistor("g0", "n1", "n0", fill: none, label: (content: $g_0$, anchor: "south", distance: 0.2)) wire("I0.in", "n0", "n2") wire("I0.out", "n1", "n3") - wire("n0", "n2", i: (content: $i$, anchor: "south", invert: true)) - wire((0,0.6), "I0.in", i: (content: $I_0 = U_0 / R_i$, anchor: "east", invert: false, distance: 0.2)) + wire("n0", "n2", i: (content: $i_"lin"$, anchor: "south", invert: true)) + wire((0, 0.6), "I0.in", i: (content: $I_0$, anchor: "east", invert: true)) set-style(mark: (end: ">", fill: black)) line((3.5, 1.2), (3.5, -1.2), stroke: 0.5pt) content((3.9, 0), $u$) })), - [ - $U_0 = I_0 R_i$ - - $R_i=1/G_i$ - - $u = r(i) = R_i i + U_0$ - ], - [ - $I_0 = U_0 G_i$ - - $G_i=1/R_i$ - - $i = g(u) = G_i u + I_0$ - ] - ); - ] - */ - - // Bauelemente - #bgBlock(fill: colorEineTore)[ - #subHeading(fill: colorEineTore)[Bauelemente] - #table( - columns: (1fr, 1fr, 1fr), - stroke: none, - align: center, - table.header([*Zeichen*], [*Gleichung*], [*Abbildung*]), - - // Dioden :// - // - // ideale Diode - [ - ideale Diode - #scale(x: 100%, y: 100%, zap.circuit({ - import zap: * - import cetz.draw: content, line - diode("b1", (0, 0), (1., 0), stroke: black, fill: white) - })) - ], - [ - $u=0$ falls $i>0$ - $i=0$ falls $u<0$ - ], - [ - /* - #scale(x: 50%, y: 50%, - cetz.canvas({ - import cetz.draw: * - line((-1.5, 0), (1.5, 0), mark: (end: "straight")) - line((0, -1.5), (0, 1.5), mark: (end: "straight")) - - content( (1.55, 0), $u$, anchor: "west") - content( (0.15, 1.4), $i$, anchor: "west") - - line((-1.5, 0), (0, 0), stroke: red) // u = 0 - line((0, 0), (0, 1.35), stroke: red) // i = 0 - - })) - */ - #scale(x: 75%, y: 75%, cetz.canvas({ - import cetz.draw: * - import cetz-plot: * - - let opts = (x-tick-step: none, y-tick-step: none, size: (2, 1), x-label: [u], y-label: [i]) - - plot.plot(axis-style: "school-book", ..opts, name: "plot", { - plot.add(((-1, 0), (0, 0)), style: (stroke: red)) - plot.add(((0, 0), (0, 1)), style: (stroke: red)) - }) - })) - ], - //table.hline(start: 1, end: 2), - - // reale/pn Diode - [ - reale/pn Diode - #scale(x: 100%, y: 100%, zap.circuit({ - import zap: * - import cetz.draw: content, line - diode("b1", (0, 0), (1., 0), stroke: black, fill: black) - })) - ], - - [ - $u_D = u_T*ln((i_D/I_S)+1)$ - $i_D = I_S*(e^(u_D/U_T)-1)$ - ], - [ - #scale(x: 75%, y: 75%, cetz.canvas({ - import cetz.draw: * - import cetz-plot: * - - let opts = (x-tick-step: none, y-tick-step: none, size: (2, 1), x-label: [u], y-label: [i]) - let data = plot.add(x => calc.exp(x) - 1, domain: (-2, 2), style: (stroke: red)) - - plot.plot(axis-style: "school-book", ..opts, data, name: "plot") - })) - ], - - // Photodiode - [ - Photodiode - #scale(x: 100%, y: 100%, zap.circuit({ - import zap: * - import cetz.draw: content, line - photodiode("b1", (0, 0), (1., 0), stroke: black, fill: black) - })) - ], - [ - $i = I_S*(e^(u_D/U_T)-1)- i_L$ - ], - [ - #scale(x: 75%, y: 75%, cetz.canvas({ - import cetz.draw: * - import cetz-plot: * - - let opts = (x-tick-step: none, y-tick-step: none, size: (2, 1), x-label: [u], y-label: [i]) - - plot.plot(axis-style: "school-book", ..opts, name: "plot", { - plot.add(x => calc.exp(x) - 1, domain: (-2, 2), style: (stroke: red)) - - plot.add(x => calc.exp(x) - 2, domain: (-2, 2), style: (stroke: red)) - - plot.add(x => calc.exp(x) - 3, domain: (-2, 2), style: (stroke: red)) - }) - })) - ], - - // Zenerdiode - [ - Zenerdiode - #scale(x: 100%, y: 100%, zap.circuit({ - import zap: * - import cetz.draw: content, line - zener("b1", (0, 0), (1., 0), stroke: black, fill: black) - })) - ], - [ - Durchbruch bei $u=U_Z$ : - $u<=U_Z$ stark leitend - ], - [ - - ], - - // Tunneldiode - [ - Tunneldiode - #scale(x: 100%, y: 100%, zap.circuit({ - import zap: * - import cetz.draw: content, line - tunnel("b1", (0, 0), (1., 0), stroke: black, fill: black) - })) - ], - [ - - ], - [ - - ], - - // Quellen: // - // Spannungs-quelle - [ - Spannungs-quelle - #scale(x: 100%, y: 100%, zap.circuit({ - import zap: * - import cetz.draw: content, line - vsource( - "b1", - (0, 0), - (1.75, 0), - ) - })) - ], - [ - - ], - [ - - ], - - // Strom-quelle - [ - Strom-quelle - #scale(x: 100%, y: 100%, zap.circuit({ - import zap: * - import cetz.draw: content, line - isource( - "b1", - (0, 0), - (1.75, 0), - ) - })) - ], - [ - - ], - [ - - ], - - // Wiederstand - [ - Wiederstand - #scale(x: 100%, y: 100%, zap.circuit({ - import zap: * - import cetz.draw: content, line - resistor( - "b1", - (0, 0), - (2, 0), - ) - })) - ], - [ - - ], - [ - - ], - - // Induktivität - [ - Induktivität - #scale(x: 100%, y: 100%, zap.circuit({ - import zap: * - import cetz.draw: content, line - inductor( - "b1", - (0, 0), - (2, 0), - variant: "ieee", - ) - })) - ], - [ - - ], - [ - - ], - - // Kapazität - [ - Kapazität - #scale(x: 100%, y: 100%, zap.circuit({ - import zap: * - import cetz.draw: content, line - capacitor( - "b1", - (0, 0), - (2, 0), - ) - })) - ], - [ - - ], - [ - - ], - - // Kurzschluss - [ - Kurzschluss - #scale(x: 100%, y: 100%, zap.circuit({ - import zap: * - import cetz.draw: content, line - capacitor( - "b1", - (0, 0), - (2, 0), - ) - })) - ], - [ - - ], - [ - - ], - - // Leerlauf - [ - Leerlauf - #scale(x: 100%, y: 100%, zap.circuit({ - import zap: * - import cetz.draw: content, line - capacitor( - "b1", - (0, 0), - (2, 0), - ) - })) - ], - [ - - ], - [ - - ], - - // Nullator - [ - Nullator - #scale(x: 100%, y: 100%, zap.circuit({ - import zap: * - import cetz.draw: content, line - capacitor( - "b1", - (0, 0), - (2, 0), - ) - })) - ], - [ - - ], - [ - - ], - - // Norator - [ - Norator - #scale(x: 100%, y: 100%, zap.circuit({ - import zap: * - import cetz.draw: content, line - capacitor( - "b1", - (0, 0), - (2, 0), - ) - })) - ], - [ - - ], - [ - - ], ); + #linebreak() - ] - - // Graphen und Matrizen - #bgBlock(fill: colorAnalyseVerfahren)[ - #subHeading(fill: colorAnalyseVerfahren)[Graphen und Matrizen] - - $bold(i_b)$ (oder $bold(i)$): Zweigstrom-Vektor \ - $bold(u_b)$ (oder $bold(u)$): Zweigspannungs-Vektor \ - $bold(i_m)$ : Maschenstrom-Vektor \ - #text(rgb(20%, 20%, 20%))[(Strom in einer viruellen Masche)] \ - $bold(u_k)$ : Kontenspannungs-Vektor \ - #text(rgb(20%, 20%, 20%))[(Spannung zwischen Referenzknoten und Knoten k)] \ + *Klein-Signal* $quad Delta i_"lin" = g_"lin" (Delta u) = g'(u_"AP") Delta u$ #line(length: 100%, stroke: (thickness: 0.2mm)) - Knotenzidenzmatrix $bold(A)$ - $bold(A) : bold(i_k) -> text("Knotenstrombilanz") = 0$ \ - $bold(A^T) : bold(u_b)-> bold(u_k)$ - $ - bold(A) = quad mannot.mark( - mat( - a_11, a_12, ..., a_(1m); - a_21, a_22, ..., a_(2m); - dots.v, dots.v, dots.down, dots.v; - a_(n 1), a_(n 2), ..., a_(n m) - ), tag: #<1> - ) - #mannot.annot(<1>, pos: left, text(rgb("#404296"))[#rotate(-90deg)[$<-$ Knoten]], dx: 5mm) - #mannot.annot(<1>, pos: bottom, text(rgb("#404296"))[Zweige $->$], dy: -0.5mm) - a in {-1, 0, 1} - $ + *Spannungsgesteuert* - $-1$: In Knoten rein \ - $1$: Aus Knoten raus \ + *Groß-Signal* \ + #grid(columns: (1fr, 1fr), + column-gutter: 4mm, + $U_0 = u_"AP" - r'(i_"AP") i_"AP"$, + $r_0 = r'(i_"AP")$ + ) + #linebreak() + $u_"lin" = r_"lin" (i) = r'(i_"AP")(i-i_"AP") + u_"AP"\ + u_"lin" = r_"lin" (i) = r_0 i + U_0$ + #block( + height: 25mm, + scale(x: 75%, y: 75%, zap.circuit({ + import zap: * + import cetz.draw: content, line + + vsource("U0", (0, 1.5), (0, -1.5), fill: none) + + node("n2", (3.5, 1.5), fill: false) + node("n3", (3.5, -1.5), fill: false) + + resistor("R0", "U0.in", "n2", fill: none, label: (content: $r_0$, anchor: "south", distance: 0.1)) + wire("U0.out", "n3") + + wire((2.49, 1.5), "n2", i: (content: $i$, anchor: "south", invert: true)) + + set-style(mark: (end: ">", fill: black)) + line((3.5, 1.2), (3.5, -1.2), stroke: 0.5pt) + content((3.9, 0), $u_"lin"$) + + line((0.7, 0.5), (0.7, -0.5), stroke: 0.5pt) + content((1.2, 0), $U_0$) + })), + ); + #linebreak() + *Klein-Signal* $quad Delta u_"lin" = r_"lin" (Delta i) = r'(i_"AP") Delta i$ #line(length: 100%, stroke: (thickness: 0.2mm)) - Mascheninsidenz Matrix $bold(B)$\ - - - $bold(B) : bold(u_b) -> text("Zweigspannungsbilanz") = 0$ \ - $bold(B^T) : bold(i_m) -> i_b$ - - $ - bold(B) = quad mannot.mark( - mat( - b_11, b_12, ..., b_(1m); - b_21, b_22, ..., b_(2m); - dots.v, dots.v, dots.down, dots.v; - b_(n 1), b_(n 2), ..., b_(n m) - ), tag: #<1> - ) - #mannot.annot(<1>, pos: left, text(rgb("#404296"))[#rotate(-90deg)[$<-$ Maschen]], dx: 6mm) - #mannot.annot(<1>, pos: bottom, text(rgb("#404296"))[Zweige $->$], dy: -0.5mm) - b in {-1, 0, 1} - $ - - $-1$: Gegen Maschenrichtung - $1$: In Maschenrichtung - - #line(length: 100%, stroke: (thickness: 0.2mm)) - - *KCL und KVL* \ - - KCL in Nullraum: $bold(A) bold(i_b) = bold(0)$ \ - KVL in Bildraum: $bold(A^T) bold(u_k) = bold(u_b)$ - - KVL in Nullraum: $bold(B) bold(u_b) = bold(0)$ \ - KCL in Bildraum: $bold(B^T) bold(i_m) = bold(i_b)$ \ - - *Tellegen'sche Satz* \ - $bold(A B^T) = bold(B^T A) = 0$ \ - $bold(u_b^T i_b) = 0$ - ] - - // Baumkonzept - #bgBlock(fill: colorAnalyseVerfahren)[ - #subHeading(fill: colorAnalyseVerfahren)[Baumkonzept] - KCLs: $n-1$\ - KVLs: $b-(n-1)$ - - Baum einzeichnen (Keine Schleifen!) - ] - - // Tablauematrix - #bgBlock(fill: colorAnalyseVerfahren)[ - #subHeading(fill: colorAnalyseVerfahren)[Tablauematrix] - ] - // Machenstrom-/Knotenpotenzial-Analyse - #bgBlock(fill: colorAnalyseVerfahren)[ - #subHeading(fill: colorAnalyseVerfahren)[Machenstrom-/Knotenpotenzial-Analyse] - ] - - // Reduziert Knotenpotenzial - #bgBlock(fill: colorAnalyseVerfahren)[ - #subHeading(fill: colorAnalyseVerfahren)[Reduzierte Knotenpotenzial-Analyse] + *Newton-Raphson* + $x_(n+1) = x_n - f(x_n)/(f'(x_n))$ ] + // =============== Zwei Tore =============== // ZweiTor Beschreibungen #bgBlock(fill: colorZweiTore)[ #subHeading(fill: colorZweiTore)[Zwei-Tor Beschreibungen] @@ -841,32 +579,61 @@ *Linear:* $vec(jVec(u), jVec(i)) = mat(jMat(U); jMat(I))jVec(c) + vec(jVec(u), jVec(i))$ + #line(length: 100%, stroke: (thickness: 0.2mm)) *Implizite/Kern/Nullraum* - $mat(jMat(M), jMat(N)) vec(jVec(u), jVec(i)) = 0$ + $forall (jVec(i), jVec(u))$ wo gilt $jMat(M) jVec(i) + jMat(N) jVec(u) = 0$ + + #line(length: 100%, stroke: (thickness: 0.2mm)) + *Explizit* + $r(u) = i \/ g(u) = i$ - siehe Tabelle + (siehe Tabelle) + + #line(length: 100%, stroke: (thickness: 0.2mm)) *Umrechnung* - #grid( - columns: (auto, 1fr), - column-gutter: 2mm, - row-gutter: 2mm, - $"Nullraum" "Explizit"$, + #table( + columns: (1fr), + fill: (x, y) => if calc.rem(y, 2) == 0 { tableFillHigh } else { tableFillLow }, + [ - $G = I U^(-1)\ R = U I^(-1)$\ + *$"Explizit" -> "Implizit(Nullraum)"$*\ + Umstellen nach Null: \ + $jMat(1) jVec(u) - jMat(R) jVec(i) = jVec(0) quad jMat(1) jVec(i) - jMat(G) jVec(u) = jVec(0)$ \ + $==> jMat(N)jVec(u) + jMat(M)jVec(i) = jMat(0)$ ], - $"Explizit" -> "Nullraum"$, [ - Zwei Messungen einsetzen + *Implizit $->$ Explizit* \ + $jMat(R) = -jMat(M)^(-1) jMat(N) quad jMat(G) = -jMat(N)^(-1) jMat(M)$ \ ], + [ + *Parametrisch $->$ Explizit* \ + $jMat(R) = jMat(U) jMat(I)^(-1) quad jMat(G) = jMat(I) jMat(U)^(-1)$ \ + ], + [ + *Explizit $->$ Parametrisch* \ + Zwei ausgesuchte Punkte $jVec(u) \/ jVec(i)$ einsetzen\ + $-> vec(jVec(u)_1, jVec(i)_1),vec(jVec(u)_2, jVec(i)_2)$ \ - $"Kernraum" -> "Nullraum"$, + In Matrix Eintrag: $mat(jMat(U); jMat(I)) = mat(jVec(u)_1, jVec(u)_2; jVec(i)_1, jVec(i)_2)$ + ], + [ + *Implizit $->$ Parametrisch* \ + + $vec(jMat(U), jMat(I)) = vec(-jMat(M)^(-1) jMat(N), jMat(1)) = vec(jMat(1), -jMat(N)^(-1) jMat(M))$ + ], + [ + *Parametrisch* $->$ *Implizit*\ + Paramterisch $->$ Explizit $->$ Implizit + + $-jMat(I) jMat(U)^(-1) jVec(u) + jMat(1) jVec(i) = 0 quad jMat(1)jVec(u) - jMat(U)jMat(I)^(-1) jVec(i) = 0$ + ] ) ] @@ -1055,98 +822,222 @@ ) ], - // Linearsierung - #bgBlock(fill: colorEineTore)[ - #subHeading(fill: colorEineTore)[Linearisierung (Ein-Tore)] + // KS/LL + #bgBlock(fill: colorZweiTore)[ + #subHeading(fill: colorZweiTore)[Kurzschluss/Leerlauf Methode für Zweitore] - 1. Arbeitspunkt bestimmen \ $"AP" =(u_"AP", i_"AP")$ + 1. Was sind die Input-Größen/Output-Größen? \ + $u"-gesteuert:" u = 0 &--> "Kurzschluss (KS)" \ + i"-gesteuert:" i = 0 &--> "Leerlauf (LL)"$ \ - 2. Ableitung $g_cal(F)(u)$/$r_cal(F)(i)$ bilden \ $g'_cal(F)(u)$/$r'_cal(F)(i)$ + 2. Steuernde Größe 1 beschalten KS/LL \ + $-->$ BEIDE gesteuerten Größe errechen \ + (2. Spalte der Matrix) + 3. Steuernde Größe 2 beschalten KS/LL \ + $-->$ BEIDE gesteuerten Größe errechen \ + (1. Spalte der Matrix) + + 4. Matrix/Gleichung aufstellen \ + Addition der Beschreibung pro gesteuerter Größe \ + (Superpositions Prinzip) + ] - *Stromgesteuert $r(i) = u$* + #colbreak() + // Graphen und Matrizen + #bgBlock(fill: colorAnalyseVerfahren)[ + #subHeading(fill: colorAnalyseVerfahren)[Graphen und Matrizen] - Groß-Signal: + $n:$ Knotenanzahle (mit Referenzknoten) - $i_"lin" = g_"lin" (u) = g'_cal(F)(u_"AP")(u-u_"AP") + i_"AP" = \ - g'_cal(F)(u_"AP")u - g'_cal(F)(u_"AP")u_"AP" + i_"AP"$ + $b:$ Zweiganzahle - $I_0 = i_"AP" - g'_cal(F)(u_"AP")u_"AP"$ + *Lineare Unabhänige KCL/KVLs* - $g_0 = g'_cal(F)(u_"AP")u$ + Für $2b$ unbekannte ($b$ Ströme + $b$ Spannungen) - #block( - height: 20mm, - scale(x: 75%, y: 75%, zap.circuit({ - import zap: * - import cetz.draw: content, line + KCLs: $n-1$\ + KVLs: $b-(n-1)$ - isource("I0", (0, 1.5), (0, -1.5), fill: none) - node("n0", (2, 1.5)) - node("n1", (2, -1.5)) + #line(length: 100%, stroke: (thickness: 0.2mm)) - node("n2", (3.5, 1.5), fill: false) - node("n3", (3.5, -1.5), fill: false) + $bold(i_b)$ (oder $bold(i)$): Zweigstrom-Vektor \ + $bold(u_b)$ (oder $bold(u)$): Zweigspannungs-Vektor \ + $bold(i_m)$ : Maschenstrom-Vektor \ + #text(rgb(20%, 20%, 20%))[(Strom in einer viruellen Masche)] \ + $bold(u_k)$ : Kontenspannungs-Vektor \ + #text(rgb(20%, 20%, 20%))[(Spannung zwischen Referenzknoten und Knoten k)] \ - resistor("g0", "n1", "n0", fill: none, label: (content: $g_0$, anchor: "south", distance: 0.2)) - wire("I0.in", "n0", "n2") - wire("I0.out", "n1", "n3") - wire("n0", "n2", i: (content: $i_"lin"$, anchor: "south", invert: true)) - wire((0, 0.6), "I0.in", i: (content: $I_0$, anchor: "east", invert: true)) + #line(length: 100%, stroke: (thickness: 0.2mm)) - set-style(mark: (end: ">", fill: black)) - line((3.5, 1.2), (3.5, -1.2), stroke: 0.5pt) - content((3.9, 0), $u$) - })), - ); + Knotenzidenzmatrix $bold(A)$ + + $bold(A) : bold(i_k) -> text("Knotenstrombilanz") = 0$ \ + $bold(A^T) : bold(u_b)-> bold(u_k)$ + $ + bold(A) = quad space space mannot.mark( + mat( + a_11, a_12, ..., a_(1m); + a_21, a_22, ..., a_(2m); + dots.v, dots.v, dots.down, dots.v; + a_(n 1), a_(n 2), ..., a_(n m) + ), tag: #<1> + ) + #mannot.annot(<1>, pos: left, text(rgb("#404296"))[#rotate(-90deg)[$<-$ Knoten \ ($n-1$)]], dx: 2mm) + #mannot.annot(<1>, pos: bottom, text(rgb("#404296"))[Zweige ($b$) $->$], dy: -0.5mm) + a in {-1, 0, 1} + $ + #linebreak() + $-1 &: "In Knoten rein" \ + 1 &: "Aus Knoten raus"$ + + #line(length: 100%, stroke: (thickness: 0.2mm)) + + Mascheninsidenz Matrix $bold(B)$\ + + + $bold(B) : bold(u_b) -> text("Zweigspannungsbilanz") = 0$ \ + $bold(B^T) : bold(i_m) -> i_b$ + + $ + bold(B) = quad space space mannot.mark(mat( + b_11, b_12, ..., b_(1m); + b_21, b_22, ..., b_(2m); + dots.v, dots.v, dots.down, dots.v; + b_(n 1), b_(n 2), ..., b_(n m) + ), tag: #<1>) + + #mannot.annot(<1>, pos:left, text(rgb("#404296"))[#rotate(-90deg)[$<-$ Maschen \ $b-(n-1)$]], dx: 4mm) + #mannot.annot(<1>, pos:bottom, text(rgb("#404296"))[Zweige ($b$) $->$], dy: -0.5mm) + + b in {-1, 0, 1} + $ #linebreak() + $-1 &: "Gegen Maschenrichtung" \ + 1 &: "In Maschenrichtung"$ - Klein-Signal:$i_"lin" = g_"lin" (u) = g'(u_"AP")u$ + #line(length: 100%, stroke: (thickness: 0.2mm)) - *Spannungsgesteuert $g(u) = i$* + #colbreak() + *KCL und KVL* \ - $u_"lin" = r_"lin" (i) = r'(i_"AP")(i-i_"AP") + u_"AP"$ + KCL in Nullraum: $bold(A) bold(i_b) = bold(0)$ \ + KVL in Bildraum: $bold(A^T) bold(u_k) = bold(u_b)$ - $U_0 = u_"AP" - r'(i_"AP") i_"AP"$ + KVL in Nullraum: $bold(B) bold(u_b) = bold(0)$ \ + KCL in Bildraum: $bold(B^T) bold(i_m) = bold(i_b)$ \ - #block( - height: 25mm, - scale(x: 75%, y: 75%, zap.circuit({ - import zap: * - import cetz.draw: content, line + #line(length: 100%, stroke: (thickness: 0.2mm)) - vsource("U0", (0, 1.5), (0, -1.5), fill: none) - node("n2", (3.5, 1.5), fill: false) - node("n3", (3.5, -1.5), fill: false) - - resistor("R0", "U0.in", "n2", fill: none, label: (content: $r_0$, anchor: "south", distance: 0.1)) - wire("U0.out", "n3") - - wire((2.49, 1.5), "n2", i: (content: $i$, anchor: "south", invert: true)) - - set-style(mark: (end: ">", fill: black)) - line((3.5, 1.2), (3.5, -1.2), stroke: 0.5pt) - content((3.9, 0), $u_"lin"$) - - line((0.7, 0.5), (0.7, -0.5), stroke: 0.5pt) - content((1.2, 0), $U_0$) - })), - ); - Klein-Signal: $u_"lin" = r_"lin" (i) = r'(i_"AP")i$ + *Tellegen'sche Satz* \ + $bold(A B^T) = bold(B^T A) = 0$ \ + + Prüfen oben ein AP stimmt: + $bold(u_b^T i_b) = 0$ + ] + + // Baumkonzept + #bgBlock(fill: colorAnalyseVerfahren)[ + #subHeading(fill: colorAnalyseVerfahren)[Baumkonzept] + + + 1. Baum einzeichnen (Keine Schleifen!) \ + Muss alle Knoten umfassen + + 2. $n-1$ KCLs: \ + Superknoten mit NUR einer Baumkante \ + $jMat(A) = mat(jMat(1)_(n-1), jMat(A)_e)$ \ + + + 3. $b - (n-1)$ KVLs: \ + Maschen mit NUR einer NICHT Baumkante \ + $jMat(B) = mat(jMat(B)_t, jMat(1)_(b-(n-1)))$ + + + *Nur bei Baumkonzept:* $B_t = - A_e^T$ + + ] + + // Tablauematrix + #bgBlock(fill: colorAnalyseVerfahren)[ + #subHeading(fill: colorAnalyseVerfahren)[Allgemeine Analyse Verfahren] + + *Tableaugleichung* + + Alle Element Gleichungen in Nullraum + KVLs/KCLs in eine Matrix + + KCLs in Nullraum: $jMat(A) jVec(i)_b = jVec(0)$\ + KVLs in Nullraum: $jMat(B) jVec(u)_b = jVec(0)$\ + Elementgleichungen: $jMat(N) jVec(u)_b + jMat(M) jVec(i)_b = jVec(e)$ + + $ mannot.mark(mat( + jMat(B), jMat(0); + jMat(0), jMat(A); + jMat(M), jMat(N) + ), tag: #<1>) vec(jVec(u)_b, jVec(i)_b) = vec(jVec(0), jVec(0), jVec(e)) + + #mannot.annot(<1>, text($b - (n-1) space$, rgb("#00318b")), pos: left, dy: -2.8mm, dx: 1mm) + #mannot.annot(<1>, text($n-1 space$, rgb("#00318b")), pos: left, dy: 0mm, dx: 1mm) + #mannot.annot(<1>, text($b space$, rgb("#00318b")), pos: left, dy: 2.8mm, dx: 1mm) + #mannot.annot(<1>, text($2b$, rgb("#00318b")), pos: bottom, dy: -0.5mm) + $ + + #line(stroke: (thickness: 0.2mm), length: 100%) + + *Knotenspannungs-Analyse* + + KVL in Bildraum: $jVec(u)_b = jMat(A)^T jVec(u)_k$\ + KCLs in Nullraum: $jMat(A) jVec(i)_b = jVec(0)$\ + Elementgleichungen: $jMat(N) jVec(u)_b + jMat(M) jVec(i)_b = jVec(e)$ + + $ + mannot.mark(mat( + -jMat(A)^T, jMat(1), jMat(0); + jMat(0), jMat(0), jMat(A); + jMat(0), jMat(M), jMat(N) + ), tag: #<1>) vec(jVec(u)_k, jVec(u)_b, jVec(i)_b) = vec(jVec(0), jVec(0), jVec(e)) + + #mannot.annot(<1>, text($b space$, rgb("#00318b")), pos: left, dy: -2.8mm, dx: 1mm) + #mannot.annot(<1>, text($n-1 space$, rgb("#00318b")), pos: left, dy: 0mm, dx: 1mm) + #mannot.annot(<1>, text($b space$, rgb("#00318b")), pos: left, dy: 2.8mm, dx: 1mm) + #mannot.annot(<1>, text($2b + (n-1)$, rgb("#00318b")), pos: bottom, dy: -0.5mm) + $ + + #line(stroke: (thickness: 0.2mm), length: 100%) + + *Maschenstrom-Analyse* + + Nur für Planare Schaltungen + + KCL in Bildraum: $jVec(i)_b = jMat(B)^T jVec(i)_m$\ + KCLs in Nullraum: $jMat(B) jVec(u)_b = jVec(0)$\ + Elementgleichungen: $jMat(N) jVec(u)_b + jMat(M) jVec(i)_b = jVec(e)$ + + $ + mannot.mark(mat( + jMat(B), jMat(0), jMat(0); + jMat(0), jMat(1), -jMat(B)^T; + jMat(M), jMat(N), jMat(0) + ), tag: #<1>) vec(jVec(u)_b, jVec(i)_b, jVec(i)_m) = vec(jVec(0), jVec(0), jVec(e)) + + #mannot.annot(<1>, text($b - (n-1) space$, rgb("#00318b")), pos: left, dy: -2.8mm, dx: 1mm) + #mannot.annot(<1>, text($b space$, rgb("#00318b")), pos: left, dy: 0mm, dx: 1mm) + #mannot.annot(<1>, text($b space$, rgb("#00318b")), pos: left, dy: 2.8mm, dx: 1mm) + #mannot.annot(<1>, text($3b - (n-1)$, rgb("#00318b")), pos: bottom, dy: -0.5mm) + $ + + #line(stroke: (thickness: 0.2mm), length: 100%) + + Nicht Lineare Gleichungen: $underline(f)'(jVec(u), jVec(i)) = 0$ ] - #colbreak() // Linearsierung (N-Tore) - #bgBlock(fill: colorZweiTore)[ - #subHeading(fill: colorZweiTore)[Linearisierung (N-Tore)] + #bgBlock(fill: colorAnalyseVerfahren)[ + #subHeading(fill: colorAnalyseVerfahren)[Linearisierung (N-Tore)] - 1. Arbeitspunk bestimmen $vec(jVec(u)_"AP", jVec(i)_"AP") hat(=) vec(jVec(x)_"AP", jVec(y)_"AP")$ - - $f_1(x_1, x_2, ... x_n) &= y_1\ - f_2(x_1, x_2, ... x_n) &= y_2\ - &dots.v \ - f_n (x_1, x_2, ... x_n) &= y_n$ + 1. Arbeitspunk bestimmen/schätzen/ist gegeben \ + $vec(jVec(u)_"AP", jVec(i)_"AP") hat(=) vec(jVec(x)_"AP", jVec(y)_"AP")$ $bold(f)(jVec(x))=jVec(y)$ @@ -1166,21 +1057,34 @@ $jVec(y)_"lin" = jMat(J)|_(jVec(x)_"AP") jVec(x)_"lin"$ ] - // Newton-Raphson - #bgBlock(fill: colorEineTore)[ - #subHeading(fill: colorEineTore)[Newton-Raphson (Eine-Tor)] - $x_(n+1) = x_n - f(x_n)/(f'(x_n))$ - ] - // Netwen-Raphson N-Tore - #bgBlock(fill: colorZweiTore)[ - #subHeading(fill: colorZweiTore)[Newton-Raphson (N-Tore)] - Nicht lineare Beschreibung in Nullraum/Impliziter Darstellung: - $f(jVec(x)) = jVec(0)$\ + #bgBlock(fill: colorAnalyseVerfahren)[ + #subHeading(fill: colorAnalyseVerfahren)[Newton-Raphson (N-Tore)] + Nicht lineare Beschreibung in Nullraum/Implizit Darstellung: + $jVec(f)'(jVec(x)) = jVec(0)$\ - $jVec(x)_(n+1) = jVec(x)_n - (jMat(J)|_(jVec(x)_"AP"))^(-1) f(jVec(x))$ + + 0. Jakobi Matrix $jMat(J)(x^((k)))$ aufstellen (ableiten) + + Schrit $n+1$ Berechnen: + + 1. Jacobi Matrix $jMat(J)(x^((n)))$ ausrechnen + + 2. Linearisiertes Gleichungs System aufstellen: \ + $M_"lin"^((n)) jVec(u)^((n)) + N_"lin"^((n)) jVec(i)^((n))$ aus $jMat(J)(x^((n)))$ rauslesen + + $jVec(e)_"lin" = jMat(J)(x^((n))) dot x^((n)) - jVec(f)(x^((n)))$ + + $n$te-Linearisierte Elementgleichungen: \ + $M_"lin"^((n)) jVec(u)^((n)) + N_"lin"^((n)) jVec(i)^((n)) = jVec(e)^((n))_"lin"$ + + Tablaue: $jMat(T)^((n)) jVec(x)^((n + 1)) = jVec(e)^((n))$ \ + + 3. Gleichungsystem lösen: $jVec(x)^((n+1))$ + + 4. Fehler $epsilon$ berechnen: $epsilon_(n+1) = jVec(f)(jVec(x)^((n+1)))$ ] - + // Reaktive Elemeten #colbreak() #bgBlock(fill: colorComplexAC)[ @@ -1193,14 +1097,18 @@ row-gutter: 10mm, column-gutter: 2mm, [ + *Kapazitiv* + $[i(t)] = unit("A")$\ $[q(t)] = unit("A s") = unit("C")$\ ], grid.vline(stroke: 0.75pt), [], [ + *Induktiv* + $[u(t)] = unit("V")$ \ - $[Phi(t)] = unit("A s") = unit("W b")$ \ + $[Phi(t)] = unit("V s") = unit("W b")$ \ ], [ @@ -1218,29 +1126,85 @@ ], ) - $W(t_1, t_2) = integral_(t_1)^(t_2) P(tau) d tau = integral_(t_1)^(t_2) u(tau) i(tau) d tau$ + #linebreak() + + $p(t) = u(t) i(t)$ + + $ + W(t_1, t_2) = integral_(t_1)^(t_2) p(tau) d tau = + integral_(Phi (t_1))^(Phi (t_2)) lambda (Phi') d Phi' = + integral_(q (t_1))^(q (t_2)) chi (q') d q' + $ + + mit $i = lambda (Phi')$, $u = chi (q')$ $W(t_1, t_2) > 0$: Nimmt Energie auf\ $W(t_1, t_2) = 0$: Verlustlos\ $W(t_1, t_2) < 0$: Gibt Energie ab\ ] + #bgBlock(fill: colorComplexAC)[ + #subHeading(fill: colorComplexAC)[Superpositions Prinzip] + + Sei eine lineare eindeutig lösbare Schaltung mit mehreren Erregungen ge- + geben, so setzt sich die Gesamtlösung aus den einzelnen Teillösungen zu- + sammen. + + 1. Setze alle bis auf eine unabhängige Quelle $U_k$ bzw. $I_k$ zu Null + 2. Berechne die gesuchten Größen $u_(z_k)$ bzw. $i_(y_k)$ + 3. Wiederhole Schritte 1 und 2 für alle unabhängige Quellen + 4. Gesamtlösung ergibt sich zu \ $u_z = sum u_(z_k)$ und $i_y = sum u_(y_k)$ + + #line(length: 100%, stroke: (thickness: 0.2mm)) + + *Für Komplex AC* + + Für Eingeschwungenen und lineare Schaltungnen + + Erregung kann in \ + $u_"ges"(t) = u_0(t) + u_1(t) + ... + U_"const"$ \ + wobei $u_0(t), u_1(t), ...$ verschieden $omega$ haben dürfen. + + Das gilt *NUR* zweit Abhänige Darstellung, *NICHT* für Frequenz Abhänige Darstellung + ] + + #colbreak() #bgBlock(fill: colorComplexAC)[ #subHeading(fill: colorComplexAC)[Reaktive Bauelemente] #grid( columns: (1fr, 0pt, 1fr), row-gutter: 4mm, column-gutter: 2mm, - [ - *Kapazitiv* - ], + [*Kapazitiv*], grid.vline(stroke: 0.75pt), [], + [*Induktiv*], [ - *Induktivität* + $q = c(u) \ u = chi(q)$\ + + $W(t_1, t_2), integral_(q_1 = q(t_1))^(q_2 = q(t_2)) chi(q) d q$ ], + [], [ - $q = c(u) \ chi(q) = u$\ + $Phi = l(i) \ i = lambda(Phi)$ \ + + $W(t_1, t_2), integral_(Phi_1 = Phi(t_1))^(Phi_2 = Phi(t_2)) lambda(Phi) d Phi$ + ], + + [$u,q$ stetig und beschränkt], + [], + [$i,Phi$ stetig und beschränkt], + + grid.hline(stroke: 0.75pt), + [], + [], + [], + + [*Restiv*], + [], + [*Memristiv*], + [ + $i = g(u) \ u = r(i)$\ ], [], [ @@ -1253,6 +1217,8 @@ [], ) + #line(length: 100%, stroke: (thickness: 0.2mm)) + #align(center, [*Lineare Bauelemente*]) #grid( columns: (1fr, 0pt, 1fr), @@ -1298,24 +1264,84 @@ ] - // Reaktive Dual Wandlung + // Komplexe Beziehung #bgBlock(fill: colorComplexAC)[ - #subHeading(fill: colorComplexAC)[Reaktive Dualwandlung] + #subHeading(fill: colorComplexAC)[Komplex Beziehungen] + #let size = 1.4 + #let margin = 0.2 - #grid( - columns: (1fr, 1fr), - row-gutter: 4mm, - $u --> R_d i^d$, $i --> u^d/R_d$, - $q --> Phi^d / R_d$, $Phi --> q^d R_d$, - ) + *Bauelement Beziehungen* + #align(center+horizon, [ + #canvas({ + import cetz.draw : content, set-style, line, scale + content((-size, size), $i$) + content((size, size), $u$) + content((-size, -size), $q$) + content((size, -size), $Phi$) + + set-style(mark: (symbol: ">")) + line((-size + margin, size), (size - margin, size), + stroke: (thickness: 0.2mm, paint: rgb("#005500")) + ) + line((-size + margin, -size), (size - margin, -size), + stroke: (thickness: 0.2mm, paint: rgb("#008b00")) + ) + + + set-style(mark: (symbol: ">")) + line((-size+margin, -size+margin), (size -margin, size -margin), + stroke: (thickness: 0.2mm, paint: rgb("#2534ff")) + ) + line((size -margin, -size+margin), (-size+margin, size -margin), + stroke: (thickness: 0.2mm, paint: rgb("#ff4625")) + ) + + scale(y: 75%, x: 75%) + content((0.0, -size - 0.8), text(rgb("#008b00"))[$"Memristiv" q = f(Phi)$], auto-scale: true) + + content((0.0, size+0.8), text(rgb("#005500"))[$"Resitiv" u = r(i)$], auto-scale: true) + + + content((0.0, 0.2), text(rgb("#ff4625"))[$"Induktiv" quad i = lambda(Phi)$], angle: -45deg, auto-scale: true) + + + content((-0.2, 0.1), text(rgb("#2534ff"))[$"Kapazitiv" quad u = chi(Phi)$], angle: 45deg, auto-scale: true) + }) + ]) + + *Allgemeine Beziehungen (gilt immer)* + #align(center+horizon, [ + #canvas({ + import cetz.draw : content, set-style, line, bezier + content((-size, size), $i$) + content((size, size), $u$) + content((-size, -size), $q$) + content((size, -size), $Phi$) + + set-style(mark: (end: ">")) + bezier((-size -margin*0.5, -size +margin), (-size -margin*0.5, size -margin), (-size - 0.5, 0), stroke: (thickness: 0.2mm, paint: rgb("#00318b"))) + bezier((size -margin*0.5, -size +margin), (size -margin*0.5, size -margin), (size - 0.5, 0), stroke: (thickness: 0.2mm, paint: rgb("#00318b"))) + + + bezier((-size +margin*0.5, size -margin), (-size +margin*0.5, -size +margin), (-size + 0.5, 0), stroke: (thickness: 0.2mm, paint: rgb("#8b2000"))) + bezier((size +margin*0.5, size -margin), (size +margin*0.5, -size +margin), (size + 0.5, 0), stroke: (thickness: 0.2mm, paint: rgb("#8b2000"))) + + content((-size + 0.2, 0), scale(75%, text(rgb("#8b2000"), $integral i(tau) d tau$)), anchor: "west") + content((-size - 0.3, 0), scale(75%, text(rgb("#00318b"), $(d q)/(d t)$)), anchor: "east") + + content((size + 0.2, 0), scale(75%, text(rgb("#8b2000"), $integral u(tau) d tau$)), anchor: "west") + content((size - 0.3, 0), scale(75%, text(rgb("#00318b"), $(d Phi)/(d t)$)), anchor: "east") + + }) + ]) ] // Complex AC #bgBlock(fill: colorComplexAC)[ #subHeading(fill: colorComplexAC)[Komplex Wechselstrom Rechnnung] - Im Eingeschwungenem Zustand + *Nur für Lineare und Eingeschwungenene Schaltungen* - $u(t) =U_m "Re"{e^(j omega t + phi)}$ + $u(t) = "Re"{U_m e^(j omega t + phi)}$ $u(t) = U_m cos(omega t + alpha)$ \ $i(t) = I_m cos(omega t + beta)$ @@ -1344,14 +1370,15 @@ columns: (1fr, 2fr, 2fr, 2fr), inset: (bottom: 2mm, top: 2mm), fill: (x, y) => if calc.rem(y, 2) == 1 { tableFillLow } else { tableFillHigh }, - [], [*$Y = U/I$*], [*$Z = I/U$*], [*$phi$*], - [], [*$Omega$*], [*$S$*], [*rad*], + [], [*$Z = U/I$*], [*$Y = I/U$*], [*$phi$*], + [], [*$I -> U$*], [*$U -> I$*], [*$phi$*], + [], [*$Omega space (R)$*], [*$S space (G)$*], [*rad*], zap.circuit({ import zap: * resistor("R", (0, 0), (0.6, 0), width: 3mm, height: 2mm, fill: none) }), - $R$, - $1/G = R$, + $R = 1/G$, + $G = 1/R$, $0$, zap.circuit({ @@ -1372,37 +1399,52 @@ ) ] + #colbreak() #bgBlock(fill: colorComplexAC)[ #subHeading(fill: colorComplexAC)[*Levi's Lustig Leistung*] - - $P = 1/2 U dot I^*$\ - + $P=P_W + j P_B$\ + #table( columns: (auto, 1fr, auto), fill: (x, y) => if calc.rem(y, 2) == 0 { tableFillLow } else { tableFillHigh }, [Scheinleitsung], [$S = abs(P)$], [$["VA"]$], - [Wirkleistung], [$P_w = "Re"{P}$], [$["W"]$], - [Blindleistung], [$P_b = "Im"{P}$], [$["var"]$], + [Wirkleistung], [$P_W = "Re"{P}$], [$["W"]$], + [Blindleistung], [$P_B = "Im"{P}$], [$["var"]$], ) - Bei Wiederstand: $R$ - - $P_w = U_m^2 / 2R = (I_m^2 R)/2$ - $P = 1/2 U I^* = 1/2 abs(U)^2 Y^* = 1/2 abs(I)^2 Z^*$ + + //Bei Wiederstand: $R$ - $U_"eff" = U_m/sqrt(2), I_"eff" = I_m / sqrt(2)$ + //$P_w = U_m^2 / 2R = (I_m^2 R)/2$ + + + + $U_"eff" = U_m/sqrt(2), I_"eff" = I_m / sqrt(2)$ \ + + $W = t dot P_w$ ] + #colbreak() // Komplexe Zahlen #bgBlock(fill: colorAllgemein)[ #subHeading(fill: colorAllgemein)[Komplexe Zahlen] #ComplexNumbersSection(i: $j$) + *Trigonometire* + #grid( + columns: (auto, auto), + column-gutter: 2mm, + row-gutter: 3mm, + $cos(x) = cos(-x)$, $sin(-x) = -sin(x)$, $cos(x)^2 + sin(x)^2 = 1$, $cos(x) = sin(x + pi/2)$, $sin(x) = cos(x - pi/2)$, $$, + grid.cell(colspan: 2, $cos(x + y) = cos(x)cos(y) - sin(x)sin(y)$), + grid.cell(colspan: 2, $sin(x + y) = sin(x)cos(y) + cos(x)sin(y)$) + ) ] + #colbreak() // SinTable #bgBlock(fill: colorAllgemein, [ #subHeading(fill: colorAllgemein, [Sin-Table]) @@ -1410,6 +1452,10 @@ #SineCircle() ]) + + #colbreak() + + #ableitungsTabelle ] #pagebreak() @@ -1419,63 +1465,818 @@ #let NodeBlue = rgb("#6156ff") #let NodeYellow = rgb("#ffa856") -#let nodeSymbol(s, center, color, ..style) = { - import cetz.draw: * - ( - ctx => { - // Define a default style - let def-style = (n: 5, inner-radius: .5, radius: 1, stroke: auto, fill: auto) +#columns(2)[ + #bgBlock(fill: colorAnalyseVerfahren)[ + #subHeading(fill: colorAnalyseVerfahren)[Reduzierte Knotenpotenzial-Analyse Komponetent] + #import mannot: * + + #let ImageHeight = 2.5cm + + Reduzierte Knotenpotenzial-Analyse: $jMat(G_k) = jVec(u)_k = jVec(i)_q$ + + *Cramersche Regel:* $u_(k i) = (det jMat(G)_(k i))/(det jMat(G)_k)$ ($jMat(G)_(k i)$ entshet aus $G_k$ durch ersetzen der $i$-ten Splate mit $jVec(i)_q$) + + #table( + columns: (1fr, 1fr), + fill: (x, y) => if calc.rem(y, 2) == 0 { tableFillHigh } else { tableFillLow }, + + grid( + columns: 3, + column-gutter: 5mm, + row-gutter: 3mm, + zap.circuit({ + import zap : * + + vsource("V", (0,0), (0,1.5), scale: 0.4, fill: none) + joham.voltage((-0.3,1), (-0.3,0), $U_0$) + resistor("G", (0,1.5), (1,1.5), scale: 0.4, fill: none, label: (content: $G$, distance: 0.6mm, anchor: "south")) + wire("V.in", (1,0)) + }), + align(center+horizon, $==>$), + zap.circuit({ + import zap : * + + isource("V", (0,0), (0,1.5), scale: 0.4, fill: none, i: (content: $G U_0 space$, invert: false, distance: 0.2, anchor: "east")) + + resistor("G", (1,0), (1,1.5), n: "*-*", scale: 0.4, fill: none, label: (content: $G$, distance: 0.6mm)) + wire("V.in", (1.5,0)) + wire("V.out", (1.5,1.5)) + }), + ), + + grid( + columns: 3, + column-gutter: 5mm, + row-gutter: 3mm, + zap.circuit({ + import zap : * + + vsource("V", (0,0), (0,1.5), scale: 0.4, fill: none) + joham.voltage((-0.3,1), (-0.3,0), $U_0$) + + wire("V.in", (1,0)) + wire("V.out", (1,1.5)) + }), + align(center+horizon, $==>$), + zap.circuit({ + import zap : * + + isource("V", (0,0), (0,1.5), scale: 0.4, fill: none, i: (content: $G U_0 space$, invert: false, distance: 0.2, anchor: "east")) + + resistor("G", (1,0), (1,1.5), n: "*-*", scale: 0.4, fill: none, label: (content: $G$, distance: 0.6mm)) + resistor("-G", (2.3,1.5), (1,1.5), scale: 0.4, fill: none, label: (content: $-G$, distance: 0.6mm)) + wire("V.in", (2.3,0)) + wire("V.out", "G.out") + }), + ), + + grid( + columns: 3, + column-gutter: 5mm, + row-gutter: 3mm, + zap.circuit({ + import zap : * + + vsource("V", (0,0), (0,1.5), scale: 0.4, fill: none) + joham.voltage((-0.3,1), (-0.3,0), $U_0$) + + wire("V.in", (1,0)) + wire("V.out", (1,1.5)) + }), + align(center+horizon, $==>$), + zap.circuit({ + import zap : * + joham.gyrator("G", (0,0), scale: 0.4, constant: $G_d$, invert: true) + joham.ground("GND", "G.12") + node("A", "G.12") + node("B", (-0.75,0.67), label: (content: $alpha$, distance: 0.1)) + isource("V", "G.12", "G.11", scale: 0.4, fill: none, i: (content: $G_d U_0 space$, invert: true, distance: 0.3, anchor: "east")) + }), + ), + + [*Übertrager/NIK* siehe Zweitor-Tabelle + + ], + + scale(90%, grid( + columns: (auto, 0mm, 1fr), + column-gutter: 5mm, + row-gutter: 3mm, + + [ + *VCVS + 1 Knoten* \ + #zap.circuit({ + import zap : vsource, node, disource, dvsource, wire + import cetz.draw : line, rect, mark, content + + node("A", (0,0), fill: false) + node("B", (0,1), fill: false) + node("C", (0.8,0), fill: false) + node("D", (0.8,1), fill: false) + + joham.voltage((0, 1), (0, 0), $u_"in"$, anchor: "west") + dvsource("S", (0.8,0), (0.8,1), fill: none, scale: 0.4) + + joham.voltage((1.1, 1), (1.1, 0), $u_"out"$, anchor: "west") + }) + + $u_"out" = mu u_"in"$ + ], + align(center+horizon, $==>$), + [ + #zap.circuit({ + import zap : vsource, node, disource, dvsource, wire + import cetz.draw : line, rect, mark, content + + joham.gyrator("G0", (3,0), scale: 0.4, invert: true, constant: $G_d$) + + disource("S", "G0.11", "G0.12", scale: 0.4, fill: none, i: (content: $i_"out"$, distance: 0.3, anchor: "west", invert: true)) + node("N4", "G0.11", label: (content: $beta$, distance: 0.1),) + node("N3", "G0.12",) + joham.ground("GND1", "N3") + + node("A", (1, 0.67), fill: false) + node("B", (1, -0.67), fill: false) + joham.voltage((1, 0.7), (1, -0.7), $u_"in"$, anchor: "west") + + }) + $i_"out" = mu G_d u_"in"$ + ], + )), + + scale(90%, grid( + columns: (auto, 0mm, 1fr), + column-gutter: 5mm, + row-gutter: 3mm, + + [ + *CCCS + 1 Knoten* \ + #zap.circuit({ + import zap : vsource, node, disource, dvsource, wire + import cetz.draw : line, rect, mark, content + + node("A", (0,0), fill: false) + node("B", (0,1), fill: false) + node("C", (0.8,0), fill: false) + node("D", (0.8,1), fill: false) + + wire((0,0), (0,1), i: (content: $i_"in"$, invert: true, anchor: "east", distance: 0.1), size: 0.2) + disource("S", (0.8,0), (0.8,1), fill: none, scale: 0.4) + + line((0.8,0.15), (0.8,0.1), mark: (end: ">", scale: 0.2, fill: black)) + content((0.9, 0.15), $i_"out"$, anchor: "west") + }) + $i_"out" = beta i_"in"$ + ], + align(center+horizon, $==>$), + [ + #zap.circuit({ + import zap : vsource, node, disource, dvsource, wire + import cetz.draw : line, rect, mark, content + + joham.gyrator("G1", (0,0), scale: 0.4, constant: $G_d$) + + node("A", (1.8,-0.67)) + node("B", (1.8,0.67)) + + disource("S", "A", "B", scale: 0.4, fill: none, i: (content: $i_"out"$, distance: 0.2, label-distance: -0.4, anchor: "east", invert: true)) + node("N1", "G1.21", label: (content: $alpha$, distance: 0.1),) + node("N2", "G1.22",) + joham.ground("GND1", "N2") + + joham.voltage("G1.21", "G1.22", $u_"in"$) + }) + $i_"out" = beta G_d u_in$ + ], + )), - // Resolve center to a vector - let (ctx, center) = cetz.coordinate.resolve(ctx, center) - - // Resolve the current style ("star") - let style = cetz.styles.resolve(ctx.style, merge: style.named(), base: def-style, root: "star") - - let paths = ( - cetz.drawable.ellipse(center.at(0), center.at(1), 0, 0.25, 0.25, fill: color, stroke: black), - cetz.drawable.content((center.at(0),center.at(1) + 0.025), 1, 1, none, s), + table.cell( + align(center+horizon, grid( + columns: (auto, 0mm, auto), + column-gutter: 5mm, + row-gutter: 3mm, + [ + *CCVS + 2 Knoten* \ + #zap.circuit({ + import zap : vsource, node, disource, dvsource, wire + import cetz.draw : line, rect, mark, content + + node("A", (0,0), fill: false) + node("B", (0,1), fill: false) + node("C", (0.8,0), fill: false) + node("D", (0.8,1), fill: false) + + wire((0,0), (0,1), i: (content: $i_"in"$, invert: true, anchor: "east", distance: 0.1), size: 0.2) + dvsource("S", (0.8,0), (0.8,1), fill: none, scale: 0.4) + + joham.voltage((1.1, 1), (1.1, 0), $u_"out"$, anchor: "west") + }) + + $u_"out" = r i_"in"$ + ], + align(center+horizon, $==>$), + [ + #zap.circuit({ + import zap : vsource, node, disource, dvsource, wire + import cetz.draw : line, rect, mark, content + + joham.gyrator("G1", (0,0), scale: 0.4, constant: $G_d$) + joham.gyrator("G0", (3,0), scale: 0.4, invert: true, constant: $G_d$) + + disource("S", "G0.11", "G0.12", scale: 0.4, fill: none, i: (content: $i_"out"$, distance: 0.3, anchor: "west", invert: true)) + node("N1", "G1.21", label: (content: $alpha$, distance: 0.1),) + node("N4", "G0.11", label: (content: $beta$, distance: 0.1),) + node("N2", "G1.22",) + node("N3", "G0.12",) + joham.ground("GND1", "N3") + joham.ground("GND1", "N2") + + joham.voltage("G1.21", "G1.22", $u_"in"$) + }) + $i_"out" = r G_d^2 u_"in"$ + ], + )), + colspan: 2 ) - ( - ctx: ctx, - drawables: cetz.drawable.apply-transform(ctx.transform, paths) - ) - }, - ) -} + ) + + #table( + columns: (1fr, 1fr), + fill: (x, y) => if calc.rem(y, 2) == 0 { tableFillHigh } else { tableFillLow }, + align(center, image("../images/schaltungstheorie/knotenpotenzial/schaltKontenPotenziell3-1.png", height: ImageHeight, fit: "contain")), -#bgBlock(fill: colorAnalyseVerfahren)[ - #subHeading(fill: colorAnalyseVerfahren)[Knotenpotenzial-Analyse Komponetent] - #import mannot: * + align(center, image("../images/schaltungstheorie/knotenpotenzial/schaltKontenPotenziell4.png", height: ImageHeight, fit: "contain")), - #let ImageHeight = 3.0cm + align(center, image("../images/schaltungstheorie/knotenpotenzial/schaltKnotenPotenziell12.png", height: ImageHeight, fit: "contain")), - #table( - columns: (1fr, 1fr, 1fr, 1fr), - fill: (x, y) => if calc.rem(y, 2) == 0 { tableFillHigh } else { tableFillLow }, - align(center, image("../images/schaltungstheorie/knotenpotenzial/schaltKontenPotenziell3-1.png", height: ImageHeight, fit: "contain")), + align(center, image("../images/schaltungstheorie/knotenpotenzial/schaltKontenPotenziell11.png", height: ImageHeight, fit: "contain")), - align(center, image("../images/schaltungstheorie/knotenpotenzial/schaltKontenPotenziell4.png", height: ImageHeight, fit: "contain")), + align(center, image("../images/schaltungstheorie/knotenpotenzial/schaltKontenPotenziell7.png", height: ImageHeight, fit: "contain")), - align(center, image("../images/schaltungstheorie/knotenpotenzial/schaltKontenPotenziell5.png", height: ImageHeight, fit: "contain")), + align(center, image("../images/schaltungstheorie/knotenpotenzial/schaltKontenPotenziell8.png", height: ImageHeight, fit: "contain")), - align(center, image("../images/schaltungstheorie/knotenpotenzial/schaltKontenPotenziell6.png", height: ImageHeight, fit: "contain")), + align(center, image("../images/schaltungstheorie/knotenpotenzial/schaltKontenPotenziell9.png", height: ImageHeight, fit: "contain")), - align(center, image("../images/schaltungstheorie/knotenpotenzial/schaltKontenPotenziell7.png", height: ImageHeight, fit: "contain")), + align(center, image("../images/schaltungstheorie/knotenpotenzial/schaltKontenPotenziell10.png", height: ImageHeight, fit: "contain")), - align(center, image("../images/schaltungstheorie/knotenpotenzial/schaltKontenPotenziell8.png", height: ImageHeight, fit: "contain")), + align(center, image("../images/schaltungstheorie/knotenpotenzial/schaltKontenPotenziell1.png", height: ImageHeight, fit: "contain")), - align(center, image("../images/schaltungstheorie/knotenpotenzial/schaltKontenPotenziell9.png", height: ImageHeight, fit: "contain")), + align(center, image("../images/schaltungstheorie/knotenpotenzial/schaltKontenPotenziell2.png", height: ImageHeight, fit: "contain")), + + align(center, image("../images/schaltungstheorie/knotenpotenzial/nullator.jpg", height: ImageHeight, fit: "contain")), + + align(center, image("../images/schaltungstheorie/knotenpotenzial/norator.jpg", height: ImageHeight, fit: "contain")), + align(center, image("../images/schaltungstheorie/knotenpotenzial/schaltKnotenPotenziell13.png", height: ImageHeight, fit: "contain")) + ) + ] - align(center, image("../images/schaltungstheorie/knotenpotenzial/schaltKontenPotenziell10.png", height: ImageHeight, fit: "contain")), + #colbreak() + // Bauelemente + #bgBlock(fill: colorEineTore)[ + #subHeading(fill: colorEineTore)[Bauelemente] + + #table( + columns: (1fr, 1fr, 1fr, 1fr), + stroke: none, + fill: (x, y) => if (calc.rem(y, 2) == 0) { tableFillLow } else { tableFillHigh }, + align: center, + table.header( + [*Zeichen*], [*Gleichungen*], [*Abbildung*], [*Eigenschaften*]), + table.hline(), - align(center, image("../images/schaltungstheorie/knotenpotenzial/schaltKontenPotenziell1.png", height: ImageHeight, fit: "contain")), - align(center, image("../images/schaltungstheorie/knotenpotenzial/schaltKontenPotenziell2.png", height: ImageHeight, fit: "contain")), + // Nullator + [ + Nullator + #scale(x: 100%, y: 100%, zap.circuit({ + import zap: * + import cetz.draw: content, line + joham.nullator("nullator1",(0,0), (-1.75,0)) + })) + ], + align(center+horizon, + $u = 0 \ i = 0$ + ), + [ + #scale(x: 75%, y: 75%, cetz.canvas({ + import cetz.draw: * + import cetz-plot: * - ) + let opts = (x-tick-step: none, y-tick-step: none, size: (2, 1), x-label: [u], y-label: [i]) + + plot.plot(axis-style: "school-book", ..opts, name: "plot", { + + plot.add(((0,0), (0,0)), + mark-style: (stroke: red, fill: red), mark: "o", ) + }) + })) + ], + align(left+top)[ + - Verlustlos + - Streng linear + - Linear + - Quellenfrei + - Ungepolt + - Resitiv, Induktiv, Kapazitiv, Memristiv + - Passiv + ], + + // Norator + [ + Norator + #scale(x: 100%, y: 100%, zap.circuit({ + import zap: * + import cetz.draw: content, line + joham.norator("norator1",(0,0), (-1.75,0)) + })) + ], + align(horizon+center, [ + $u = "bel." \ + i = "bel."$ + ]), + [ + #scale(x: 75%, y: 75%, cetz.canvas({ + import cetz.draw: * + import cetz-plot: * + + let opts = (x-tick-step: none, y-tick-step: none, size: (2, 1), x-label: [u], y-label: [i]) + + plot.plot(axis-style: "school-book", ..opts, name: "plot", { + plot.add-contour(x-domain: (-3, 3), y-domain: (-3, 3), + style: (fill: rgb("#f7000832"), stroke: none), + fill: true, + op: "<", // Find contours where data < z + z: (0,100000), // Z values to find contours for + (x, y) => calc.sqrt(x*x + y * y)) + }) + })) + ], + align(left+top)[ + - #text("NICHT", red) Verlustlos + - Streng linear + - Linear + - Quellenfrei + - Ungepolt + - Resitiv, Induktiv, Kapazitiv, Memristiv + - Aktiv + ], + table.hline(), + + // Kurzschluss + [ + Kurzschluss + #scale(x: 100%, y: 100%, zap.circuit({ + import zap: * + import cetz.draw: content, line + + node("n1", (0, 0), fill: false) + node("n2", (1, 0), fill: false) + + wire((0,0), (1,0)) + wire((-0.25,0), (0,0)) + wire((1,0), (1.25,0)) + + })) + ], + align(horizon+center, [ + $u = 0 \ + i = "bel."$ + ]), + [ + #scale(x: 75%, y: 75%, cetz.canvas({ + import cetz.draw: * + import cetz-plot: * + + let opts = (x-tick-step: none, y-tick-step: none, size: (2, 1), x-label: [u], y-label: [i]) + + plot.plot(axis-style: "school-book", ..opts, name: "plot", { + + plot.add(((0, -1), (0, 1)), style: (stroke: red)) + }) + })) + ], + align(left+top)[ + - Verlustlos + - Passiv + - Streng linear + - Linear + - Quellenfrei + - Ungepolt + - #text("NICHT", red) u-gest. + - i-gest. + ], + + // Leerlauf + [ + Leerlauf + #scale(x: 100%, y: 100%, zap.circuit({ + import zap: * + import cetz.draw: content, line + node("n1", (0, 0), fill: false) + node("n2", (1, 0), fill: false) + + wire((-0.25,0), (0,0)) + wire((1,0), (1.25,0)) + })) + ], + align(horizon+center, [ + $u = "bel." \ + i = 0$ + ]), + [ + #scale(x: 75%, y: 75%, cetz.canvas({ + import cetz.draw: * + import cetz-plot: * + + let opts = (x-tick-step: none, y-tick-step: none, size: (2, 1), x-label: [u], y-label: [i]) + + plot.plot(axis-style: "school-book", ..opts, name: "plot", { + + plot.add(((-1, 0), (1, 0)), style: (stroke: red)) + }) + })) + ], + align(left+top)[ + - Verlustlos + - Passiv + - Streng linear + - Linear + - Quellenfrei + - Ungepolt + - u-gest. + - #text("NICHT", red) i-gest. + ], + + table.hline(), + // Quellen: // + // Spannungs-quelle + [ + Spannungs-quelle + #scale(x: 100%, y: 100%, zap.circuit({ + import zap: * + import cetz.draw: content, line + vsource( + fill: none, + "b1", + (0, 0), + (1.75, 0), + ) + })) + ], + align(horizon+center, [ + $u = U_0 \ + i = "bel."$ + ]), + [ + #scale(x: 75%, y: 75%, cetz.canvas({ + import cetz.draw: * + import cetz-plot: * + + let opts = (x-tick-step: none, y-tick-step: none, size: (2, 1), x-label: [u], y-label: [i]) + + plot.plot(axis-style: "school-book", ..opts, name: "plot", { + + plot.add(((1, -1), (1, 1)), style: (stroke: red)) + plot.add-anchor("pt",(1,0)) + }) + content("plot.pt", [$U_0$], anchor: "north-west", padding: .1) + })) + ], + align(left+top)[ + - Aktiv + - Linear + - Gepolt + - i-gest. + ], + + // Strom-quelle + [ + Strom-quelle + #scale(x: 100%, y: 100%, zap.circuit({ + import zap: * + import cetz.draw: content, line + isource( + fill: none, + "b1", + (0, 0), + (1.75, 0), + ) + })) + ], + align(horizon+center, [ + $u = "bel." \ + i = I_0$ + ]), + [ + #scale(x: 75%, y: 75%, cetz.canvas({ + import cetz.draw: * + import cetz-plot: * + + let opts = (x-tick-step: none, y-tick-step: none, size: (2, 1), x-label: [u], y-label: [i]) + + plot.plot(axis-style: "school-book", ..opts, name: "plot", { + + plot.add(((-1, 1), (1, 1)), style: (stroke: red)) + plot.add-anchor("pt",(0,1)) + }) + content("plot.pt", [$I_0$], anchor: "south-east", padding: .1) + })) + ], + align(left+top)[ + - Aktiv + - Linear + - Gepolt + - u-gest. + ], + + table.hline(), + +// Ohmscher Wiederstand + [ + Ohm'sche Wiederstand + #scale(x: 100%, y: 100%, zap.circuit({ + import zap: * + import cetz.draw: content, line + resistor( + "b1", + (0, 0), + (2, 0), + ) + })) + ], + align(center+horizon, + $u = r dot i \ + i = u/r \ + [R] = Omega = "V"/"A" \ [G] = S = "A"/"V" + $ + ), + [ + #scale(x: 75%, y: 75%, cetz.canvas({ + import cetz.draw: * + import cetz-plot: * + + let opts = (x-tick-step: none, y-tick-step: none, size: (3, 2), x-label: [u], y-label: [i]) + + + plot.plot(axis-style: "school-book", ..opts, name: "plot", { + plot.add(((-1, -1), (2, 2)), style: (stroke: red)) + }) + + line((1.7, 0.666 + 0.48), (1.7, 0.666), stroke: (paint: rgb("#009e22"))) + line((1, 0.666), (1.7, 0.666), stroke: (paint: rgb("#009e22"))) + + let offset_x = 0.7 + let offset_y = 0.6 + line((1.7 -offset_x, 0.666 + 0.58-offset_y), (1.7-offset_x, 0.666-offset_y), stroke: (paint: rgb("#009e22"))) + line((0.8-offset_x, 0.666-offset_y), (1.7-offset_x, 0.666-offset_y), stroke: (paint: rgb("#009e22"))) + + content((1.15,0.35), $1$) + content((1.40,0.48), $1$) + content((0.56,-0.1), $Omega$) + content((1.9,0.9), $S$) + + })) + ], + align(left+top)[ + - #text("NICHT", red) Verlustlos + - Streng linear + - Linear + - Quellenfrei + - Ungepolt + - u-gest. + - i-gest. + ], + + // Induktivität + [ + Induktivität + #scale(x: 100%, y: 100%, zap.circuit({ + import zap: * + import cetz.draw: content, line + inductor( + "b1", + (0, 0), + (2, 0), + variant: "ieee", + ) + })) + ], + align(center+horizon)[ + $Phi(t) = L i(t)$\ + $u(t) = L (d i(t))/(d t)$ + $E_L (Phi_1) = Phi_1^2/(2L)$\ + $E_L (i_1) = L/2 i_1^2$ + ], + [ + #scale(x: 75%, y: 75%, cetz.canvas({ + import cetz.draw: * + import cetz-plot: * + + let opts = (x-tick-step: none, y-tick-step: none, size: (2, 1), x-label: [$Phi$], y-label: [$i$]) + + plot.plot(axis-style: "school-book", ..opts, name: "plot", { + + plot.add(((-1, -1), (1, 1)), style: (stroke: red)) + }) + })) + ], + align(left+top)[ + - Verlustlos + - Streng linear + - Linear + - Quellenfrei + - Reaktiv + ], + + // Kapazität + [ + Kapazität + #scale(x: 100%, y: 100%, zap.circuit({ + import zap: * + import cetz.draw: content, line + capacitor( + "b1", + (0, 0), + (2, 0), + ) + })) + ], + align(center+horizon)[ + $q(t) = C u(t)$\ + $i(t) = C (d u(t))/(d t)$\ + $E_C (q_1) = q_1^2/(2C)$\ + $E_C (u_1) = C/2 u_1^2$ + ], + [ + #scale(x: 75%, y: 75%, cetz.canvas({ + import cetz.draw: * + import cetz-plot: * + + let opts = (x-tick-step: none, y-tick-step: none, size: (2, 1), x-label: [u], y-label: [q]) + + plot.plot(axis-style: "school-book", ..opts, name: "plot", { + + plot.add(((-1, -1), (1, 1)), style: (stroke: red)) + }) + })) + ], + align(left+top)[ + - Verlustlos + - Streng linear + - Linear + - Quellenfrei + - Reaktiv + ], + + table.hline(), + + // Dioden :// + // + // ideale Diode + [ + ideale Diode + #scale(x: 100%, y: 100%, zap.circuit({ + import zap: * + import cetz.draw: content, line + //diode("b1", (0, 0), (1., 0), stroke: black, fill: false) + joham.diode("id_di", (0,0), (1,0)) + })) + ], + align(horizon+center, [ + $i=0$ falls $u<0$\ + $i>=0$ falls $u=0$ + ]), + [ + /* + #scale(x: 50%, y: 50%, + cetz.canvas({ + import cetz.draw: * + line((-1.5, 0), (1.5, 0), mark: (end: "straight")) + line((0, -1.5), (0, 1.5), mark: (end: "straight")) + + content( (1.55, 0), $u$, anchor: "west") + content( (0.15, 1.4), $i$, anchor: "west") + + line((-1.5, 0), (0, 0), stroke: red) // u = 0 + line((0, 0), (0, 1.35), stroke: red) // i = 0 + + })) + */ + #scale(x: 75%, y: 75%, cetz.canvas({ + import cetz.draw: * + import cetz-plot: * + + let opts = (x-tick-step: none, y-tick-step: none, size: (2, 1), x-label: [u], y-label: [i]) + + plot.plot(axis-style: "school-book", ..opts, name: "plot", { + plot.add(((-1, 0), (0, 0)), style: (stroke: red)) + plot.add(((0, 0), (0, 1)), style: (stroke: red)) + }) + })) + ], + align(left+top)[ + - Verlustlos + - Passiv + - Quellenfrei + - Gepolt + + + ], + + // reale/pn Diode + [ + reale/pn Diode + #scale(x: 100%, y: 100%, zap.circuit({ + import zap: * + import cetz.draw: content, line + diode("b1", (0, 0), (1., 0), stroke: black, fill: black) + })) + ], + + align(horizon+center, [ + $u_D = u_T dot ln((i_D/I_S)+1) \ + i_D = I_S dot (e^(u_D/U_T)-1)$ + ]), + [ + #scale(x: 75%, y: 75%, cetz.canvas({ + import cetz.draw: * + import cetz-plot: * + + let opts = (x-tick-step: none, y-tick-step: none, size: (2, 1), x-label: [u], y-label: [i]) + let data = plot.add(x => calc.exp(x) - 1, domain: (-2, 2), style: (stroke: red)) + + plot.plot(axis-style: "school-book", ..opts, data, name: "plot") + })) + ], + align(left+top)[ + - Quellenfrei + - Gepolt + - Passiv + - u-gest. + - i-gest. + ], + + // Photodiode + [ + Photodiode + #scale(x: 100%, y: 100%, zap.circuit({ + import zap: * + import cetz.draw: content, line + photodiode("b1", (0, 0), (1., 0), stroke: black, fill: black) + })) + ], + align(horizon+center, + $i = I_S dot (e^(u_D/U_T)-1)- i_L$ + ), + [ + #scale(x: 75%, y: 75%, cetz.canvas({ + import cetz.draw: * + import cetz-plot: * + + let opts = (x-tick-step: none, y-tick-step: none, size: (2, 1), x-label: [u], y-label: [i]) + + plot.plot(axis-style: "school-book", ..opts, name: "plot", { + plot.add(x => calc.exp(x) - 1, domain: (-2, 2), style: (stroke: red)) + + plot.add(x => calc.exp(x) - 2, domain: (-2, 2), style: (stroke: red)) + + plot.add(x => calc.exp(x) - 3, domain: (-2, 2), style: (stroke: red)) + }) + })) + ], + align(left+top)[ + - Gepolt + //- u-gest. + - i-gest. + ], + + // Zenerdiode + [ + Zenerdiode + #scale(x: 100%, y: 100%, zap.circuit({ + import zap: * + import cetz.draw: content, line + zener("b1", (0, 0), (1., 0), stroke: black, fill: black) + })) + ], + align(horizon+center, [ + Durchbruch bei $u=U_Z$ : + $u<=U_Z$ stark leitend + ]), + [ + + ], [], + + + // Konkaver Wiederstand + + table.cell(colspan: 4, image("../images/schaltungstheorie/kw1.png", height: 1cm)), + table.cell(colspan: 4, image("../images/schaltungstheorie/kw2.png", height: 1cm)), + ); + ] ] +#pagebreak() #bgBlock(fill: colorZweiTore, width: 100%)[ #subHeading(fill: colorZweiTore)[OpAmp Schaltungen] @@ -1483,73 +2284,436 @@ ] // Zwei-Tor Tabelle -#bgBlock(fill: colorZweiTore, width: 100%)[ + +#grid(columns: (1fr))[ + #bgBlock(fill: colorZweiTore, width: 100%)[ #subHeading(fill: colorZweiTore)[Zwei-Tor-Übersichts] + + #let opampSymbol = zap.circuit({ + import zap : wire, node + import cetz.draw : line, rect + + joham.ideal-opamp("Op", (0,0), scale: 0.7, invert: true) + + wire("Op.plus", (rel: (-0.25, 0))) + wire("Op.minus", (rel: (-0.25, 0))) + wire("Op.ground", (rel: (0, -0.3))) + wire("Op.out", (rel: (0.2,0))) + + node("a", (to: "Op.plus", rel: (-0.25, 0)), fill: false, label: (content: text($alpha$, fill: rgb("#8b2000")), anchor: "west", distance: 0.05)) + node("b", (to: "Op.minus", rel: (-0.25, 0)), fill: false, label: (content: text($beta$, fill: rgb("#8b2000")), anchor: "west", distance: 0.05)) + node("c", (to: "Op.out", rel: (0.25, 0)), fill: false, label: (content: text($gamma$, fill: rgb("#00318b")), anchor: "east", distance: 0.05)) + node("d", (to: "Op.ground", rel: (0, -0.3)), fill: false, label: (content: text($delta$, fill: rgb("#00318b")), anchor: "south", distance: 0.05)) + + joham.voltage((to: "Op.plus", rel: (-0.25, 0)), (to: "Op.minus", rel: (-0.25, 0)), $u_"in"$) + + joham.voltage((to: "Op.out", rel: (0.25, 0)), (to: "Op.out", rel: (0.25, -0.7)), $u_"out"$, anchor: "west") + }) + #table( fill: (x, y) => if calc.rem(y, 2) == 0 { tableFillHigh } else { tableFillLow }, - columns: (auto, auto, auto, 1fr, 1fr, 1fr), - [*Name*], [*Schaltbild*], [*Ersatz-Schaltbild*], [*Eigenschaften*], [*Beschreibung*], [*Knotenspannungs Analyse*], + columns: (auto, auto, auto, auto, auto), + [*Name*], [*Schaltbild*], [*Ersatz-Schaltbild*], [*Eigenschaften*], [*Beschreibung*], - [Nullor], [], [], [], [$A = mat(0, 0; 0, 0)$], [], + [Nullor], [], [#zap.circuit({ + import zap: * + import cetz.draw: content, line, rect - [OpAmp \ lin], [], [], [], [], [], + joham.nullator("a", (0,0), (0,1.5), scale: 0.5) + joham.norator("b", (0.5,0), (0.5,1.5), scale: 0.5) - [OpAmp \ $U_"sat+"$], [], [], [], [], [], + wire("a.in", (rel: (-0.5, 0))) + wire("a.out", (rel: (-0.5, 0))) + wire("b.in", (rel: (0.5, 0))) + wire("b.out", (rel: (0.5, 0))) - [OpAmp \ $U_"sat-"$], [], [], [], [], [], + node("N1", (rel: (-0.5, 0), to: "a.in"), fill: false) + node("N2", (rel: (-0.5, 0), to: "a.out"), fill: false) + node("N3", (rel: (0.5, 0), to: "b.in"), fill: false) + node("N4", (rel: (0.5, 0), to: "b.out"), fill: false) - [VCVS], [], [], [], [$H' = mat(0, 0; mu, 0) quad A = mat(1/mu 0; 0, 0)$], [], + })], + [ + - Reziprok + - Aktiv + - Symetrisch + ], [$ A = mat(0, 0; 0, 0) $], - [VCCS], [], [], [], [$G = mat(0, 0; g, 0) quad A = mat(0, -1/g; 0, 0)$], [], + [OpAmp \ linear Bereich \ (4-polig)], opampSymbol, [#zap.circuit({ + import zap: * + import cetz.draw: content, line, rect - [CCVS], [], [], [], [$R = mat(0, 0, r, 0) quad A = mat(0, 0; 1/r, 0)$], [], + joham.nullator("a", (0,0), (0,1.5), scale: 0.5) + joham.norator("b", (0.5,0), (0.5,1.5), scale: 0.5) - [CCCS], [], [], [], [$H = mat(0, 0; beta, 0) quad A = mat(0, 0; 0, -1/beta)$], [], + wire("a.in", (rel: (-0.5, 0))) + wire("a.out", (rel: (-0.5, 0))) + wire("b.in", (rel: (0.5, 0))) + wire("b.out", (rel: (0.5, 0))) - [Übertrager], [], [], [], [], [], + node("N1", (rel: (-0.5, 0), to: "a.in"), fill: false, label: (content: text($beta$, fill: rgb("#8b2000")), anchor: "west", distance: 0.05)) + node("N2", (rel: (-0.5, 0), to: "a.out"), fill: false, label: (content: text($alpha$, fill: rgb("#8b2000")), anchor: "west", distance: 0.05)) + node("N3", (rel: (0.5, 0), to: "b.in"), fill: false, label: (content: text($delta$, fill: rgb("#00318b")), anchor: "east", distance: 0.05)) + node("N4", (rel: (0.5, 0), to: "b.out"), fill: false, label: (content: text($gamma$, fill: rgb("#00318b")), anchor: "east", distance: 0.05)) + + joham.voltage("N2", "N1", $u_d$) + joham.voltage("N4", "N3", $U_"out" = "bel."$, anchor: "west") + + })], [ + - Reziprok + - Aktiv + - Symetrisch + ], [ + Für $u_d = 0 <=> abs(u_"out") < U_"sat"$ \ + ], + + [OpAmp \ $U_"sat+"$], opampSymbol, [#zap.circuit({ + import zap : wire, vsource, node + import cetz.draw : line, rect + + node("a", (0,1), fill: false, label: (content: text($alpha$, fill: rgb("#8b2000")), anchor: "west", distance: 0.05)) + node("b", (0,0), fill: false, label: (content: text($beta$, fill: rgb("#8b2000")), anchor: "west", distance: 0.05)) + + wire((0,1), (0.4, 1)) + wire((0,0), (0.4, 0)) + + joham.voltage((0.4, 1), (0.4, 0), $u_d$) + joham.voltage((1.3, 1), (1.3, 0), $U_"sat"$, anchor: "west") + + vsource("v", (1,1), (1,0), scale: 0.4, fill: none) + + wire((1,1), (1.3,1)) + wire((1,0), (1.3,0)) + + node("c", (1.3,1), fill: false, label: (content: text($gamma$, fill: rgb("#00318b")), anchor: "east", distance: 0.05)) + node("d", (1.3,0), fill: false, label: (content: text($delta$, fill: rgb("#00318b")), anchor: "east", distance: 0.05)) + })], [], [Für $u_d > 0$], + + [OpAmp \ $U_"sat-"$], opampSymbol, [#zap.circuit({ + import zap : wire, vsource, node + import cetz.draw : line, rect + + node("a", (0,1), fill: false, label: (content: text($alpha$, fill: rgb("#8b2000")), anchor: "west", distance: 0.05)) + node("b", (0,0), fill: false, label: (content: text($beta$, fill: rgb("#8b2000")), anchor: "west", distance: 0.05)) + node("c", (1.3,1), fill: false, label: (content: text($gamma$, fill: rgb("#00318b")), anchor: "east", distance: 0.05)) + node("d", (1.3,0), fill: false, label: (content: text($delta$, fill: rgb("#00318b")), anchor: "east", distance: 0.05)) + + wire((0,1), (0.4, 1)) + wire((0,0), (0.4, 0)) + + joham.voltage((0.4, 1), (0.4, 0), $u_d$) + joham.voltage((1.3, 1), (1.3, 0), $- U_"sat"$, anchor: "west") + + vsource("v", (1,1), (1,0), scale: 0.4, fill: none) + + wire((1,1), (1.3,1)) + wire((1,0), (1.3,0)) + })], [], [Für $u_d < 0$], + + [VCVS], [#zap.circuit({ + import zap : vsource, node, disource, dvsource, wire + import cetz.draw : line, rect, mark, content + + node("A", (0,0), fill: false) + node("B", (0,1), fill: false) + node("C", (0.8,0), fill: false) + node("D", (0.8,1), fill: false) + + joham.voltage((0, 1), (0, 0), $u_"in"$, anchor: "west") + dvsource("S", (0.8,0), (0.8,1), fill: none, scale: 0.4) + + joham.voltage((1.1, 1), (1.1, 0), $u_"out" = mu u_"in"$, anchor: "west") + })], [], [ + - NICHT Verlustlos + - NICHT Reziprok + - Aktiv + - NICHT Symetrisch + ], [$ H' = mat(0, 0; mu, 0) quad A = mat(1/mu, 0; 0, 0) $], + + [VCCS], [#zap.circuit({ + import zap : vsource, node, disource, dvsource, wire + import cetz.draw : line, rect, mark, content + + node("A", (0,0), fill: false) + node("B", (0,1), fill: false) + node("C", (0.8,0), fill: false) + node("D", (0.8,1), fill: false) + + joham.voltage((0, 1), (0, 0), $u_"in"$, anchor: "west") + disource("S", (0.8,0), (0.8,1), fill: none, scale: 0.4) + + line((0.8,0.10), (0.8,0.09), mark: (end: ">", scale: 0.4, fill: black)) + content((0.9, 0.15), $i_"out" = g u_"in"$, anchor: "west") + + })], [], [ + - NICHT Verlustlos + - NICHT Reziprok + - Aktiv + - NICHT Symetrisch + ], [$ G = mat(0, 0; g, 0) quad A = mat(0, -1/g; 0, 0) $], + + [CCVS], [#zap.circuit({ + import zap : vsource, node, disource, dvsource, wire + import cetz.draw : line, rect, mark, content + + node("A", (0,0), fill: false) + node("B", (0,1), fill: false) + node("C", (0.8,0), fill: false) + node("D", (0.8,1), fill: false) + + wire((0,0), (0,1), i: (content: $i_"in"$, invert: true, anchor: "east", distance: 0.1), size: 0.2) + dvsource("S", (0.8,0), (0.8,1), fill: none, scale: 0.4) + + joham.voltage((1.1, 1), (1.1, 0), $u_"out" = r i_"in"$, anchor: "west") + })], [], [ + - NICHT Verlaustlos + - NICHT Reziprok + - Aktiv + - NICHT Symetrisch + ], [$ R = mat(0, 0; r, 0) quad A = mat(0, 0; 1/r, 0) $], + + [CCCS], [#zap.circuit({ + import zap : vsource, node, disource, dvsource, wire + import cetz.draw : line, rect, mark, content + + node("A", (0,0), fill: false) + node("B", (0,1), fill: false) + node("C", (0.8,0), fill: false) + node("D", (0.8,1), fill: false) + + wire((0,0), (0,1), i: (content: $i_"in"$, invert: true, anchor: "east", distance: 0.1), size: 0.2) + disource("S", (0.8,0), (0.8,1), fill: none, scale: 0.4) + + line((0.8,0.15), (0.8,0.1), mark: (end: ">", scale: 0.2, fill: black)) + content((0.9, 0.15), $i_"out" = beta i_"in"$, anchor: "west") + })], [], [ + - NICHT Verlustlos + - NICHT Reziprok + - Aktiv + - NICHT Symetrisch + ], [$ H = mat(0, 0; beta, 0) quad A = mat(0, 0; 0, -1/beta) $], + + [Übertrager], [#zap.circuit({ + import zap : vsource, node, disource, dvsource, wire + import cetz.draw : line, rect, mark, content + + joham.transformer("T", (0,0), scale: 0.35) + + line((-0.6,0.58), (-0.5,0.58), mark: (end: ">", scale: 0.4, fill: black)) + line((0.5,0.58), (0.6,0.58), mark: (start: ">", scale: 0.4, fill: black)) + + content((0.5, 0.8), $i_2$, anchor: "west") + content((-0.65, 0.8), $i_1$, anchor: "west") + joham.voltage((0.9, 0.7), (0.9, -0.7), $u_2$, anchor: "west") + joham.voltage((-0.9, 0.7), (-0.9, -0.7), $u_1$, anchor: "east") + }) + $ i_2 &= - ü i_1 &quad i_1 &= - 1/ü i_2 \ + u_2 &= 1/ü u_1 &quad u_1 &= ü u_2 + $ + ], [ + #align(horizon+center, zap.circuit({ + import zap : * + import cetz.draw : line, rect, mark, content + + joham.gyrator("G1", (0,0), scale: 0.4, constant: $G_d$) + joham.gyrator("G2", (1.6,0), scale: 0.4, constant: $ü G_d$) + joham.ground("G", (0.8, -0.67)) + + node("N1", "G1.12", fill: false, label: (content: $beta$, distance: 0.1)) + node("N1", "G1.11", fill: false, label: (content: $alpha$, distance: 0.1)) + node("N1", "G2.22", fill: false, label: (content: $delta$, distance: 0.1)) + node("N1", "G2.21", fill: false, label: (content: $gamma$, distance: 0.1)) + + node("N1", (0.8, 0.67), label: (content: $epsilon$, distance: 0.1)) + node("N1", (0.8, -0.67)) + + })) + ], + [ + - Verlustlos + - Reziprok + - Passiv + - Schief-Symetrisch (Symetrisch für $ü = plus.minus 1$) + + ], + [$ H = mat(0, ü; -ü, 0) &quad + H' = mat(0, -1/ü; 1/ü, 0) \ + A = mat(ü, 0; 0, 1/ü) &quad A' = mat(1/ü, 0; 0, ü) \ + + M = mat(1, -ü; 0, 0) &quad N = mat(0, 0; ü, 1) + $], + [Gyrator], - [], - [], - [ - - Antireziprok, Antisymetrisch - - Auch Positiv-Immitanz-Inverter + [#zap.circuit({ + import zap : * + import cetz.draw : line, rect, mark, content + + joham.gyrator("G", (0, 0), scale: 0.35) + + line((-0.6,0.58), (-0.5,0.58), mark: (end: ">", scale: 0.4, fill: black)) + line((0.5,0.58), (0.6,0.58), mark: (start: ">", scale: 0.4, fill: black)) + + content((0.5, 0.8), $i_2$, anchor: "west") + content((-0.65, 0.8), $i_1$, anchor: "west") + joham.voltage((1, 0.7), (1, -0.7), $u_2$, anchor: "west") + joham.voltage((-1, 0.7), (-1, -0.7), $u_1$, anchor: "east") + + content((-0.7, -0.8), text([Output $cal(F)^d$], fill: rgb("#8b2000"))) + + content((0.8, -0.8), text([Input $cal(F)$], fill: rgb("#00318b"))) + }) + $ u_1 = - R_d i_2 &quad i_1 = 1/R_d u_2 \ + u_2 = R_d i_1 &quad i_2 = - 1/R_d u_1 + $ ], - [$R = mat(0, -R_d; R_d, 0) quad G = mat(0, G_d; -G_d, 0) \ A = mat(0, R_d; 1/R_d, 0) quad A' = mat(0, -R_d; -1/R_d, 0)$], - [], + [#align(center+horizon, image("../images/schaltungstheorie/knotenpotenzial/gyraptorESD.png", height: 3cm))], + [ + - Verlustlos + - NICHT Reziprok (Antireziprok) + - Nicht Symetrisch (schiefsysmetrisch) + + Der Pfeil zeigt AUF die NORMAL Eintor + ], + [$ R = mat(0, -R_d; R_d, 0) &quad G = mat(0, G_d; -G_d, 0) \ + A = mat(0, R_d; 1/R_d, 0) &quad A' = mat(0, -R_d; -1/R_d, 0) \ + R_d = 1/G_d + + $], [NIK], - [], - [], - [], + [#zap.circuit({ + joham.zweitor("NIK", (0,0), label: "NIK") + })], + [#grid( + columns: (auto, auto), + column-gutter: -3mm, + align(center+horizon, scale(75%, zap.circuit({ + import zap : * + import cetz.draw : line, rect, mark, content + + node("A", (-2, 0), fill: false) + node("B", (2, 0), fill: false) + node("C", (-2, 1.5), fill: false) + node("D", (2, 1.5), fill: false) + + wire("A", "B") + + joham.norator("Q1", (-1.5, 2), (1.5, 2), scale: 0.5) + node("N1", (-1.5,1.5)) + node("N2", (0,1.5)) + node("N3", (1.5,1.5)) + resistor("R1", "N1", "N2", scale: 0.5, fill: none, label: (content: $R$, anchor: "south", distance: 1mm)) + resistor("R2", "N2", "N3", scale: 0.5, fill: none, label: (content: $R$, anchor: "south", distance: 1mm)) + wire("N1", "Q1.in") + wire("N3", "Q1.out") + wire("N1", "C", i: (content: $i_1$, invert: true)) + wire("N3", "D", i: (content: $i_2$, invert: true)) + joham.nullator("Q0", "N2", n:"*-*", (0,0), scale: 0.5) + + joham.voltage("C", "A", $u_1$) + joham.voltage("D", "B", $u_2$) + + content((0,-0.4), $k = +1$, anchor: "south") + }))), + align(center+horizon, scale(75%, zap.circuit({ + import zap : * + import cetz.draw : line, rect, mark, content + + node("A", (-2, 0), fill: false) + node("B", (2, 0), fill: false) + node("C", (-2, 1.5), fill: false) + node("D", (2, 1.5), fill: false) + + wire("A", "B") + + joham.nullator("Q1", (-1.5, 2), (1.5, 2), scale: 0.5) + node("N1", (-1.5,1.5)) + node("N2", (0,1.5)) + node("N3", (1.5,1.5)) + resistor("R1", "N1", "N2", scale: 0.5, fill: none, label: (content: $R$, anchor: "south", distance: 1mm)) + resistor("R2", "N2", "N3", scale: 0.5, fill: none, label: (content: $R$, anchor: "south", distance: 1mm)) + wire("N1", "Q1.in") + wire("N3", "Q1.out") + wire("N1", "C", i: (content: $i_1$, invert: true)) + wire("N3", "D", i: (content: $i_2$, invert: true)) + joham.norator("Q0", "N2", n:"*-*", (0,0), scale: 0.5) + + joham.voltage("C", "A", $u_1$) + joham.voltage("D", "B", $u_2$) + + content((0,-0.4), $k = -1$, anchor: "south") + })))) + + ], [ - - Akitv + - Aktiv - Antireziprok - Symetrisch für $abs(k) = 1$ ], - [$H = mat(0, -k; -k, 0) quad H' = mat(0, -1/k; -1/k, 0); A = mat(-k, 0; 0, 1/k) quad A'= mat(-1/k, 0; 0, k)$], + [$ H = mat(0, -k; -k, 0) quad H' = mat(0, -1/k; -1/k, 0) \ A = mat(-k, 0; 0, 1/k) quad A'= mat(-1/k, 0; 0, k) $], - [T-Glied], - [], - [], - [], + [NII], + [#zap.circuit({ + joham.zweitor("NII", (0,0), label: "NII") + }) \ Negativ Imitanz Inverter ], + [#align(center+horizon, scale(100%, zap.circuit({ + import zap : * + import cetz.draw : line, rect, mark, content + + node("A", (-2, 0), fill: false) + node("B", (2, 0), fill: false) + node("C", (-2, 1.5), fill: false) + node("D", (2, 1.5), fill: false) + + node("A1", (-1.2, 0)) + node("B1", ( 1.2, 0)) + node("C1", (-1.2, 1.5)) + node("D1", ( 1.2, 1.5)) + + resistor("R1", "A1", "B1", scale: 0.5, label: (content: $R$, distance: 0.1)) + resistor("R1", "C1", "D1", scale: 0.5, label: (content: $R$, distance: 0.1)) + + joham.norator("N", (0,1.5/2), "D1", scale: 0.5) + wire("A1", (0,1.5/2)) + joham.nullator("N1", "C1", (0,1.5/2), scale: 0.5) + wire("B1", (0,1.5/2)) + wire("A", "A1") + wire("B", "B1") + wire("C", "C1", i: (content: $i_1$, distance: 0.1)) + wire("D", "D1", i: (content: $i_2$, distance: 0.1)) + + joham.voltage("C", "A", $u_1$) + joham.voltage("D", "B", $u_2$) + + + })))], [ - ], - [], - [$pi$-Glied], - [], - [], + ], [ - + $A_"NII" = mat(0, R; -1/R, 0)$ ], + + [Idealer Zirkulator \ (Drei-Tor)], + [#image("../images/schaltungstheorie/knotenpotenzial/zirkulatorBild.png", height: 3cm)], + [#image("../images/schaltungstheorie/knotenpotenzial/circulator.png", height: 3cm)], + [ + - NICHT Reziprok + - Verlustlos + ], + [$ G = mat(0, R, -R; -R, 0, R; R, -R, 0) quad quad quad G = mat(0, G, -G; -G, 0, G; G, -G, 0) \ + u_1 = (i_2 - i_3) R \ + u_2 = (i_3 - i_1) R \ + u_3 = -(u_1 + u_2) $] + ) + ] ] // Knoten Spannungs Analyse - // Tor Eigenschaften #bgBlock(fill: colorEigenschaften, width: 100%)[ #subHeading(fill: colorEigenschaften)[Tor Eigenschaften] @@ -1561,11 +2725,17 @@ 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$], + [*passiv*\ (nimmt Energie auf)\ $<=> not$aktiv], + [$forall (u,i) in cal(F): u dot i >= 0$ + + Verlustlos $=>$ Passiv + ], [ - $jMat(U)^T jMat(I) + jMat(I)^T jMat(U)$\ - $forall vec(jVec(u), jVec(v)) in cal(F) : jVec(u)^T jVec(i) >=0$ + $jMat(U)^T jMat(I) + jMat(I)^T jMat(U) >= 0$\ + $forall vec(jVec(u), jVec(v)) in cal(F) : jVec(u)^T jVec(i) >=0 \ + jMat(G) = - jMat(G)^T quad jMat(R) = - jMat(R)^T$ \ + Verlustlos $=>$ Passiv + ], [], @@ -1575,13 +2745,21 @@ Kennline nur $u\/i$-Achsen ], - [$forall vec(jVec(u), jVec(v)) in cal(F) : jVec(u)^T jVec(i) = 0$], + [$ + jMat(U)^T jMat(I) + jMat(I)^T jMat(U) = 0 \ + forall vec(jVec(u), jVec(v)) in cal(F) : jVec(u)^T jVec(i) = 0 \ + $], + grid(columns: (auto, auto), + column-gutter: 5mm, [ $u\/q$-Plot: Wenn keine Schleifen \ - $i\/Phi$-Plot: Wenn keine Schleifen \ + $i\/Phi$-Plot: Wenn keine Schleifen + ], [ $u\/i$-Plot: Wenn Auf Achse \ $Phi\/q$-Plot: Wenn auf Achse \ - ], + ], [ + + ]), [*linear*], [Kennline ist Gerade], @@ -1596,7 +2774,7 @@ [$(qty("0", "A"), qty("0", "V")) in cal(F)$], [$(qty("0", "A"), qty("0", "V")) in cal(F)$], - [*streng linear*], [linear UND quellenfrei], [linear UND quellenfrei\ Darstellbar: Nur Matrix], [], + [*streng linear*], [linear UND quellenfrei UND ungepolt], [linear UND quellenfrei\ Darstellbar: Nur Matrix], [], [*ungepolt* \ (Punkt sym.)], [$(u,i) in cal(F) <=> (-u, -i) in cal(F)\ @@ -1613,13 +2791,16 @@ $jMat(G) = jMat(P) jMat(G) jMat(P), space jMat(R) = jMat(P) jMat(R) jMat(P), quad jMat(P) = mat(0, 1; 1, 0) \ det(H) = 1,$ + Für Eintore: Streng Linear $=>$ Umkehrbar + ], [], [*Reziprok*], [Immer Reziprok], [ - $cal(F)$ symetrisch $=> cal(F)$ reziprok + Symetrisch $=>$ Reziprok \ + Für Eintore: Streng Linear $=>$ Reziprok $jMat(U)^T jMat(I) - jMat(I)^T jMat(U) = 0 \ jMat(R)^T = jMat(R), quad jMat(G)^T = jMat(G) quad h_21 = -h_12 \ det(jMat(A)) = 1 quad det(jMat(A')) = 1 quad h'_21 = -h'_12$], @@ -1631,6 +2812,7 @@ ) ] +#pagebreak() #bgBlock(fill: colorZweiTore)[ #set text(size: 10pt) @@ -1657,8 +2839,8 @@ $bold(G) quad mat(S, S; S, S)$, $bold(H) quad mat(Omega, 1; 1, S)$, $bold(H') quad mat(S, 1; 1, Omega)$, - $bold(A) quad mat(S, 1; 1, Omega)$, - $bold(A') quad mat(S, 1; 1, Omega)$, + $bold(A) quad mat(1, Omega; S, 1)$, + $bold(A') quad mat(1, Omega; S, 1)$, $bold(R)$, $mat(r_11, r_12; r_21, r_22)$, @@ -1715,13 +2897,28 @@ inset: (bottom: 4mm, top: 4mm), gutter: 0.1mm, fill: (x, y) => if x != 0 and calc.rem(x, 2) == 0 { rgb("#c5c5c5") } else { white }, - [], $bold(R) jVec(i) = jVec(u)$, $bold(G) jVec(u) = jVec(i)$, $bold(H) vec(i_1, u_2) = vec(u_1, i_2)$, $bold(H') vec(u_1, i_2) = vec(i_1, u_2)$, - $bold(A) vec(u_2, -i_2) = vec(i_1, u_1)$, - $bold(A') vec(u_1, -i_1) = vec(i_2, u_2)$, + $bold(A) vec(u_2, -i_2) = vec(u_1, i_1)$, + $bold(A') vec(u_1, -i_1) = vec(u_2, i_2)$, + [], + [Stromge-steuert], + [Spannung-gesteuert], + [Hybrid-beschreibung], + [Inverse-Hybrid], + [Ketten-Beschreibung], + [Inverse-Ketten], + [], + $jVec(r)vec(i_1, i_2) = vec(u_1, u_2)$, + $jVec(g)vec(u_1, u_2) = vec(i_1, i_2)$, + $jVec(h) vec(i_1, u_2) = vec(u_1, i_2)$, + $jVec(h') vec(u_1, i_2) = vec(i_1, u_2)$, + $jVec(a) vec(u_2, -i_2) = vec(u_1, i_1)$, + $jVec(a') vec(u_1, -i_1) = vec(u_2, i_2)$, ) ] + +#place(bottom+center, float: true)[#text(rgb("#992893"), size: 60pt, font: "DejaVu Sans")[*DON'T PANIC!*]] \ No newline at end of file diff --git a/src/images/ct/betragUndVorzeich.png b/src/images/ct/betragUndVorzeich.png new file mode 100644 index 0000000..7e4aecb Binary files /dev/null and b/src/images/ct/betragUndVorzeich.png differ diff --git a/src/images/ct/einerKomplement.png b/src/images/ct/einerKomplement.png new file mode 100644 index 0000000..a129292 Binary files /dev/null and b/src/images/ct/einerKomplement.png differ diff --git a/src/images/ct/zweierKomplement.png b/src/images/ct/zweierKomplement.png new file mode 100644 index 0000000..8041434 Binary files /dev/null and b/src/images/ct/zweierKomplement.png differ diff --git a/src/images/schaltungstheorie/knotenpotenzial/circulator.png b/src/images/schaltungstheorie/knotenpotenzial/circulator.png new file mode 100644 index 0000000..2d4a626 Binary files /dev/null and b/src/images/schaltungstheorie/knotenpotenzial/circulator.png differ diff --git a/src/images/schaltungstheorie/knotenpotenzial/gyraptorESD.png b/src/images/schaltungstheorie/knotenpotenzial/gyraptorESD.png new file mode 100644 index 0000000..9111cb6 Binary files /dev/null and b/src/images/schaltungstheorie/knotenpotenzial/gyraptorESD.png differ diff --git a/src/images/schaltungstheorie/knotenpotenzial/norator.jpg b/src/images/schaltungstheorie/knotenpotenzial/norator.jpg new file mode 100644 index 0000000..c55a638 Binary files /dev/null and b/src/images/schaltungstheorie/knotenpotenzial/norator.jpg differ diff --git a/src/images/schaltungstheorie/knotenpotenzial/nullator.jpg b/src/images/schaltungstheorie/knotenpotenzial/nullator.jpg new file mode 100644 index 0000000..2a7833c Binary files /dev/null and b/src/images/schaltungstheorie/knotenpotenzial/nullator.jpg differ diff --git a/src/images/schaltungstheorie/knotenpotenzial/schaltKnotenPotenziell12.png b/src/images/schaltungstheorie/knotenpotenzial/schaltKnotenPotenziell12.png new file mode 100644 index 0000000..0284339 Binary files /dev/null and b/src/images/schaltungstheorie/knotenpotenzial/schaltKnotenPotenziell12.png differ diff --git a/src/images/schaltungstheorie/knotenpotenzial/schaltKnotenPotenziell13.png b/src/images/schaltungstheorie/knotenpotenzial/schaltKnotenPotenziell13.png new file mode 100644 index 0000000..cc8bd4d Binary files /dev/null and b/src/images/schaltungstheorie/knotenpotenzial/schaltKnotenPotenziell13.png differ diff --git a/src/images/schaltungstheorie/knotenpotenzial/schaltKontenPotenziell11.png b/src/images/schaltungstheorie/knotenpotenzial/schaltKontenPotenziell11.png new file mode 100644 index 0000000..7235344 Binary files /dev/null and b/src/images/schaltungstheorie/knotenpotenzial/schaltKontenPotenziell11.png differ diff --git a/src/images/schaltungstheorie/knotenpotenzial/zirkulatorBild.png b/src/images/schaltungstheorie/knotenpotenzial/zirkulatorBild.png new file mode 100644 index 0000000..4b344f1 Binary files /dev/null and b/src/images/schaltungstheorie/knotenpotenzial/zirkulatorBild.png differ diff --git a/src/images/schaltungstheorie/kw1.png b/src/images/schaltungstheorie/kw1.png new file mode 100644 index 0000000..91fe0f1 Binary files /dev/null and b/src/images/schaltungstheorie/kw1.png differ diff --git a/src/images/schaltungstheorie/kw2.png b/src/images/schaltungstheorie/kw2.png new file mode 100644 index 0000000..55f5ecd Binary files /dev/null and b/src/images/schaltungstheorie/kw2.png differ diff --git a/src/lib/ableitungs_tabelle.typ b/src/lib/ableitungs_tabelle.typ new file mode 100644 index 0000000..2979961 --- /dev/null +++ b/src/lib/ableitungs_tabelle.typ @@ -0,0 +1,42 @@ + +#let ableitungsTabelle = table( + align: horizon, + columns: (auto, auto, auto), + table.header([*$F(x)$*], [*$f(x)$*], [*$f'(x)$*]), + row-gutter: 1mm, + inset: 1.4mm, + fill: (x, y) => if calc.rem(x, 3) == 0 { color.hsl(180deg, 89.47%, 88.82%) } + else if calc.rem(x, 3) == 1 { color.hsl(180deg, 100%, 93.14%) } else + { color.hsl(180deg, 81.82%, 95.69%) }, + [$1/(q + 1) x^(q+1)$], [$x^q$], [$q x^(q-1)$], + [$ln abs(x)$], [$1/x$], [$-1/x^2$], + [$x ln(a x) - x$], [$ln(a x)$], [$a / x$], + [$2/3 sqrt(a x^3)$], [$sqrt(a x)$], [$a/(2 sqrt(a x))$], + [$e^x$], [$e^x$], [$e^x$], + [$a^x/ln(a)$], [$a^x$], [$a^x ln(a)$], + $-cos(x)$, $sin(x)$, $cos(x)$, + $sin(x)$, $cos(x)$, $-sin(x)$, + $-ln abs(cos(x))$, $tan(x)$, $1/(cos(x)^2)$, + $ln abs(sin(x))$, $cot(x)$, $-1/(sin(x)^2)$, + + [$x arcsin(x) + sqrt(1 - x^2)$], + [$arcsin(x)$], [$1/sqrt(1 - x^2)$], + + [$x arccos(x) - sqrt(1 - x^2)$], + [$arccos(x)$], [$-1/sqrt(1 - x^2)$], + + [$x arctan(x) - 1/2 ln abs(1 + x^2)$], + [$arctan(x)$], [$1/(1 + x^2)$], + + [$x op("arccot")(x) + 1/2 ln abs(1 + x^2)$], + [$op("arccot")(x)$], [$-1/(1 + x^2)$], + + [$x op("arsinH")(x) + sqrt(1 + x^2)$], + [$op("arsinH")(x)$], [$1/sqrt(1 + x^2)$], + + [$x op("arcosH")(x) + sqrt(1 + x^2)$], + [$op("arcosH")(x)$], [$1/sqrt(x^2-1)$], + + [$x op("artanH")(x) + 1/2 ln(1 - x^2)$], + [$op("artanH")(x)$], [$1/(1 - x^2)$], +) \ No newline at end of file diff --git a/src/lib/bit_fields.typ b/src/lib/bit_fields.typ new file mode 100644 index 0000000..464aa7f --- /dev/null +++ b/src/lib/bit_fields.typ @@ -0,0 +1,40 @@ +#import "@preview/cetz:0.4.2" + +#let bitFieldField(name, color, total) = { + (name: name, color: color, total: total) +} + +#let bitFieldGreen = rgb("#8fff57") +#let bitFieldYellow = rgb("#ffe057") +#let bitFieldBlue = rgb("#57a5ff") +#let bitFieldRed = rgb("#ff5757") + +#let bitField(fields: (), BitHeight: 0.5, BitWidth: 0.25) = { + cetz.canvas({ + import cetz.draw : * + let pos = 0; + + let total = 0; + + for f in fields { + total += f.at("total") + } + + for f in fields { + content(((pos + 0.5)*BitWidth, -0.1), raw(str(total - pos - 1)), angle: 90deg, anchor: "east") + + for i in range(f.at("total")) { + rect(((pos + i)*BitWidth, 0), ((pos+i+1)*BitWidth, BitHeight), fill: f.at("color", default: bitFieldBlue)) + content(((pos+i+0.5)*BitWidth, BitHeight*0.5), raw("0")) + } + + content(((pos*BitWidth + f.at("total")*BitWidth*0.5), BitHeight + 0.2), f.at("name"), anchor: f.at("anchor", default: "mid")) + + pos += f.at("total") + + content(((pos - 0.5)*BitWidth, -0.1), raw(str(total - pos)), angle: 90deg, anchor: "east") + + } + }) +} + diff --git a/src/lib/common_rewrite.typ b/src/lib/common_rewrite.typ index cb767f0..042577f 100644 --- a/src/lib/common_rewrite.typ +++ b/src/lib/common_rewrite.typ @@ -69,9 +69,14 @@ $z^* = a - #i b = r e^(-#i phi)$ Konjungiert Erweitern:\ - $(a + b #i)/(c + d #i) = ((a + b #i)(c - d #i))/(c^2 + d² )$ + #grid(columns: (1fr, 1fr), + $(a + b #i)/(c + d #i) = ((a + b #i)(c - d #i))/(c^2 + d² )$, + $1/(a + j b) = (a - j b)/(a^2 + b^2)$ + ) - $r = abs(z) quad phi = cases( + + + $r = abs(z) = sqrt(a + #i b) = sqrt(z z^*) quad phi = cases( + arccos(a/r) space : space a >= 0, - arccos(a/r) space : space a < 0, )$ diff --git a/src/lib/schaltungstheorie/opampTable.typ b/src/lib/schaltungstheorie/opampTable.typ index ebb512e..4612a0e 100644 --- a/src/lib/schaltungstheorie/opampTable.typ +++ b/src/lib/schaltungstheorie/opampTable.typ @@ -267,5 +267,11 @@ $u_"out" = - R_0/R_1 u_"in"$, $u_"out" = (1 + R_0 / R_1) u_"in"$, $$, - $u_"in" = -R_L i_"in"$ + $u_"in" = -R_L i_"in"$, + [], + [VCVS], + [VCVS], + [VCVS], + [], + [CCVS] ) \ No newline at end of file diff --git a/src/lib/schaltungstheorie/tumCustomSymbols.typ b/src/lib/schaltungstheorie/tumCustomSymbols.typ index 570214f..60a9190 100644 --- a/src/lib/schaltungstheorie/tumCustomSymbols.typ +++ b/src/lib/schaltungstheorie/tumCustomSymbols.typ @@ -259,7 +259,7 @@ let custom-style = ( width: 5 * scale, height: 5 * scale, - length: 0.5 * scale, + length: 0, ) let draw(ctx, position, style) = { @@ -428,3 +428,29 @@ voltage(from, to, anchor: anchor, distance: if anchor in ("east", "north") { -distance } else { distance }, label) } + +#let labeledNode(s, center, color: rgb("#00000000"), scale_t: 1, ..style) = { + + ( + ctx => { + // Define a default style + let def-style = (n: 5, inner-radius: .5, radius: 1, stroke: auto, fill: auto) + + // Resolve center to a vector + let (ctx, center) = cetz.coordinate.resolve(ctx, center) + + // Resolve the current style ("star") + let style = cetz.styles.resolve(ctx.style, merge: style.named(), base: def-style, root: "star") + + let paths = ( + cetz.drawable.ellipse(center.at(0), center.at(1), 0, scale_t*0.15, scale_t*0.15, fill: color, stroke: (paint: black, thickness: scale_t + *0.25mm)), + cetz.drawable.content((center.at(0),center.at(1)+0.03), 1, 1, none, text(size: 7pt * scale_t, s)), + ) + ( + ctx: ctx, + drawables: cetz.drawable.apply-transform(ctx.transform, paths) + ) + }, + ) +} \ No newline at end of file