Zum Inhalt springen
Varlig-Handbuch
Varlig-Startseite

Höhere Mathematik: Möglichkeiten und Grenzen

Diese Seite fasst die höhere Mathematik in Varlig Calc zusammen: Listen, Vektoren und Matrizen, komplexe Zahlen, Summen und Produkte, das Lösen von Gleichungen und Analysis. Für jeden Bereich ist aufgeführt, was die Funktionen tun, was sie akzeptieren, wie genau die Ergebnisse sind und wo die Grenzen liegen. Hier prüfst du die Details, wenn dich ein Ergebnis überrascht.

Einführungen mit mehr Beispielen findest du im Handbuch: Listen und Statistik, Vektoren und Matrizen, Komplexe Zahlen und Summen, Gleichungen lösen und Analysis.

Auf einen Blick

Thema Beispiel Ergebnis
Liste [1, 2+3, 4*2] [1, 5, 8]
Element einer Liste [10, 20, 30][1] 20
Element einer verschachtelten Liste [[1,2],[3,4]][1][0] 3
Summe von Größen sum([1 kg, 500 g]) 1.5 kg
Statistik average([1,2,3]), median([5,1,3]) 2, 3
Bereich, abwärts zählend range(5, 1, -2) [5, 3, 1]
Listen addieren [1,2] + [3,4] [4, 6]
Matrixprodukt [[1,2],[3,4]] * [[1,0],[0,1]] [[1, 2], [3, 4]]
Inverse inverse([[1,2],[3,4]]) [[-2, 1], [1.5, -0.5]]
Determinante det([[1,2],[3,4]]) -2
Transponierte transpose([[1,2],[3,4]]) [[1, 3], [2, 4]]
Lineares Gleichungssystem solve_system([[2,1],[1,2]], [34,29]) [13, 8]
Rechnen mit komplexen Zahlen (2+3i) * (2-3i) 13
Komplexe Quadratwurzel sqrt(complex(-4,0)) 2i
Summe über einen Bereich sum(k^2, k, 1, 10) 385
Produkt über einen Bereich product(k, k, 1, 5) 120
Gleichung lösen solve(x^2 = 4, x, 0, 3) 2
Symbolische Ableitung differentiate(sin(x), x) cos(x)
Ableitung an einer Stelle derivative(x^3, x, 2) 12
Bestimmtes Integral integrate(x^2, x, 0, 3) 9

Listen, Matrizen und komplexe Zahlen sind ganz normale Werte. Du kannst ihnen Namen geben und sie an eigene Funktionen übergeben, und sie werden neu berechnet, wenn du eine frühere Zeile bearbeitest.

calc
Quadrate(n) = sum(k^2, k, 1, n)
Quadrate(3) ergibt 14
erstes(Liste) = Liste[0]
erstes([10, 20]) ergibt 10
Wurzel(y) = solve(x^2 = y, x, 0, 10)
Wurzel(9) ergibt 3

Listen und Mathefunktionen schreiben

  • Kommas trennen Elemente und Argumente. Ein Komma mit einem Leerzeichen danach trennt immer, und ein Komma, auf das genau drei Ziffern folgen, gruppiert Tausender. [1,200, 1,800] hat also zwei Elemente. Ohne Leerzeichen trennt jedes Komma, wie in [12,-51,4]. Wo sich Kommas auf beide Arten lesen lassen, wie in [1,234], zeigt die Fehlermeldung beide möglichen Schreibweisen. Für Nachkommastellen verwendest du einen Dezimalpunkt.
  • Matrizen sind Listen von Zeilen, etwa [[1,2],[3,4]]. Eine Kurzschreibweise mit Semikolon wie [1,2;3,4] gibt es nicht.
  • Indizes beginnen bei 0 und müssen ganze Zahlen ab 0 sein. Ein Index hinter dem Ende der Liste ist ein Fehler; er springt nie an den Anfang zurück und wird auch nicht passend gekürzt.
  • Die Anzahl der Argumente wird geprüft. sqrt(4,9) ist ein Fehler, statt dass Varlig rät.

Listen und Statistik

