EvaluateInSage: Unterschied zwischen den Versionen
K (→Beispiel 3) |
|||
Zeile 171: | Zeile 171: | ||
====Beispiel 3==== | ====Beispiel 3==== | ||
In diesem Beispiel werden zunächst drei Vektoren | In diesem Beispiel werden zunächst drei Vektoren \(v_1, v_2\) und \(v_3\) erzeugt. Danach werden diese zu einer Matrix zusammengefügt und deren Rang ''BasismatrixRang'' bestimmt. | ||
'''Jack2:''' | '''Jack2:''' |
Version vom 22. April 2024, 11:51 Uhr
Zugehörige Evaluatoren
- MathEvaluator
Beschreibung
Mit der Funktion EvaluateInSage lassen sich Befehle in dem Computer Algebra System Sage auswerten. Das Argument der Funktion ist ein String, welcher Sage übergeben wird. Es kann sich also auch um eine Kette von Befehlen handeln, die durch Semikolons getrennt sind. Mit dieser Funktion lassen sich z.B. standardmäßige Konstruktionen der Linearen Algebra auswerten.
Syntax
Jack3:
evaluateInSage("Zeichenkette argument")
(So lässt sich Sage auch in der Evaluatorkonsole ausführen.)
Jack2:
Eine Variable Test wird dann folgendermaßen beschrieben:
<option name="Test" type="Typ" cas="Evaluator" value="evaluateInSage("argument")" />
Parameter
- Typ - Entspricht dem Typen der Variable (nur in Jack2 notwendig anzugeben).
- argument - Sage Befehl
Befehlsreferenz für Sage
In der folgenden Tabelle stehen einige Beispielbefehle für Sage zusammen mit ihrem Rückgabetyp und ihrem Rückgabewert. Einige Befehle beziehen sich auf eine bereits erstellte Matrixvariable "A" (s. Beispiele) und machen mit Hilfe dieser Variable weitere Berechnungen wie z.B. die Berechnung des Rangs der Matrix.
argument | Typ | Beschreibung |
matrix(QQ,n,1,[1,2,3]) | Matrix | Vektor mit n Einträgen in Q. |
matrix(QQ,n,m,[[1,2,3],[4,5,6],[7,8,9]]) | Matrix | nxm-Matrix mit Einträgen in Q. Einträge werden Zeilenweise angegeben. |
identity_matrix(QQ,n) | Matrix | nxn-Einheitsmatrix |
[var=A].nrows() | Ganzzahl | Gibt die Anzahl der Zeilen einer Matrix zurück. |
[var=A].rows() | List | Gibt eine Liste der Zeilen einer Matrix zurück. |
[var=A].ncols() | Ganzzahl | Gibt die Anzahl der Spalten einer Matrix zurück. |
[var=A].cols() | List | Gibt die Liste der Spalten einer Matrix zurück. |
[var=A].det() | Ganzzahl | Gibt die Determinante der Matrix an. |
[var=A].rank() | Ganzzahl | Gibt den Rang der Matrix an. |
[var=A].is_diagonalizable() | Boolean | Gibt an, ob die Matrix diagonalisierbar ist (true bzw. 1 (JACK)) oder nicht (false bzw. 0 (JACK)). Aktuell gibt es noch Fehler, falls die Matrix nicht diagonalisierbar ist. |
[var=A].is_singular() | Boolean | Gibt an, ob die Matrix singulär ist (true bzw. 1 (JACK)) oder nicht (false bzw. 0 (JACK)). |
[var=A].eigenvalues()[x] | Ganzzahl | Gibt den x-ten Eigenwert einer Matrix an, x={0,1,2...}. |
[var=A].eigenvectors_right()[x][y][z] | List | Besteht aus einer Liste in der Eigenwerte, Eigenvektoren und die Vielfachheit des Eigenwertes vermerkt sind. Siehe dazu Seite 95 in der Dokumentation. |
[var=A].with_swapped_rows(i,j) | Matrix | Vertauscht die Zeilen (i+1) und (j+1) der Matrix |
[var=A].with_added_multiple_of_row(i,j,k) | Matrix | Addiert das k-fache der (j+1)-ten Zeile auf die (i+1)-te Zeile. |
[var=A].augment([var=B]) | Matrix | Fügt zwei Matrizen A und B zusammen. Anzahl der Zeilen muss übereinstimmen. (Zum Beispiel zum Überprüfen, ob die Vektoren eine Basis bilden.) |
[var=A].rref() oder [var=A].echelon_form() | Matrix | Gibt die Matrix in Zeilenstufenform an (Reduced Row-Echelon Form) |
[var=A].solve_right([var=b]) | Vektor | Löst ein Gleichungssystem der Form Ax=b |
[var=A].solve_left([var=v]) | Vektor | Löst ein Gleichungssystem der Form xA=v |
Eine praktische Befehlsreferenz für Lineare Algebra in Sage findet unter [1]
Hinweise
Mehrere Sage Befehle
Mehrere Sage Befehle können ausgeführt werden indem man Sage Befehle mit einem Semikolon trennt.
evaluateInSage("argument1;argument2;argument3...")
Variablen Definieren
Damit der Sage Server mit Variablen arbeiten kann, müssen diese vor Befehlsausführung definiert werden. Dies geschieht mit dem var('<variablenname>') Befehl. Zusätzlich müssen bei diesem Befehl die '-Zeichen mit einem \-Zeichen eingeführt.
evaluateInSage("var(\'a\'); ... Befehle können hier mit 'a' arbeiten ... ")
Einzige Ausnahme ist zurzeit die Variable x. Diese Variable ist im Sage Server fest eingebunden und kann verwendet werden, ohne diese definiert zu haben.
Für die Konstanten e, pi, i
müssen innerhalb von JACK3-Variablen die jeweiligen Evaluator-Funktionen (constE(), constPi(), imaginary()) angegeben werden. Ansonsten kann es zu Fehlern bei der Berechnung kommen.
Methodenaufrufe
Funktionen können in Sage zum Beispiel durch evaluateInSage("[pos=1].factor()")
aufgerufen werden. Dies sollte vermieden werden, da es sonst zu Fehlinterpretationen kommen kann. Wenn im Beispiel vorher im Feld [pos=1]
der Inhalt 1+x
ist, wird erst factor() auf x angewandt und anschließend um 1 erhöht. Um diese Fehler zu vermeiden gibt es zwei Gegenmaßnahmen: 1. [pos=1]
als Argument von factor (evaluateInSage("factor([pos=1])")
) oder 2. [pos=1]
Klammern (also evaluateInSage("( [pos=1] ).factor()")
)
Variablen
Wird eine Variable durch evaluateInSage("var(\'t\');...")
gesetzt, muss darauf geachtet werden, das innerhalb von var keine unnötigen Leerzeichen stehen( das könnten zum Beispiel doppelte Leerzeichen sein). Ansonsten wird die Variable nicht korrekt erkannt.
Hochkommas
Es ist möglich evaluateInSage()-Ausdrücke mit einfachen Hochkommas zu erstellen. Beispiel: evaluateInSage('1+1')
.
Bei der Verwendung von var()
innerhalb des Ausdrucks müssen jedoch zwingend doppelte Hochkommas gesetzt werden. Beispiel: evaluateInSage('var('a')')
ist nicht möglich.
Für eine einheitliche Schreibweise und bessere Lesbarkeit wird deshalb die Verwendung von doppelten Hochkommas empfohlen.
Beispiele
Beispiel 1
Mit dem folgenden Befehl wird jeweils eine 3x3-Matrix erstellt:
Jack2:
<option name="A" type="matrix" cas="Evaluator" value="evaluateInSage("matrix(QQ,3,3,[[1,2,3],[4,5,6],[7,8,9]])")" />
Die Matrix wird als Variable mit Namen A erstellt und hate den type="matrix"
.
Jack3:
evaluateInSage("matrix(QQ,3,3,[[1,2,3],[4,5,6],[7,8,9]])")
Beispiel 2
In dem folgenden Beispiel wird eine Matrixvariable A erzeugt und anschließend der Rang von A in der Variable rang gespeichert.
Jack2:
<variables>
<option name="A" type="matrix" cas="Evaluator" value="evaluateInSage("matrix(QQ,3,3,[[0,1,0],[0,0,1],[-2,1,2]])")" />
<option name="rang" type="single" cas="Evaluator" value="evaluateInSage("[var=A].rank()")" />
</variables>
Jack3:
A = evaluateInSage("matrix(QQ,3,3,[[0,1,0],[0,0,1],[-2,1,2]])") rang = evaluateInSage("[var=A].rank()")
Erzeugt eine Variable A (vom Typ matrix) und bezieht sich auf eine 3x3-Matrix mit Einträgen in Q. Die genauen Einträge der Matrix stehen in eckigen Klammern. Außerdem wird eine Variable rang (vom Typ single) erzeugt, welche den Rang der Variable A berechnet. In diesen Beispielen wäre \(A = \left(\begin{array}{rrr}0 & 1 & 0\\0 & 0 & 1\\-2 & 1 & 2 \end{array}\right)\) und rang=3
.
Beispiel 3
In diesem Beispiel werden zunächst drei Vektoren \(v_1, v_2\) und \(v_3\) erzeugt. Danach werden diese zu einer Matrix zusammengefügt und deren Rang BasismatrixRang bestimmt.
Jack2:
<variales>
<option name="v1" type="matrix" cas="Evaluator" value="evaluateInSage("matrix(QQ,3,1,[1,0,0])")" />
<option name="v2" type="matrix" cas="Evaluator" value="evaluateInSage("matrix(QQ,3,1,[0,1,0])")" />
<option name="v3" type="matrix" cas="Evaluator" value="evaluateInSage("matrix(QQ,3,1,[0,0,1])")" />
<option name="BasismatrixRang" type="single" cas="Evaluator" value="evaluateInSage("([var=v1].augment([var=v2]).augment([var=v3])).rank())")" />
<option name="basisTester" value="ifthenelse('[var=BasismatrixRang]==3','1','0')" />
<!-- falls basisTester=1, so bilden die Vektoren eine basis des R3-->
</variables>
Jack3:
v1 = evaluateInSage("matrix(QQ,3,1,[1,0,0])") v2 = evaluateInSage("matrix(QQ,3,1,[0,1,0])") v3 = evaluateInSage("matrix(QQ,3,1,[0,0,1])") BasismatrixRang = evaluateInSage("([var=v1].augment([var=v2]).augment([var=v3])).rank())") basisTester = ifthenelse('[var=BasismatrixRang]==3','1','0') --> falls basisTester=1, so bilden die Vektoren eine Basis des \(R^3\)
Prüft ob die Vektoren \(v_1, v_2\) und \(v_3\) eine Basis des R³ bilden.
Änderungen in JACK3
Die folgenden Änderungen beziehen sich nur auf JACK3.
- Für die Konstanten
e, pi, i
müssen innerhalb von JACK-Variablen die jeweiligen Evaluator-Funktionen (constE(), constPi(), imaginary()) angegeben werden. Ansonsten kann es zu Fehlern bei der Berechnung kommen. - Die Funktion
evaluateInSage
erlaubt kein Verschachteln von Funktionen. Es ist nur ein String als Argument erlaubt. - Zum Konkatenieren von Sage-Ausdrücken und Variablen, ist es erlaubt diese direkt im String anzugeben. Bsp.:
evaluateInSage("var('x')=[var=Text];bool(x==3)") -> false
Weitere Links
- Ausführliche Sage Dokumentation
- Online-Sage-Evaluator zum Testen von Ausdrücken