Mathcad, templates og eksport til .mcdx

Mathcad-siden samler beregningsskabeloner, forklaringer og arbejdet med at eksportere strukturerede Markdown-noter til Mathcad Prime. Fokus er at bygge bro mellem dokumentation, formler og genbrugelige templates.

Fra markdown-noter til Mathcad-template

Fra strukturerede noter til Mathcad Prime
#markdown #eksport #mcdx #template
Eksporten er tænkt som en praktisk vej fra noter til beregningsarbejde. Du starter i Markdown med overskrifter, forklarende tekst og formellinjer. Derefter pakkes materialet som en Mathcad Prime .mcdx, så samme grundlag kan bruges både til dokumentation og beregning.
Input
Overskrifter, tekst, inputblokke, formler, enheder og eksempler skrevet i en enkel Markdown-struktur.
Output
En .mcdx-template med tekstregioner, math-regioner og gyldig pakkestruktur målrettet Mathcad Prime.
Hvorfor det giver mening
Mindre dobbeltarbejde, bedre genbrug af noter og en mere direkte vej fra fagligt indhold til opbyggede beregningstemplates.
Hvad eksporten gør i praksis
#markdown #eksport #mcdx
Eksempel på input i Markdown ## 6.3 3-fase – Prime-blok ```text Uf := UL/sqrt(3) If := IL P3f := sqrt(3)*UL*IL*cosphi Q3f := sqrt(3)*UL*IL*sin(phi) ```
Begrænsninger lige nu
#eksport #mcdx #template
Understøttet nu
:=, parenteser, identifikatorer, tal, +, -, *, / samt funktionskald som sqrt(x), sin(x), cos(x) og atan(x).
På vej
Flere enheder, flere tekstvariationer, bredere understøttelse af Prime-primitiver og tættere kobling til templatebiblioteket.
Relation til eksisterende templates
Eksporten skal ikke erstatte de eksisterende Mathcad-templates. Den skal gøre det lettere at bygge nye templates ud fra samme noter og struktur, som du allerede bruger i studiearbejdet.

Mathcad-templates og eksport samlet ét sted

Hent Prime-filer direkte fra Mathcad-siden
#eksport #template #mcdx
De første template-eksporter er nu flyttet ind under Mathcad, så eksporten ikke lever som et separat spor. Brug dem som startpunkt, og læs forklaringerne på samme side.

Indlæser eksportvalg…

Hvis kortene ikke vises, kan du stadig bruge beskrivelserne og de eksisterende templates nedenfor.

Eksporten bruger den samme Prime-pipeline, men er nu samlet i Mathcad-sektionen på hovedsitet.

Anvendelser

Hvor Markdown-eksporten er nyttig
#markdown #template #elektro
Rapport og aflevering
Brug samme notegrundlag til forklaring, inputblokke og beregningsskabelon, så rapportdelen og Prime-delen passer bedre sammen.
Undervisning og repetition
Saml formler og korte forklaringer i Markdown og eksporter en template, der kan bruges igen i timer, øvelser og repetition.
Templateopbygning
Byg sektionsopdelte beregningsark til fx 1-faset AC, 3-fasesystemer, transformere eller køletekniske beregninger.
Dokumentation af beregningsgang
Gør det lettere at vise, hvor input kommer fra, hvilke formler der bruges, og hvordan en template er tænkt opbygget.

Grundprincip - vektorer som komplekse tal

Vektorrepræsentation i Mathcad
#vektor #fasor
Begge templates repræsenterer vektorer/fasorer som komplekse tal: Definer en fasor med polær notation:
$$V1 := 230\cdot V∠45^\circ \\ V2 := 45\cdot \sqrt{3} V∠0^\circ$$
eller med eksponentiel form:
$$a := 5\cdot e^{1j\cdot 0\cdot deg} \\ b := 5\cdot e^{1j\cdot 120\cdot deg}$$
Konvertering mellem kompleks og kolonnevektor:
$$C2Vec(z) := \;\text{[Re(z), Im(z)]}ᵀ \\ Vec2C(v) := v\cdot \;\text{[1, 1i]}ᵀ$$
Fordelen ved kompleks repræsentation: addition, subtraktion og rotation er direkte regnoperationer - V1 - V2 giver differensvektoren.