Diese Funktionen akzeptieren eine Liste: length oder count, sum, product, average oder mean, median, min, max und stddev (die Standardabweichung einer Stichprobe).

  • Eine leere Liste hat die sum 0, das product 1 und den count 0. Andere Statistiken einer leeren Liste sind Fehler.
  • Zwei gleich lange Listen werden elementweise addiert und subtrahiert. Du kannst eine Liste mit einer Zahl multiplizieren oder durch eine Zahl dividieren und zwei Listen mit == vergleichen.
  • range(start, end, step) schließt beide Enden ein. Die Schrittweite ist optional.
  • dot(a, b) multipliziert zwei reelle Vektoren.
calc
Ausgaben = [420, 385, 510, 460] ergibt [420, 385, 510, 460]
sum(Ausgaben) ergibt 1,775
average(Ausgaben) ergibt 443.75
median(Ausgaben) ergibt 440
Ausgaben[0] ergibt 420
Ausgaben * 1.1 ergibt [462, 423.5, 561, 506]
range(0, 1, 0.25) ergibt [0, 0.25, 0.5, 0.75, 1]

Listen umformen

Aufruf Ergebnis Wirkung
sort([3,1,2]) [1, 2, 3] Sortiert Zahlen ohne Einheiten aufsteigend; gleiche Elemente behalten ihre Reihenfolge
reverse([1,2,3]) [3, 2, 1] Kehrt jede Liste um
unique([3,1,3,2]) [3, 1, 2] Behält das erste Vorkommen jedes Werts; Elemente müssen exakt übereinstimmen, auch in der Einheit
slice([10,20,30,40], 1, 3) [20, 30] Nimmt Elemente vom Startindex bis ausschließlich zum Endindex
map(x^2, x, [1,2,3]) [1, 4, 9] Berechnet den Ausdruck für jedes Element
filter(x > 1, x, [1,2,3]) [2, 3] Behält die Elemente, für die die Bedingung wahr ist
variance([1,2,3]) 1 Exakte Stichprobenvarianz, geteilt durch die Anzahl minus eins
  • slice braucht ganze Zahlen mit 0 ≤ Start ≤ Ende ≤ Länge der Liste. Andere Grenzen sind Fehler.
  • variance braucht mindestens zwei Zahlen ohne Einheiten.
  • map und filter erwarten zuerst den Ausdruck, dann den Namen für das jeweilige Element und dann die Liste. Der Name gilt nur innerhalb des Aufrufs und ändert keinen Namen, den du anderswo definiert hast. Der Ausdruck in filter muss true oder false ergeben.

Vektoren und Matrizen

Vektoren sind flache Listen, Matrizen sind Listen von Zeilen. Matrizen müssen rechteckig sein, reelle Zahlen ohne Einheiten enthalten und 1 bis 32 Zeilen und Spalten haben.

Funktion Wirkung
A * B Matrixprodukt; die Spaltenzahl von A muss der Zeilenzahl von B entsprechen
transpose(A) Vertauscht Zeilen und Spalten
shape(A) [Zeilen, Spalten]
identity(n) Eine Einheitsmatrix der Größe n × n
trace(A) Summe der Diagonale einer quadratischen Matrix
det(A) Determinante einer quadratischen Matrix
inverse(A) Inverse einer quadratischen Matrix; eine singuläre Matrix ist ein Fehler
rank(A) Rang durch exakte Elimination, für jede rechteckige Matrix
dot(a, b) Skalarprodukt zweier gleich langer Vektoren
cross(a, b) Kreuzprodukt zweier Vektoren mit je drei Elementen
solve_system(A, b) Löst A*x = b für eine quadratische Matrix A und einen flachen Vektor b
eigenvalues(A) Eigenwerte einer reellen quadratischen Matrix, auch komplexe Paare, in keiner festen Reihenfolge
qr(A) [Q, R], wobei Q*R ungefähr A ergibt
lu(A) [P, L, U], wobei P*A ungefähr L*U ergibt; nur quadratische Matrizen
svd(A) [U, s, Vt], wobei s eine flache Liste der Singulärwerte ist und A ungefähr U*diag(s)*Vt ergibt

