Beginne mit linalg: und schreibe eine Anweisung pro Zeile: Matrizen als A = [1 2; 3 4], Spaltenvektoren als v = (1, 2), verknuepft mit +, -, *, ^T und ^-1.
Funktionen wie det(A), rank(A) oder eigenvalues(A) liefern Ergebnisse, die zugewiesen und weiterverwendet werden koennen, z.B. d = det(A) + rank(A). Ein grosser Anfangsbuchstabe (Det(A)) zeigt zusaetzlich die Rechnung Schritt fuer Schritt.
Markiere einen Operator mit einem eindeutigen Namen, um ihn zu animieren: C = A * @product B. Im Deklarationsblock waehlt operation=product; step=0; die markierte Operation und den angezeigten Schritt (step=-1 ist das Endergebnis). Die Konversionsbuttons ... animieren erzeugen daraus eine klickbare Animation.
linalg:
A = [1 2; 3 4]
B = [0 1; 1 0]
d = Det(A)
C = A * @product B
--declarations--
operation=product;
step=0;
--declarations-end--
Animationen, Deklarationen und weitere Funktionen
Operatoren koennen markiert werden: C = A * @product B. operation=product; step=0; im Deklarationsblock zeigt das anfangs leere Ergebnis. Jeder Schritt addiert ein skalares Produkt zur laufenden Summe (m*n*k Schritte); leere Eintraege bleiben von Nullen unterscheidbar. step=-1 zeigt das Endergebnis, Multiplikation animieren erstellt eine SVG-Klickanimation. Markernamen muessen eindeutig sein; Namen mit Leerzeichen stehen in Anfuehrungszeichen, z.B. @"mein Produkt", und werden im Deklarationsblock URL-kodiert (operation=mein+Produkt;). Fuer MLP-Trainingsanimationen definiere x, target, Gewichte und Bias, dann mlpLayers=#W1,b1,tanh;W2,b2,sigmoid#; mlpStep=0; im Deklarationsblock. MLP-Ziele koennen Skalare (target=0.8) oder Zeilen-/Spaltenvektoren (z.B. target=[0.3,0.7]) sein; intern werden sie zu Spaltenvektoren. MLP-Training animieren zeigt Netzwerk und nur die zur aktuellen Rechnung passenden Matrizen, ein Neuron pro Schritt, mit Vorwaertslauf, Backpropagation, einem SGD-Schritt und einem weiteren Vorwaertslauf zum Vergleich alter und neuer Aktivierungen. Jeder Schritt erklaert die Rechnung; der Loss-Schritt vergleicht Vorhersage und Ziel und erklaert mittleren quadratischen Fehler oder Kreuzentropie. Fuer eine Transformer-Self-Attention-Animation definiere Token-Zeilen X und Gewichte Wq, Wk, Wv (optional Wo), dann attention=#X,Wq,Wk,Wv#; attnTokens=#the,cat,sat#; attnStep=0; (attnCausal=true; maskiert spaetere Tokens). Attention animieren zeigt Queries, Keys, Values, skalierte Scores, zeilenweise Softmax-Gewichte und die gewichtete Summe der Values, mit einem Token-Graphen, dessen Liniendicke die Attention-Gewichte zeigt. Konversionsbuttons erscheinen nur bei passendem Skript: MLP-Steuerung braucht MLP-Deklarationen, Multiplikationssteuerung ein markiertes Matrixprodukt; am letzten Schritt wird Weiter ausgeblendet. Mit svgHeight=800; im Deklarationsblock startet die Web-Ausgabe hoeher (Pixel; 0 behaelt den Standard). Dies gilt fuer alle Diagrammtypen; manuelles Vergroessern bleibt moeglich. Die Buttons ueber der Zeichnung verkleinern/vergroessern, passen sie an die Breite an oder zeigen sie ganz. Aufrufe wie det(A), rank(A), span(A), eigenvalues(A) und eigenvectors(A) liefern wiederverwendbare Ergebnisse. DesignMatrix(x, degree) erstellt die Matrix der Polynomregression $(1,x_i,\ldots,x_i^{degree})$ (Grad 0 bis 12); showPlot=true zeigt jede Potenzfunktion als Kurve mit den Stichprobenpunkten. DesignMatrix(x, degree, y) passt zusaetzlich das Kleinste-Quadrate-Polynom an die Werte y an und zeichnet es (blau) mit den Datenpunkten (rot) und Residuen. svd(A) und evd(A) zeigen ihre Zerlegungen an Ort und Stelle. mean(data), variance(data) und std(data) berechnen Statistiken; ein grosser Anfangsbuchstabe zeigt die Rechenschritte. Klassifikation und Wahrscheinlichkeit: precision(tp, fp), recall(tp, fn) und bayes(prior, likelihood, evidence). binomial(n, p, k) und poisson(lambda, k) liefern P(X=k). Neuronale Netze nutzen dense(W, X, b), relu(Z), sigmoid(Z), tanh(Z), softmax(Z) und explizite Backward-Funktionen. Grosser Anfangsbuchstabe erklaert die Grundlagen; showPlot=true zeigt auch Aktivierungs-/Steigungskurven und Softmax-Klassenanteile. Mit showPlot=true im Deklarationsblock werden 2D-/3D-Objekte und empirische Histogramme mit Mittelwert und Standardabweichung gezeichnet.
Neuronale Netze und explizite Backpropagation
Spalten sind Beispiele, Zeilen sind Merkmale, Neuronen oder Klassen. dense(W, X, b) berechnet Z=W*X+b: W[o,i], X[i,B], b[o,1], Z[o,B]. Nur dense verteilt die Bias-Spalte auf alle Beispiele. Ein Beispiel ist ein Spaltenvektor; [x] hat ein Merkmal. Ein Softmax-Zeilenvektor bedeutet eine Klasse und mehrere Beispiele. Normale Addition verlangt weiter gleiche Formen.
relu(Z), sigmoid(Z) und tanh(Z) arbeiten elementweise auf Skalaren oder Matrizen; softmax(Z) normalisiert jede Matrixspalte stabil. hadamard(A, B) ist elementweise Multiplikation. mse(A, T) mittelt quadratische Fehler ueber alle Eintraege, ohne Faktor 1/2. crossentropy(Z, T) nimmt Logits, nicht Wahrscheinlichkeiten: Softmax und Kreuzentropie werden mit Log-Sum-Exp kombiniert und ueber Beispielspalten gemittelt. Zielspalten sind nichtnegative Wahrscheinlichkeiten mit Summe eins (Toleranz 1e-12); One-Hot- und weiche Labels sind erlaubt. Die Ableitung nutzt die tatsaechliche Zielsumme.
msegrad(A, T) bzw. crossentropygrad(Z, T) startet die Rueckwaertsrechnung und enthaelt bereits die Mittelung des Verlusts. reluback(Z, GA), sigmoidback(Z, GA), tanhback(Z, GA), softmaxback(Z, GA) nehmen die urspruengliche Praeaktivierung Z und den ankommenden Verlustgradienten GA; Ergebnis ist GZ. ReLU nutzt Ableitung null bei null. Softmaxback beruecksichtigt die Kopplung der Klassen. Nach crossentropygrad kein softmaxback: dessen Ableitung ist bereits enthalten.
densegradw(GZ, X) liefert GZ*X^T; densegradb(GZ) summiert Beispielspalten; densegradx(W, GZ) liefert W^T*GZ fuer die vorige Schicht. Keine erneute Mittelung. Vorwaertswerte speichern, alle Gradienten mit den alten Gewichten berechnen, erst dann Wnew=W-eta*gW, bnew=b-eta*gb ausfuehren. Gewoehnliche wiederverwendbare Werte, keine verborgenen Netzwerkobjekte und keine automatische Differentiation.
linalg:
W=[0.2 0.3]
x=(1,2)
b=[0.1]
target=[1]
z=Dense(W,x,b)
a=Sigmoid(z)
loss=Mse(a,target)
ga=Msegrad(a,target)
gz=Sigmoidback(z,ga)
gW=Densegradw(gz,x)
gb=Densegradb(gz)
gx=Densegradx(W,gz)
Wnew=W-0.1*gW
bnew=b-0.1*gb
Grosser Anfangsbuchstabe zeigt konkrete Rechenschritte, Ableitungen und ML-Anwendungen. Benannte Beispiele zeigen zwei Schichten und Batch-Klassifikation mit SGD-Schritten, die den Verlust senken. Nichtendliche/leere Eingaben, Formfehler und Ueberlauf erzeugen Fehler; sehr kleine Aktivierungen oder Gradienten koennen bei Double-Praezision weiterhin unterlaufen. Keine neuen Netzwerkarchitektur-Plots.
Anfaengererklaerungen fuehren gewichtete Beitraege und Bias, Praeaktivierung versus Aktivierung, Ziele und Verlust, lokale Steigungen, ankommende Verlustgradienten und die Kettenregel ein. Backpropagation berechnet Empfindlichkeiten; Gradientenabstieg aendert Parameter separat mit einer Lernrate. Zu grosse Schritte koennen den Verlust erhoehen.
Mit showPlot=true zeigen ReLU, Sigmoid und Tanh Aktivierungs- und Steigungskurven nebeneinander in [-5,5], mit eigenen vertikalen Skalen. Rote Punkte markieren bis zu 12 verschiedene uebergebene Praeaktivierungen; ausserhalb oder wegen des Limits fehlende Punkte werden gemeldet. Bei ReLU markiert ein voller Punkt die gewaehlte Ableitung null bei null; der offene Punkt bei eins ist ausgeschlossen. Steigungen sind keine Gewichtsupdates oder mit dem ankommenden Gradienten multiplizierten Werte. Softmax zeigt gekoppelte Klassenanteile als Balken, keine skalare Aktivierungskurve. Maximal vier Beispielspalten und zwoelf Klassen je Spalte, mit Angabe ausgelassener Wahrscheinlichkeitsmasse und Grenzen; keine Renormierung. Kreuzentropie zeigt die Softmax-Sicht ihrer Logits. Einzelne, verschachtelte, kleingeschriebene und Backward-Aufrufe erzeugen ebenfalls Plots; identische Ansichten werden geteilt und Eingabeschnappschuesse bleiben bei Neudefinition erhalten. Kein Trainingsverlauf wird angenommen. Das benannte ANN-Grundlagenbeispiel zeigt diese Ansichten; showFormulas=false; zeigt nur Plots.
Faltung und Pooling koennen spaeter denselben expliziten Forward/Backward-Vertrag nutzen. Faltung, Pooling, Mehrkanal-Tensoren, automatische Differentiation und Trainingsschleifen sind noch nicht implementiert; ein Kanallayout muss explizit festgelegt werden.
Binomial- und Poisson-Verteilung
binomial(n, p, k) liefert P(X=k) fuer n unabhaengige Versuche mit konstanter Erfolgswahrscheinlichkeit p: choose(n,k)*p^k*(1-p)^(n-k). poisson(lambda, k) liefert exp(-lambda)*lambda^k/k!: ein Modell fuer Ereignisanzahlen mit Erwartungswert lambda im festen Intervall. Rate mal Exposition ergibt lambda. Die Ergebnisse sind skalare Punktwahrscheinlichkeiten, keine kumulierten Wahrscheinlichkeiten oder Zufallsstichproben. Binomial(10, 0.3, 3) und Poisson(4, 2) zeigen eingesetzte Formeln, stabile Log-Rechenschritte, Erwartungswert, Varianz und ML-Anwendungen.
Alle Argumente sind endliche Skalare. n und k sind nichtnegative ganze Zahlen bis 9007199254740991; p liegt in [0,1], lambda in [0,9007199254740991]. Binomial k>n liefert exakt null; negative oder nichtganze Anzahlen erzeugen Fehler. n=0, p=0/1 und lambda=0 werden explizit behandelt. Eine angeforderte positive Wahrscheinlichkeit unterhalb des darstellbaren Double-Bereichs erzeugt einen Fehler.
Mit showPlot=true erzeugen auch zugewiesene und verschachtelte Aufrufe diskrete PMF-Plots. Identische Aufrufe teilen einen Plot. Rot markiert k; liegt k ausserhalb des Fensters, steht dies im Text. Binomial n<=100 zeigt den gesamten Traeger. Sonst werden bis zu 101 aufeinanderfolgende Anzahlen nahe dem Mittelwert gezeigt (ungefaehr sechs Standardabweichungen plus sechs Anzahlen je Seite, maximal fuenfzig). Fenster und geschaetzte Wahrscheinlichkeit ausserhalb werden angegeben. Keine Renormierung; numerisch unterlaufene gezeichnete Randmassen werden als Nullen gemeldet.
Precision, Recall und Bayes-Formel
precision(tp, fp) berechnet TP/(TP+FP): den Anteil korrekter positiver Vorhersagen. recall(tp, fn) berechnet TP/(TP+FN): den Anteil erkannter tatsaechlich positiver Faelle (Sensitivitaet). TP, FP und FN stehen fuer richtig positive, falsch positive und falsch negative Faelle. Erlaubt sind endliche, nichtnegative skalare Anzahlen, auch Bruchteile fuer gewichtete Beobachtungen. Ein Nenner von null ist undefiniert und erzeugt einen Fehler mit Zeilennummer.
bayes(prior, likelihood, evidence) berechnet P(H|E)=P(H)*P(E|H)/P(E). Alle Argumente sind Wahrscheinlichkeiten in [0,1], mit Evidenz P(E)>0; Evidenz ist keine Falsch-Positiv-Rate. Konsistenz erfordert prior*likelihood ≤ evidence ≤ prior*likelihood+(1-prior). Bei Prior 0.01, Sensitivitaet 0.9 und Falsch-Positiv-Rate 0.05 berechnet man zuerst evidence=0.9*0.01+0.05*(1-0.01), dann Bayes(0.01, 0.9, evidence): etwa 0.1538, nicht 0.9.
Precision(tp, fp), Recall(tp, fn) und Bayes(prior, likelihood, evidence) zeigen Definitionen, eingesetzte Werte, Nenner bzw. gemeinsame Wahrscheinlichkeit, Ergebnis und ML-Anwendungen. Alle liefern wiederverwendbare Skalare, auch in verschachtelten Matrixausdruecken. Sie erzeugen keine Histogramme: Anzahlen und Wahrscheinlichkeiten sind keine Beobachtungsvektoren. Hochpraezise dezimale Zwischenschritte vermeiden vorzeitigen Ueberlauf/Unterlauf; nicht darstellbare Ergebnisse ungleich null erzeugen Fehler.
Statistik im selben Skript
Statistik und Matrixalgebra lassen sich mischen: data=[2 4 4 4 5 5 7 9], mu=mean(data), v=variance(data), s=std(data) liefern die Skalare 5, 4 und 2. s*A skaliert eine Matrix; mean(eigenvalues(A)) kombiniert Funktionen. Mean(data), Variance(data) und Std(data) zeigen laufende Summen, Abweichungen, Quadrate und ML-Anwendungen.
Jeder endliche Eintrag eines nichtleeren Zeilen- oder Spaltenvektors ist eine gleich gewichtete Beobachtung. [2] bezeichnet eine einzelne Beobachtung. Skalare, leere Vektoren und allgemeine Matrizen werden abgelehnt, statt eine Achse zu erraten. Die Populationsvarianz teilt die Summe der quadrierten Abweichungen durch n, nicht n-1. Eine einzelne Beobachtung hat Varianz und Standardabweichung null. Hochpraezise dezimale Zwischenschritte vermeiden vorzeitigen Ueberlauf; ein nicht darstellbares angefordertes Skalarergebnis erzeugt einen expliziten Fehler.
Mit showPlot=true erzeugen auch verschachtelte oder zugewiesene Statistikaufrufe empirische Histogramme relativer Haeufigkeiten. Identische Daten teilen ein Histogramm. Die Klassenanzahl ist ceil(sqrt(n)), hoechstens 12; konstante Daten nutzen eine Klasse. Rot markiert den Mittelwert, gestrichelte Linien markieren plus/minus eine Standardabweichung. Die Klassenhaeufigkeiten, nicht die Balkenflaechen, summieren sich zu eins. Es wird weder eine Normalverteilung noch eine feste Ueberdeckungswahrscheinlichkeit angenommen; der schattierte Bereich ist kein Konfidenzintervall.
Syntax und Ausdrücke
Namen unterscheiden Groß- und Kleinschreibung, beginnen mit einem Buchstaben und dürfen Buchstaben, Ziffern und Unterstriche enthalten. Namen müssen vor ihrer Verwendung definiert werden. Leerzeichen oder Kommas trennen Matrixeinträge; Semikolons trennen Zeilen. (1, 2, 3) ist ein Spaltenvektor, [1 2 3] ein Zeilenvektor. Dezimalpunkt und wissenschaftliche Schreibweise (1e-3) sind erlaubt. // beginnt einen Zeilenkommentar.
Unterstützt werden +, -, *, Vorzeichen, Klammern, ^T (Transposition) und ^-1 (Inverse). Multiplikation akzeptiert Skalare und dimensionsverträgliche Matrizen oder Vektoren. Addition und Subtraktion erfordern gleiche Dimensionen. Ausdrücke bleiben im Skript erhalten; die Ergebnisse erscheinen nur in der Ausgabe.
Funktionen
det(A): Determinante einer quadratischen Matrix.rank(A): Anzahl linear unabhängiger Spalten.trace(A): Diagonalsumme einer quadratischen Matrix.norm(A): euklidische Vektornorm bzw. Frobeniusnorm einer Matrix.rref(A): reduzierte Zeilenstufenform.basis(A): unabhängige Originalspalten als Basismatrix.nullspace(A): Kernbasis mit einem Basisvektor pro Spalte. Ein trivialer Kern hat eine n-mal-0-Basismatrix.transpose(A) und inv(A): Alternativen zu A^T und A^-1. Die Inverse erfordert eine reguläre quadratische Matrix.
Diese Funktionen sind einzeln oder in Ausdrücken verwendbar, etwa d = det(A) + rank(A) oder R = rref(A). Rang- und Basisberechnungen verwenden eine relative numerische Toleranz von 1e-12.
Kleingeschriebene det-Aufrufe ab Größe zwei zeigen einen Schritt der Laplace-Entwicklung nach der ersten Zeile: det(A) = a11 * det(M11) - a12 * det(M12) + ... = Ergebnis. Jede Untermatrix erscheint ohne die erste Zeile und die jeweilige Spalte; ihre Determinante wird nicht weiter entwickelt. Bei 1x1 erscheint direkt der einzige Eintrag. Spuren bis Größe vier und Normen mit bis zu vier Einträgen zeigen ebenfalls die eingesetzte Formel. Das gilt auch für d = det(A); verschachtelte Aufrufe bleiben kurz.
eigenvalues(A) liefert reelle Eigenwerte absteigend als Spaltenvektor mit algebraischen Vielfachheiten. eigenvectors(A) liefert normierte Eigenvektoren als Spalten in dieser Eigenwertreihenfolge. Beide sind zuweisbar und in Ausdrücken verwendbar. Bei diagonalisierbaren Matrizen entsprechen Einträge und Spalten einander. Bei defekten Matrizen wird nur eine unabhängige Basis je Eigenraum geliefert: Es gibt weniger Spalten und keine eintragsweise Zuordnung zur vollständigen Eigenwertliste. Vorzeichen und Basen mehrfacher Eigenwerte sind nicht eindeutig; bei nichtsymmetrischen Matrizen müssen Eigenvektoren nicht orthogonal sein. Beide erfordern eine quadratische Matrix und ein vollständig reelles Spektrum; ungültige Eingaben und numerische Fehler werden gemeldet. Eigenvalues und Eigenvectors erklären Bedeutung und Algorithmus. eig/Eig bleiben kompatible Aliase für evd/Evd.
A = [4 1; 2 3]
values = eigenvalues(A)
vectors = eigenvectors(A)
Evd(A)
span(A) zeigt die lineare Hülle der Spalten von A mit unabhängigen Erzeugern. span(u, v, ...) akzeptiert gleichdimensionale Spaltenvektoren. svd(A) zeigt die Singulärwertzerlegung; evd(A) zeigt eine reelle Eigenwertzerlegung oder erklärt, warum sie nicht verfügbar ist. Diese drei Aufrufe müssen einzeln auf einer Zeile stehen und können keinem Namen zugewiesen werden. Für eine wiederverwendbare Matrix des Spaltenraums dient basis(A).
Ein großer Anfangsbuchstabe aktiviert eine Algorithmuserklärung vor dem Ergebnis: Det(A), Rank(A), Rref(A), Basis(A), Nullspace(A), Inv(A), Trace(A), Norm(A), Transpose(A), Span(A), Svd(A), Evd(A), Eigenvalues(A), Eigenvectors(A). Eliminationsverfahren zeigen Zeilenoperationen und Zwischenmatrizen. Nullspace(A) erklärt zusätzlich Ax=0, die Dimensionsformel, freie Variablen, Pivotgleichungen, die Konstruktion jedes Basisvektors und die allgemeine Lösung x=Nt sowie die leere Basis des trivialen Kerns. Svd(A) zeigt Jacobi-Rotationen, Zwischenmatrizen nach jedem Durchlauf, Spaltenlängen und sortierte normierte Faktoren. Beide SVD-Formen verwenden die dünne Zerlegung: Bei m Zeilen, n Spalten und k=min(m,n) hat U das Format m-mal-k, Sigma k-mal-k und V n-mal-k. Das angezeigte V* ist V-transponiert (k-mal-n). Die volle SVD hat quadratische U und V; zusätzliche Richtungen multiplizieren Nullen in einer rechteckigen Sigma-Matrix. Svd erklärt auch die Schreibweise: V-transponiert vertauscht Zeilen und Spalten; V* ist die konjugiert-transponierte Matrix (auch V^H), die zusätzlich a+bi durch a-bi ersetzt. Bei den hier unterstützten reellen Matrizen sind beide gleich. V* bildet Skalarprodukte mit den rechten Singulärvektoren; V*V=I, aber ein rechteckiges dünnes V hat keine beidseitige Inverse. Det(A) zeigt die Elimination und das Ergebnis ohne Laplace-Entwicklung. Auch andere großgeschriebene Funktionen zeigen konkrete Zwischenschritte: Diagonalsummen bei Trace, stabile hypot-Akkumulation bei Norm, Zeilen-zu-Spalten bei Transpose und die Auswahl der Originalspalten bei Basis/Span. Evd, Eigenvalues und Eigenvectors zeigen Jacobi- oder QR-Schritte, Spektralblöcke und die Eigenraumkonstruktion. Lange Rechnungen zeigen die ersten acht Jacobi-Durchläufe und jeden zehnten bzw. die ersten acht QR-Schritte und jeden hundertsten sowie die erreichte Endmatrix; die Auswahl ist beschriftet. Differentialoperatoren zeigen Ableitungsregeln, partielle Zwischenergebnisse, Komponentenzusammenbau und Punkteinsetzung. Jede großgeschriebene Funktion, auch die folgenden Differentialoperatoren, beschreibt kurz ihren Einsatz im maschinellen Lernen (ML). Ergebnis und Quelltext bleiben unverändert; numerische Aufrufe funktionieren auch in Ausdrücken wie d = Det(A) + Rank(A).
Beispiel
linalg:
A = [1 2 3; 2 4 6; 1 1 1]
rank(A)
span(A)
N = nullspace(A)
Z = A * N
svd(A)
Funktionen und Differentialoperatoren
f(x, y) = x^2 + 2*x*y + 3*y^2
p = (1, 2)
g = grad(f, p)
Grad(f, p)
grad(f, p) liefert den Gradienten als Spaltenvektor (hier (6, 14)). Grad(f, p) zeigt vorher die symbolischen partiellen Ableitungen in Parameterreihenfolge und den Auswertungspunkt. Es werden keine finiten Differenzen verwendet. Gradienten sind auch in Matrixausdrücken verwendbar.
Mit showPlot=true zeigen direkte grad/Grad-Ergebnisse bei einer Variablen eine lokale Funktionskurve mit Punkt und Tangente, bei zwei Variablen eine Höhenlinienkarte mit beschrifteten Werten und normiertem Gradientenpfeil. Das Fenster reicht jeweils zwei Einheiten um den Punkt. Undefinierte Stichproben werden mit Hinweis ausgelassen; Unstetigkeiten werden nicht immer erkannt. Aliase behalten die Ansicht, transformierte Vektoren nicht. Bei drei Variablen bleiben die bisherigen 3D-Pfeile ohne Niveauflächen. Die bisherigen Vektorbilder behalten die echten Längen.
Funktionsausdrücke erlauben + - * / ^, Klammern, sin, cos, exp und den natürlichen Logarithmus log. Vektorwertige Funktionen verwenden Tupel, z.B. F(x, y) = (x*y, sin(x)). Nur deklarierte Parameter und Zahlen sind erlaubt, keine Szenenobjekte oder Aufrufe anderer benutzerdefinierter Funktionen. Funktionen vor ihrer Verwendung definieren. Potenzen sind rechtsassoziativ; -x^2 bedeutet -(x^2). Direkte Funktionsauswertung ist noch nicht implementiert.
jacobian(F, p): m-mal-n-Matrix erster Ableitungen; Zeilen entsprechen Ausgabekomponenten, Spalten den Eingabeparametern. Skalare Funktionen ergeben eine Zeile.hessian(f, p): n-mal-n-Matrix zweiter Ableitungen einer skalaren Funktion in Parameterreihenfolge; bei stetigen zweiten Ableitungen symmetrisch.laplacian(f, p): Summe der reinen zweiten Ableitungen, die Spur der Hesse-Matrix.divergence(F, p): Summe der Ableitungen von Komponente i nach Variable i; erfordert gleich viele Ein- und Ausgaben. Dies ist die Spur der Jacobi-Matrix.curl(F, p): dreikomponentige Rotation mit drei Eingaben und drei Ausgaben.
Alle Operatoren verwenden symbolische Ableitungen an einem Spaltenvektor-Punkt. Jacobian, Hessian, Laplacian, Divergence und Curl zeigen die Erklärung und symbolische Ableitung vor dem Ergebnis. Ergebnisse sind in Ausdrücken wiederverwendbar. Rotationsvektoren werden am Auswertungspunkt verankert; Jacobi- und Hesse-Matrizen verwenden die Matrixdarstellung.
f(x, y) = x^2 + 2*x*y + 3*y^2
p = (1, 2)
Hessian(f, p)
Laplacian(f, p)
F(x, y) = (x*y, sin(x))
Jacobian(F, p)
Divergence(F, p)
G(x, y, z) = (-y, x, 0)
Curl(G, (1, 2, 3))
Der Punkt muss ein Spaltenvektor mit einem Eintrag pro Parameter sein; für eine Variable sind auch Skalare wie p = (2) oder 2 sowie [2] erlaubt. Klammern gruppieren weiterhin skalare Ausdrücke; der Operator interpretiert den Skalar als Punkt mit einer Koordinate. Ungültige Definitionsbereiche und nichtendliche Ableitungen melden einen Fehler mit Zeilennummer. Zugewiesene Gradienten werden im Plot am Auswertungspunkt verankert. Matrixoperationen erzeugen normale Vektoren vom Ursprung aus. Einzelne Gradientenaufrufe werden nicht gezeichnet; Höhenlinien und Gradientenfelder sind noch nicht verfügbar.
Plots und Deklarationen
Dieser Block aktiviert Plots. showFormulas=false blendet die Formeln aus. Ohne Plot werden Formeln immer angezeigt.
--declarations--
showPlot=true;
showFormulas=true;
--declarations-end--
2D-/3D-Spaltenvektoren erscheinen als Pfeile. 2x2-Matrizen bilden das Einheitsquadrat ab; 3x3-Matrizen den Einheitswürfel mit schattierten Flächen in einer festen Schrägansicht. Gemischte Szenen erhalten getrennte 2D- und 3D-Bilder. Andere Dimensionen werden berechnet, aber nicht gezeichnet. Zum Basiswechsel stehen die neuen Basisvektoren in den Spalten von B: c = B^-1 * v.
Alte matrix:-Skripte mit Leerzeichen zwischen Spalten und Zeilenumbrüchen zwischen Zeilen werden weiterhin akzeptiert. Ungültige Eingaben melden ihre Zeilennummer.