Template 1 - Polar plot (fasordiagram)

Vec / VecI - tegn pil i polært koordinatsystem
#vektor #fasor #plot #elektro
Bruges til fasordiagrammer i elektroteknik - spændinger og strømme plottes i polære koordinater.

Opsætning i toppen af template:

$$AHdSize := 20 \\ AHdAspect := 1/4$$
Vec(P, V) - tegner spændingsvektor (enhed V) fra startpunkt P med vektor V.
VecI(P, A) - tegner strømvektor (enhed A) - separat pil-stil så spændinger og strømme kan skelnes visuelt.

Brug:

$$V1 := 230\cdot V∠45^\circ \\ V4 := 100 A∠90^\circ$$
$$voltages := stack(Vec(org, V1), Vec(org, V2))$$
$$currents := stack(VecI(orgA, V4))$$
$$diff := Vec(V2, V1-V2)$$
Differensvektor fra spids af V2 til spids af V1. Plot i polært koordinatsystem:
Y-akseX-akseViser
|voltages|arg(voltages)Spændingsvektorernes længde og vinkel
|diff|arg(diff)Differensvektor
|currents|arg(currents)Strømvektorer

Husk: org := (0 − 1i·0) V og orgA := (0 − 1i·0) A - startpunktet skal have korrekt enhed.

Eksempel - serie RL-kredsløb: U_R og U_L er 90° forskudt, U_tot er resultanten:

90° 180° U_R 100 V∠0° U_L 100 V∠90° U_tot 141 V∠45°
↓ Download template

Template 2 - XY plot (kartesisk vektordiagram)

Vec / VecI - tegn pil i XY-koordinatsystem
#vektor #plot
Bruges til kartesiske vektordiagrammer - f.eks. kræfter, hastigheder, kraftparallelogrammer.

Vec(P, V) - genererer plotdata for en pil fra startpunkt P i retning V.
VecI(P, A) - samme, men med alternativ pilestil.

Brug:
$$PA := 0 + 1j\cdot 0$$
Startpunkt (origo).
$$a := 5\cdot e^{1j\cdot 0\cdot deg} \\ b := 5\cdot e^{1j\cdot 120\cdot deg} \\ c := 5\cdot e^{-1j\cdot 120\cdot deg}$$
$$Pa := Vec(PA, a) \\ Pb := Vec(PA, b) \\ Pc := Vec(PA, c)$$
Plot i XY-koordinatsystem - indsæt på Y-aksen og X-aksen:
Y-akseX-akse
Im(Pa), Im(Pb), Im(Pc)Re(Pa), Re(Pb), Re(Pc)

Hoved-til-hale addition og resultantvektor:

$$V1 := 3+2i \\ V2 := 4-3i \\ P := 1+4i$$
$$Pd := stack(Vec(P, V1), Vec(P+V1, V2), Vec(P, V1+V2), VecI(P, V2))$$
Plot: Im(Pd) på Y-aksen, Re(Pd) på X-aksen.
Vec(P, V1+V2) er resultantvektoren - den går direkte fra startpunkt til endepunkt.

Eksempel - hoved-til-hale: V₁=(3+2i), V₂=(2+3i), P=(2+1i). Orange stiplede = resultant:

Re Im P V₁+V₂ V₁ (3+2i) V₂ (2+3i)
↓ Download template
Vigtige hjælpefunktioner i XY-templaten
#vektor #plot
FunktionHvad den gør
C2Vec(z)Konverterer komplekst tal → 2×1 kolonnevektor [Re, Im]ᵀ
Vec2C(v)Konverterer kolonnevektor → komplekst tal
ravel(X)Udflader matrix til kolonnevektor aka. samler rækker
cons(a, b)Sammensætter to elementer til en rækkevektor [a b]
replicate(p, v)Gentager element v præcis andtal p gange i en vektor
Vec2Vec&Size(V)Normaliserer V til kolonneform og returnerer [V, n]
stack(A, B, ...)Sætter plotdata fra flere vektorer under hinanden - NaN bruges som separator så pilene ikke forbindes

NaN-trick: Hvert kald til Vec() ender med NaN - dette får Mathcad til at løfte pennen, så separate pile ikke tegnes forbundet.

Deep dive - logikken bag vektortegning i Mathcad