Exakte Ergebnisse. det, inverse, rank und solve_system rechnen mit exakten Brüchen. rank hat keine Rundungstoleranz. solve_system meldet bei einem singulären System einen Fehler und kann weder nichtlineare Systeme noch Systeme mit unendlich vielen Lösungen behandeln.

Näherungswerte. eigenvalues, qr, lu und svd verwenden Gleitkommazahlen und prüfen, ob ihre Ausgabe endlich ist. qr und svd akzeptieren rechteckige Matrizen und liefern die kompakten („dünnen“) Faktoren. Berechnungen von Eigenwerten und Singulärwertzerlegungen stoppen nach 10.000 Iterationen. Im angezeigten Ergebnis erscheint ein Eintrag, der neben dem größten Eintrag nur Rundungsrauschen ist, als 0; greifst du per Index darauf zu, erhältst du den gespeicherten Wert. Schlecht konditionierte Matrizen können an Genauigkeit verlieren, prüfe diese Ergebnisse also nicht mit ==.

calc
# Zwei Erwachsenenkarten und eine Kinderkarte kosten 34; eine Erwachsenen- und zwei Kinderkarten kosten 29
solve_system([[2,1],[1,2]], [34,29]) ergibt [13, 8]
det([[2,1],[1,2]]) ergibt 3
rank([[1,2],[2,4]]) ergibt 1

Komplexe Zahlen

i ist die imaginäre Einheit, sofern du keinen Namen und keine eigene Einheit namens i definiert hast.

  • Funktionen: complex(real, imaginary), real, imag, conj, abs, arg (im Bogenmaß) und sqrt (die Hauptwurzel) akzeptieren alle komplexe Zahlen.
  • Exaktheit: Real- und Imaginärteil, Grundrechenarten und ganzzahlige Potenzen bleiben exakt. Allgemeine Wurzeln und arg sind Näherungswerte.
  • Reelle Ergebnisse: Heben sich die Imaginärteile auf, wie bei (2+3i) * (2-3i), ist das Ergebnis eine normale reelle Zahl. Ein Wert, den du als komplexe Zahl schreibst, etwa -4 + 0i oder complex(-4,0), bleibt bei Rechnungen und in Namen komplex, auch wenn er als -4 angezeigt wird.
  • Quadratwurzeln und Logarithmen negativer Zahlen: sqrt(-4), ln(-1) und log(-100) bleiben bei den reellen Zahlen und zeigen einen Fehler zu imaginären Zahlen an, der die komplexe Schreibweise nennt, die du stattdessen verwenden kannst, etwa sqrt(-4 + 0i). Diese Schreibweise oder sqrt(complex(-4,0)) ergibt 2i.
  • Anzeige: Ein Anteil, der nur Rundungsrauschen der Gleitkommarechnung ist, wird als 0 angezeigt; exp(i*pi) zeigt also -1. Der gespeicherte Wert behält seine Ziffern.
  • Vergleiche: < und > funktionieren nur, wenn beide Imaginärteile null sind.
  • Weitere Funktionen: sin, cos, tan und ihre Umkehrfunktionen, die Hyperbelfunktionen und ihre Umkehrfunktionen, exp, ln, log oder log10, log2, cbrt sowie gebrochene oder komplexe Potenzen akzeptieren alle komplexe Zahlen. Sie verwenden Gleitkommazahlen und Hauptzweige. Der Logarithmus von null und jedes nicht endliche Ergebnis sind Fehler.
calc
(2+3i) * (2-3i) ergibt 13
abs(3+4i) ergibt 5
sqrt(-4 + 0i) ergibt 2i
sqrt(complex(-4,0)) ergibt 2i
sqrt(-4) ergibt Error: imaginary number. For a complex answer, write sqrt(-4 + 0i)
exp(i*pi) ergibt -1

Summen und Produkte

