EvaluateInSage: Unterschied zwischen den Versionen

Aus JACK Wiki
Wechseln zu: Navigation, Suche
(Hinweise: Zwei Hinweise hinzugefügt)
Zeile 120: Zeile 120:
  
 
Einzige '''Ausnahme''' ist zurzeit die Variable '''x'''. Diese Variable ist im Sage Server fest eingebunden und kann verwendet werden, ohne diese definiert zu haben.
 
Einzige '''Ausnahme''' ist zurzeit die Variable '''x'''. Diese Variable ist im Sage Server fest eingebunden und kann verwendet werden, ohne diese definiert zu haben.
 +
 +
====Methodenaufrufe====
 +
Funktionen können in Sage zum Beispiel durch <code>evaluateInSage('[pos=1].factor()')</code> aufgerufen werden. Dies sollte vermieden werden, da es sonst zu Fehlinterpretationen kommen kann. Wenn im Beispiel vorher im Feld <code>[pos=1]</code> der Inhalt <code>1+x</code> 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. <code>[pos=1]</code> als Argument von factor (<code>evaluateInSage('factor([pos=1])')</code>) oder 2. <code>[pos=1]</code> Klammern (also <code>evaluateInSage('( [pos=1] ).factor()')</code>)
 +
 +
====Variablen====
 +
 +
Wird eine Variable durch <code>evaluateInSage('var(\'t\');...)</code> 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.
  
 
===Beispiele===
 
===Beispiele===

Version vom 13. Februar 2020, 12:40 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

Eine Variable Test wird dann folgendermaßen beschrieben:

 <option name="Test" type="Typ" cas="Evaluator" value="evaluateInSage('argument')" />

Sage Befehl in der Evaluatorkonsole ausführen:

 evaluateInSage('Zeichenkette argument')

Parameter

  • Typ - Entspricht dem Typen der Variable.
  • 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.

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.

Beispiele

Eine 3x3-Matrix als Variable mit Namen A erstellt man durch den folgenden Befehl:

 
 <option name="A" type="matrix" cas="Evaluator" value="evaluateInSage('matrix(QQ,3,3,[[1,2,3],[4,5,6],[7,8,9]])')" />

In dem folgenden Beispiel wird eine Matrixvariable "A" erzeugt und anschließend der Rang von "A" in der Variable "rang" gespeichert.

 <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>

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=(Matrix) und rang=3.

 <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>

Prüft ob die Vektoren und eine Basis des R³ bilden.

Weitere Links