Hvorfor komplekse tal og ikke matricer?
#vektor #plot

Mathcad har ingen indbygget funktion til at tegne vektorer. Man kan kun plotte punkter og linjer. Hele vektor-templaten er et hack oven på plotfunktionen.

2x1 matrix (kolonnevektor)

$\begin{bmatrix} x \\ y \end{bmatrix}$

Kræver indeksering for at få x og y ud. Kan ikke direkte plottes som en serie af punkter. Rotation kræver 2x2 rotationsmatrix.

Komplekst tal

$x + yi$

Re = x, Im = y. Direkte plottbar. Rotation = multiplikation. $|V|$ = længde, $\arg(V)$ = vinkel - gratis.

Konvertering mellem de to
$$C2Vec(z) := \begin{bmatrix} \text{Re}(z) \\ \text{Im}(z) \end{bmatrix} \\ Vec2C(v) := v \cdot \begin{bmatrix} 1 \\ 1i \end{bmatrix}$$
C2Vec - komplekst tal til kolonnevektor (når du skal bruge x/y separat).
Vec2C - kolonnevektor til komplekst tal (når du skal plotte).
Punkt vs. vektor - den vigtige skelnen
#vektor #plot
Punkt

$(2, 5)$ er en position i planet.

$P := 1 + 4i$

Vektor

Forskellen mellem to punkter - har retning og længde, men ingen fast position.

$V := 3 + 2i$ (3 i x, 2 i y)

Begge repræsenteres som komplekse tal, men bruges forskelligt. Vec(P, V) tegner en pil fra punkt $P$ i retning $V$. Slutpunkt = $P + V$.

Vektor mellem to punkter
$$Vec(P_1,\; P_2 - P_1)$$
Abstrakt vektor fra origo
$$Vec(0,\; V)$$
Anatomi af Vec() - hvordan en pil konstrueres
#vektor #plot

Vec(P, V) genererer en sekvens af komplekse punkter som Mathcad plotter som en pil.

1 Pile-kroppen
$$r \leftarrow \text{stack}(P,\; P2 \leftarrow P + V)$$
To punkter: startpunkt $P$ og slutpunkt $P2 = P + V$. Mathcad tegner en linje mellem dem - pilens skaft.
2 Enhedsvektoren
$$v \leftarrow \frac{V}{|V|}$$
Normaliserer $V$ til længde 1. Bruges til at orientere pilespidsen. En if V ≠ 0-check forhindrer division med nul.
3 Pilespidsen (arrowhead)
$$AHd := \begin{bmatrix} 0 & -0.5+0.3i & 0 & -0.5-0.3i \end{bmatrix}^T \cdot 1$$
Fire punkter i et lokalt koordinatsystem (pil peger mod højre):
  • $0$ - spidsen
  • $-0.5 + 0.3i$ - flig (bagud + op)
  • $0$ - tilbage til spids
  • $-0.5 - 0.3i$ - flig (bagud + ned)
0 −.5+.3i −.5−.3i
4 Rotation og placering
$$r \leftarrow \text{stack}(r,\; P2 + AHd \cdot v)$$
$AHd \cdot v$ roterer pilespidsen. Kompleks multiplikation drejer alle punkter med vektorens vinkel. Derefter forskydes til slutpunktet $P2$.
5 NaN-separator
$$\text{stack}(r, \text{NaN})$$
NaN = "løft pennen". Uden dette ville Mathcad tegne en streg fra pilespidsen til den næste vektors startpunkt.
Pilespidsens geometri - AHd, AHdSize og AHdAspect
#vektor #plot #elektro
XY-template (simpel)
$$AHd := \begin{bmatrix} 0 \\ -0.5+0.3i \\ 0 \\ -0.5-0.3i \end{bmatrix} \cdot 1$$
Hårdkodet. Skaleringsfaktoren ($\cdot 1$) bestemmer størrelsen.
Polær template (fleksibel)
$$AHdSize := 20$$
$$AHdAspect := \frac{1}{4}$$
$$AHd := [\ldots]^T \cdot AHdSize \cdot V$$
AHdSize = pilelængde i enheder.
AHdAspect = bredde/længde (1/4 = slank pil).
$\cdot V$ = enhed - ellers klager Mathcad.
Hvorfor Vec() og VecI() er to funktioner
Vec(P, V) bruger AHd med enhed V (volt).
VecI(P, A) bruger AHdI med enhed A (ampere).
Separate pilespidser = spændinger og strømme kan skelnes visuelt i samme diagram.
Rotation via kompleks multiplikation - hvorfor det virker
#vektor #plot
Kerneprincippet
$$z_1 \cdot z_2 = r_1 r_2 \cdot e^{i(\theta_1 + \theta_2)}$$
Længderne ganges. Vinklerne adderes. Multiplikation er rotation.