sum(expression, name, from, to) addiert den Ausdruck für jede ganze Zahl von from bis to, beide Enden eingeschlossen. summation ist ein anderer Name dafür, und product multipliziert stattdessen.

  • Der Name gilt nur innerhalb des Aufrufs. Er ändert keinen bereits definierten Namen, und die Zeile hängt auch nicht von einem solchen ab.
  • Du kannst eine Summe oder ein Produkt in eine andere Summe oder ein anderes Produkt setzen.
  • Ist to kleiner als from, ist der Bereich leer: Die Summe ist 0 und das Produkt 1.
  • Ein einzelner Aufruf kann höchstens 10.000 Terme haben.
calc
sum(k^2, k, 1, 10) ergibt 385
product(k, k, 1, 5) ergibt 120
k = 7 ergibt 7
sum(k, k, 1, 3) ergibt 6
k ergibt 7

Gleichungen lösen

solve(expression, name, lower, upper) findet einen reellen Wert von name zwischen lower und upper, an dem der Ausdruck null ist. solve(left = right, name, lower, upper) findet die Stelle, an der beide Seiten gleich sind.

  • Die Grenzen müssen endliche Zahlen sein, und lower muss kleiner als upper sein.
  • Eine Nullstelle genau auf einer Grenze wird akzeptiert. Ansonsten muss der Ausdruck an einer Grenze positiv und an der anderen negativ sein und sollte dazwischen stetig sein.
  • Die Suche halbiert das Intervall mit jedem Schritt. Sie ist erfolgreich, wenn der Ausdruck innerhalb von 128 Schritten bis auf 1e-10 an null herankommt und das Intervall schmal genug ist. Ist der Ausdruck an einer geprüften Stelle nicht definiert oder kommt die Suche nicht zur Ruhe, zeigt die Zeile einen Fehler an.
  • Sie findet eine Nullstelle, nicht alle. Für lineare Gleichungssysteme verwendest du solve_system.
calc
solve(1500 + 12*x = 20*x, x, 0, 1000) ergibt 187.5
solve(x^2 = 2, x, 0, 2) ergibt 1.4142135624

Analysis

Symbolische Ableitungen

differentiate(expression, name), auch derivative(expression, name) geschrieben, liefert die Ableitung als Text.

  • Sie verwendet Summen-, Produkt-, Quotienten-, Potenz- und Kettenregel für reelle Arithmetik ohne Einheiten sowie sin, cos, tan, sinh, cosh, exp, ln und sqrt.
  • Andere Namen im Ausdruck werden als Konstanten behandelt, egal ob sie in der Notiz einen Wert haben: differentiate(a*x^2, x) ergibt (a*(2*(x^(2-1)))).
  • Das Ergebnis wird nicht vereinfacht und ist auf 8192 Zeichen begrenzt.
  • Andere Funktionen wie abs sind Fehler; verwende für sie eine Ableitung an einer Stelle. Dies ist kein vollständiges Computeralgebrasystem.
  • Die Ableitung hat dieselben Einschränkungen des Definitionsbereichs wie der ursprüngliche Ausdruck.
calc
differentiate(sin(x), x) ergibt cos(x)
differentiate(x^3, x) ergibt (3*(x^(3-1)))

Ableitungen an einer Stelle

derivative(expression, name, point) oder differentiate mit drei Argumenten berechnet die Steigung an einer Stelle numerisch. Dazu werden verfeinerte zentrale Differenzenquotienten verwendet und mit einseitigen Schätzungen abgeglichen. Der Ausdruck kann eigene Funktionen verwenden, muss aber in der Nähe der Stelle glatt sein und reelle Zahlen ohne Einheiten verwenden. Kommt die Schätzung nicht zur Ruhe oder ist ein Stützwert nicht definiert, zeigt die Zeile einen Fehler an.

Da die numerischen Formen eine Zahl berechnen, braucht jeder Name außer der Variablen einen Wert. Das gilt für Ableitungen an einer Stelle, sum, product, solve und integrate; ein Name ohne Wert zeigt Unsupported: Unknown name: gefolgt vom Namen an.

calc
derivative(x^3, x, 2) ergibt 12
f(x) = x^2
derivative(f(x), x, 3) ergibt 6
differentiate(a*x^2, x) ergibt (a*(2*(x^(2-1))))
derivative(a*x^2, x, 3) ergibt Unsupported: Unknown name: a

