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.
Quadrate(n) = sum(k^2, k, 1, n)Quadrate(3) ergibt 14erstes(Liste) = Liste[0]erstes([10, 20]) ergibt 10Wurzel(y) = solve(x^2 = y, x, 0, 10)Wurzel(9) ergibt 3Listen 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
sum0, dasproduct1 und dencount0. 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.
Ausgaben = [420, 385, 510, 460] ergibt [420, 385, 510, 460]sum(Ausgaben) ergibt 1,775average(Ausgaben) ergibt 443.75median(Ausgaben) ergibt 440Ausgaben[0] ergibt 420Ausgaben * 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 |
slicebraucht ganze Zahlen mit 0 ≤ Start ≤ Ende ≤ Länge der Liste. Andere Grenzen sind Fehler.variancebraucht mindestens zwei Zahlen ohne Einheiten.mapundfiltererwarten 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 infiltermusstrueoderfalseergeben.
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 ==.
# Zwei Erwachsenenkarten und eine Kinderkarte kosten 34; eine Erwachsenen- und zwei Kinderkarten kosten 29solve_system([[2,1],[1,2]], [34,29]) ergibt [13, 8]det([[2,1],[1,2]]) ergibt 3rank([[1,2],[2,4]]) ergibt 1Komplexe 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ß) undsqrt(die Hauptwurzel) akzeptieren alle komplexe Zahlen. - Exaktheit: Real- und Imaginärteil, Grundrechenarten und ganzzahlige Potenzen bleiben exakt. Allgemeine Wurzeln und
argsind 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 + 0iodercomplex(-4,0), bleibt bei Rechnungen und in Namen komplex, auch wenn er als-4angezeigt wird. - Quadratwurzeln und Logarithmen negativer Zahlen:
sqrt(-4),ln(-1)undlog(-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, etwasqrt(-4 + 0i). Diese Schreibweise odersqrt(complex(-4,0))ergibt2i. - 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,tanund ihre Umkehrfunktionen, die Hyperbelfunktionen und ihre Umkehrfunktionen,exp,ln,logoderlog10,log2,cbrtsowie gebrochene oder komplexe Potenzen akzeptieren alle komplexe Zahlen. Sie verwenden Gleitkommazahlen und Hauptzweige. Der Logarithmus von null und jedes nicht endliche Ergebnis sind Fehler.
(2+3i) * (2-3i) ergibt 13abs(3+4i) ergibt 5sqrt(-4 + 0i) ergibt 2isqrt(complex(-4,0)) ergibt 2isqrt(-4) ergibt Error: imaginary number. For a complex answer, write sqrt(-4 + 0i)exp(i*pi) ergibt -1Summen 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
tokleiner alsfrom, ist der Bereich leer: Die Summe ist 0 und das Produkt 1. - Ein einzelner Aufruf kann höchstens 10.000 Terme haben.
sum(k^2, k, 1, 10) ergibt 385product(k, k, 1, 5) ergibt 120k = 7 ergibt 7sum(k, k, 1, 3) ergibt 6k ergibt 7Gleichungen 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
lowermuss kleiner alsuppersein. - 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-10an 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.
solve(1500 + 12*x = 20*x, x, 0, 1000) ergibt 187.5solve(x^2 = 2, x, 0, 2) ergibt 1.4142135624Analysis
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,lnundsqrt. - 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
abssind 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.
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.
derivative(x^3, x, 2) ergibt 12f(x) = x^2derivative(f(x), x, 3) ergibt 6differentiate(a*x^2, x) ergibt (a*(2*(x^(2-1))))derivative(a*x^2, x, 3) ergibt Unsupported: Unknown name: aBestimmte 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 (oder1e-9bei 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.
integrate(x^2, x, 0, 3) ergibt 9integrate(x^2, x, 3, 0) ergibt -9Argumente und Einheiten in Mathefunktionen
factorialist ein anderer Name fürfact, undtruncfürint.signliefert -1, 0 oder 1.atan2(y, x)liefert einen Winkel im Bogenmaß als einfache Zahl.- Das optionale zweite Argument von
round,floorundceilist 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.
gcd(12, 18) ergibt 6round(17, 5) ergibt 15sin(30°) ergibt 0.5sqrt(9 m²) 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
sumoder einemproduct - 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.