Når $v$ er en enhedsvektor ($|v| = 1$) med vinkel $\alpha$:

$$AHd \cdot v = AHd \cdot e^{i\alpha}$$

Hvert punkt i pilespidsen roteres med $\alpha$, men beholder sin afstand fra origo. Pilespidsen drejer med, så den altid peger i vektorens retning.

Konkret eksempel
$$V = 5 \cdot e^{i \cdot 45^\circ} \\ v = e^{i \cdot 45^\circ}$$
$$-0.5 + 0.3i \;\xrightarrow{\;45^\circ\;}\; \text{roteret pilespids-punkt}$$
Eksemplet viser, hvordan både vektorretning og pilespids roteres med samme vinkel, så pilen fortsat peger korrekt.
Hjælpefunktionerne i dybden
#vektor #plot
ravel(X) - udfladning af matrix til vektor
$$ravel(X) := \begin{cases} v \leftarrow \text{NaN} \\ \text{for } x \in X: \quad v_{rows(v)} \leftarrow x \\ \text{return } v \end{cases}$$
Mathcad har ingen "flatten". ravel samler alle elementer fra en matrix til en kolonnevektor. Initialiseres med NaN fordi Mathcad kræver en startværdi.
cons(a, b)
$$cons(a, b) := [a \quad b]$$
Wrapper: laver 1x2 rækkevektor. Bruges internt af replicate.
replicate(p, v)
Gentager værdi $v$ præcis $p$ gange i en vektor. Konverterer skalar til vektor, danner par med cons, og looper.
Vec2Vec&Size(V) - normaliser til kolonneform
$$\text{if } rows(V) = 1: \quad W \leftarrow V^T$$
Sikrer at input er en kolonnevektor, uanset om man giver rækkevektor (1xN) eller kolonnevektor (Nx1). Returnerer $[W, n]$ - vektoren + dens størrelse.
Rows(A) / Cols(A) - range-generatorer
$$Rows(A) := 0, 1 \ldots rows(A) - 1 \\ Cols(A) := 0, 1 \ldots cols(A) - 1$$
Genererer 0-baserede loop-ranges over matrixens rækker/kolonner.
Polært vs. kartesisk plot - hvornår bruger man hvad?
#vektor #plot #elektro
XY plot (kartesisk)
Akser: Re(data) / Im(data)
Brug: Kræfter, hastigheder, generel vektoraddition
Fordel: Intuitiv - x/y er direkte aflæselige
Enheder: Ikke nødvendige (dimensionsløs)
Polært plot (fasordiagram)
Akser: arg(data) / |data|
Brug: Fasorer i AC-kredsløb
Fordel: Vinkler aflæses direkte
Enheder: Krævet - org skal have V eller A
Tommelfingerregel
AC-elektroteknik (hvor vinkelforskelle er det vigtige) → polært plot.
Alt andet (mekanik, statik, generel matematik) → XY-plot.
NaN-tricket - flere vektorer i et plot
#vektor #plot
Uden NaN
Mathcad forbinder automatisk alle punkter i et datasæt med en linje.

Hvis man stacker to vektorsæt direkte, tegnes en uønsket forbindelseslinje mellem dem.
Med NaN
Et NaN-punkt er udefineret - Mathcad springer linjen over og starter forfra.

Derfor afsluttes hver vektor med NaN, og man kan frit stacke mange vektorer i et datasæt.
Eksempel - fasor-template:
$$voltages := \text{stack}(Vec(org, V1),\; Vec(org, V2))$$
$$currents := \text{stack}(VecI(orgA, V4))$$
$$diff := Vec(V2,\; V1 - V2)$$
→ Alle tre kan plottes i samme diagram med Im() på y-aksen og Re() på x-aksen