Bestimmte Integrale

integrate(expression, name, lower, upper) berechnet die Fläche unter dem Ausdruck zwischen zwei endlichen Grenzen.

  • Vertauschte Grenzen ändern das Vorzeichen des Ergebnisses, und gleiche Grenzen ergeben null.
  • Das Verfahren nutzt adaptive Gauß-Kronrod-Regeln mit 7 und 15 Stützstellen, die an ungleichmäßig verteilten Stellen abtasten. So lässt es sich von einer regelmäßigen Schwingung wie cos(128*pi*x) nicht täuschen: integrate(cos(128*pi*x), x, 0, 1) ergibt etwa -1.3e-15, also null im Rahmen der Rundung.
  • Es strebt eine geschätzte Gesamtabweichung von höchstens dem 1e-9-Fachen der Größe des Ergebnisses an (oder 1e-9 bei Ergebnissen kleiner als 1). Es vergleicht mindestens zwei Detailstufen, berücksichtigt Rundungsfehler und verfeinert zuerst den Abschnitt mit der größten geschätzten Abweichung.
  • Es stoppt nach 2048 Verfeinerungen, 20 Unterteilungsebenen oder den 100.000 Schritten, die es sich mit anderer höherer Mathematik in der Zeile teilt. Das Erreichen einer Grenze oder ein nicht definierter Stützwert ist ein Fehler.
  • Die Fehlerschätzung ist ein guter Anhaltspunkt, aber keine Garantie. Verwende glatte, endliche Ausdrücke. Ergebnisse für Ausdrücke mit Spitzen, Sprüngen oder schnellen Schwingungen können ungenau sein.
  • Unbestimmte Integrale und unendliche Grenzen werden nicht unterstützt.
calc
integrate(x^2, x, 0, 3) ergibt 9
integrate(x^2, x, 3, 0) ergibt -9

Argumente und Einheiten in Mathefunktionen

  • factorial ist ein anderer Name für fact, und trunc für int.
  • sign liefert -1, 0 oder 1. atan2(y, x) liefert einen Winkel im Bogenmaß als einfache Zahl.
  • Das optionale zweite Argument von round, floor und ceil ist eine Schrittweite, keine Anzahl von Nachkommastellen: round(17, 5) rundet auf das nächste Vielfache von 5. Wie du auf Nachkommastellen rundest, erfährst du unter Runden.
  • Logarithmen, Exponentialfunktionen und Hyperbelfunktionen akzeptieren keine Einheiten und keine Geldbeträge. Die normalen Winkelfunktionen akzeptieren Winkel wie 30°.
  • Quadrat- und Kubikwurzeln behalten Einheiten, wenn die Potenz glatt aufgeht, und Potenzen von Größen behalten ihre Einheiten. Temperaturen in Celsius oder Fahrenheit lassen sich weder quadrieren noch radizieren.
calc
gcd(12, 18) ergibt 6
round(17, 5) ergibt 15
sin(30°) ergibt 0.5
sqrt(9 ) ergibt 3 m
(2 kg)^2 ergibt 4 kg²

Grenzen

Grenzen werden geprüft, bevor ein Ergebnis angezeigt wird:

  • 1024 Elemente in einer Liste oder einem range
  • Matrizen bis 32 × 32
  • 10.000 Terme in einer sum oder einem product
  • 16 Ebenen verschachtelter Listen und Funktionsaufrufe
  • 100.000 Schritte, die sich die gesamte höhere Mathematik einer Zeile teilt, verschachtelte Aufrufe eingeschlossen
  • 4096 Bit im Zähler oder Nenner eines Bruchs, wie überall in Varlig Calc

Wird eine Grenze erreicht, erscheint in dieser Zeile ein Fehler, und der Rest der Notiz funktioniert weiter. Eine Teilsumme, eine Inverse oder eine nicht konvergierte Nullstelle wird nie als Ergebnis ausgegeben. Alle Grenzen und Details zur Genauigkeit der Ergebnisse findest du unter Ergebnisse lesen: Anzeige und Genauigkeit.