EvaluateInSage: Unterschied zwischen den Versionen

Aus JACK Wiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
(Update Variablensyntax JACK3, Hinweis auf x als explizite Variable hinzugefügt)
 
(36 dazwischenliegende Versionen von 8 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
===Zugehörige Evaluatoren===
*'''MathEvaluator'''
===Beschreibung===
===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.
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===
===Syntax===
Eine [[Variablen|Variable]] ''Test'' wird dann folgendermaßen beschrieben:
'''Jack3:'''
  evaluateInSage("[[Zeichenkette]] argument")
 
(So lässt sich Sage auch in der [[Evaluator Konsole (JACK3)|Evaluator-Konsole]] ausführen.)
 
'''Jack2:'''
 
Eine [[Variablen (Jack2)|Variable]] ''Test'' wird dann folgendermaßen beschrieben:
<syntaxhighlight lang="xml">
<syntaxhighlight lang="xml">
  <option name="Test" type="Typ" cas="Evaluator" value="evaluateInSage('argument')" />
  <option name="Test" type="Typ" cas="Evaluator" value="evaluateInSage("argument")" />
</syntaxhighlight>
</syntaxhighlight>


===Parameter===
===Parameter===
* '''Typ''' - Entspricht dem Typen der Variable.
* '''Typ''' - Entspricht dem Typen der Variable (nur in Jack2 notwendig anzugeben).
* '''argument''' - Sage Befehl
* '''argument''' - Sage Befehl


=== Befehlsreferenz für Sage ===
=== 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 [[Variablen (Jack2)|Variable]] weitere Berechnungen wie z.B. die Berechnung des Rangs der Matrix.
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 [[Variablen|Variable]] weitere Berechnungen wie z.B. die Berechnung des Rangs der Matrix.


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Zeile 22: Zeile 31:
|-
|-
| matrix(QQ,n,1,[1,2,3])
| matrix(QQ,n,1,[1,2,3])
| matrix
| [[Matrix]]
| Vektor mit n Einträgen in Q.
| Vektor mit n Einträgen in Q.
|-
|-
| <nowiki> matrix(QQ,n,m,[[1,2,3],[4,5,6],[7,8,9]])</nowiki>
| <nowiki> matrix(QQ,n,m,[[1,2,3],[4,5,6],[7,8,9]])</nowiki>
| matrix
| [[Matrix]]
| nxm-Matrix mit Einträgen in Q. Einträge werden Zeilenweise angegeben.
| nxm-Matrix mit Einträgen in Q. Einträge werden Zeilenweise angegeben.
|-
|-
| identity_matrix(QQ,n)
| identity_matrix(QQ,n)
| matrix
| [[Matrix]]
| nxn-Einheitsmatrix
| nxn-Einheitsmatrix
|-
| [var=A].nrows()
| [[Ganzzahl]]
| Gibt die Anzahl der Zeilen einer Matrix zurück.
|-
|-
| [var=A].rows()
| [var=A].rows()
| single
| [[List]]
| Gibt die Anzahl der Zeilen einer Matrix zurück.
| 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()
| [var=A].cols()
| single
| [[List]]
| Gibt die Anzahl der Spalten einer Matrix zurück.
| Gibt die Liste der Spalten einer Matrix zurück.
|-
|-
| [var=A].det()
| [var=A].det()
| single
| [[Ganzzahl]]
| Gibt die Determinante der Matrix an.
| Gibt die Determinante der Matrix an.
|-
|-
| [var=A].rank()
| [var=A].rank()
| single
| [[Ganzzahl]]
| Gibt den Rang der Matrix an.
| Gibt den Rang der Matrix an.
|-
|-
| [var=A].is_diagonalizable()
| [var=A].is_diagonalizable()
| single
| [[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.
| 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()
| [var=A].is_singular()
| single
| [[Boolean]]
| Gibt an, ob die Matrix singulär ist (true bzw. 1 (JACK)) oder nicht (false bzw. 0 (JACK)).
| Gibt an, ob die Matrix singulär ist (true bzw. 1 (JACK)) oder nicht (false bzw. 0 (JACK)).
|-
|-
| [var=A].eigenvalues()[x]
| [var=A].eigenvalues()[x]
| matrix/single
| [[Ganzzahl]]
| Gibt den x-ten Eigenwert einer Matrix an, x={0,1,2...}.
| Gibt den x-ten Eigenwert einer Matrix an, x={0,1,2...}.
|-
|-
| [var=A].eigenvectors_right()[x][y][z]
| [var=A].eigenvectors_right()[x][y][z]
| matrix/single
| [[List]]
| Besteht aus einer Menge in der Eigenwerte, Eigenvektoren und die Vielfachheit des Eigenwertes vermerkt sind. Siehe dazu Seite 95 in der Dokumentation.
| 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)
| [var=A].with_swapped_rows(i,j)
| matrix
| [[Matrix]]
| Vertauscht die Zeilen (i+1) und (j+1) der Matrix
| Vertauscht die Zeilen (i+1) und (j+1) der Matrix
|-
|-
| [var=A].with_added_multiple_of_row(i,j,k)
| [var=A].with_added_multiple_of_row(i,j,k)
| matrix
| [[Matrix]]
| Addiert das k-fache der (j+1)-ten Zeile auf die (i+1)-te Zeile.
| Addiert das k-fache der (j+1)-ten Zeile auf die (i+1)-te Zeile.
|-
|-
| [var=A].augment([var=B])
| [var=A].augment([var=B])
| matrix
| [[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.)
| 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()
| [var=A].rref() oder [var=A].echelon_form()
| matrix
| [[Matrix]]
| Gibt die Matrix in Zeilenstufenform an (Reduced Row-Echelon Form)
| Gibt die Matrix in Zeilenstufenform an (Reduced Row-Echelon Form)
|-
|-
| [var=A].solve_right([var=b])
| [var=A].solve_right([var=b])
| matrix
| [[Vektor]]
| Löst ein Gleichungssystem der Form '''Ax=b'''
| Löst ein Gleichungssystem der Form '''Ax=b'''
|-
|-
| [var=A].solve_left([var=v])
| [var=A].solve_left([var=v])
| matrix
| [[Vektor]]
| Löst ein Gleichungssystem der Form '''xA=v'''
| Löst ein Gleichungssystem der Form '''xA=v'''
|-
|-
|}
|}


Eine praktische Befehlsreferenz für Lineare Algebra in Sage findet unter [https://wiki.sagemath.org/quickref?action=AttachFile&do=get&target=quickref-linalg.pdf]
===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 <code>var('<variablenname>')</code> Befehl.
  evaluateInSage("var('a'); ... Befehle können hier mit 'a' arbeiten ... ")
'''Achtung:''' In früheren Versionen des Evaluators war es möglich, die Variable <code>x</code> ohne eine explizite Definition zu verwenden. Dies ist nicht mehr der Fall, auch die Variable <code>x</code> muss wie oben gezeigt explizit definiert werden.
Für die Konstanten \(e, \pi, i\) müssen '''innerhalb von JACK3-Ausdrücken''' (z.B. Variablendefinitionen) die jeweiligen '''Evaluator-Funktionen ([[ConstE|constE()]], [[ConstPi|constPi()]], [[Imaginary|imaginary()]])''' genutzt werden. Ansonsten kann es zu Fehlern bei der Berechnung kommen. Siehe auch [[Variablen (JACK3)#Mathematische Variablen und Konstanten|Mathematische Variablen und Konstanten (JACK3)]].
====Methodenaufrufe====
Funktionen können in Sage zum Beispiel durch
'''Jack3:''' evaluateInSage("[input=field1].factor()")
'''Jack2:''' evaluateInSage("[pos=1].factor()")
aufgerufen werden. Dies sollte vermieden werden, da es sonst zu Fehlinterpretationen kommen kann. Wenn im Beispiel vorher im Feld
'''Jack3:''' [input=field1]
'''Jack2:''' [pos=1]
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:
# Das Eingabefeld als Argument von ''factor'' <code>evaluateInSage("factor([input=field1])")</code> ('''Jack2:''' <code>evaluateInSage("factor([pos=1])")</code>) oder
# das Eingabefeld Klammern, also <code>evaluateInSage("( [input=field1] ).factor()")</code> ('''Jack2:''' <code>evaluateInSage("( [pos=1] ).factor()")</code>)
====Variablen====
Wird eine Variable durch <code>evaluateInSage("var('t');...")</code> gesetzt, muss darauf geachtet werden, dass innerhalb von <code>var</code> keine Leerzeichen stehen. Ansonsten wird die Variable nicht korrekt erkannt.
'''Hochkommas'''
Es ist möglich <code>evaluateInSage()</code>-Ausdrücke mit einfachen Hochkommas statt Anführungszeichen zu erstellen. Beispiel: <code>evaluateInSage('''<nowiki/>'<nowiki/>'''1+1'''<nowiki/>'''')</code>. Bei der Verwendung von <code>var()</code> innerhalb des Ausdrucks müssen jedoch zwingend doppelte Hochkommas gesetzt werden. Beispiel: <code>evaluateInSage('var('a')')</code> ist '''nicht''' möglich. Für eine einheitliche Schreibweise und bessere Lesbarkeit wird deshalb die Verwendung von doppelten Hochkommas empfohlen.
===Beispiele===
===Beispiele===
Eine 3x3-Matrix als [[Variablen|Variable]] mit Namen A erstellt man durch den folgenden Befehl:
====Beispiel 1====
<syntaxhighlight lang="xml">  
Mit dem folgenden Befehl wird jeweils eine 3x3-Matrix erstellt:
  <option name="A" type="matrix" cas="Evaluator" value="evaluateInSage('matrix(QQ,3,3,[[1,2,3],[4,5,6],[7,8,9]])')" />
 
'''Jack2:'''
<syntaxhighlight lang="xml">
  <option name="A" type="matrix" cas="Evaluator" value="evaluateInSage("matrix(QQ,3,3,[[1,2,3],[4,5,6],[7,8,9]])")" />
</syntaxhighlight>
</syntaxhighlight>


In dem folgenden Beispiel wird eine Matrixvariable "A" erzeugt und anschließend der Rang von "A" in der Variable "rang" gespeichert.
Die Matrix wird als [[Variablen (Jack2)|Variable]] mit Namen A erstellt und hate den <code>type="matrix"</code>.
 
'''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:'''
<syntaxhighlight lang="xml">
<syntaxhighlight lang="xml">
  <variables>
  <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="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()')" />
   <option name="rang" type="single" cas="Evaluator" value="evaluateInSage("[var=A].rank()")" />
  </variables>
  </variables>
</syntaxhighlight>
</syntaxhighlight>


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.
'''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 <code>rang=3</code>.
 
====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:'''
<syntaxhighlight lang="xml">
<syntaxhighlight lang="xml">
  <variales>
  <variales>
   <option name="v1" type="matrix" cas="Evaluator" value="evaluateInSage('matrix(QQ,3,1,[1,0,0])')" />
   <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="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="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="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')" />
   <option name="basisTester" value="ifthenelse('[var=BasismatrixRang]==3','1','0')" />
Zeile 119: Zeile 192:
  </variables>
  </variables>
</syntaxhighlight>
</syntaxhighlight>
Prüft ob die Vektoren <math>v_1, v_2</math> und <math>v_3</math> eine Basis des R³ bilden.
 
'''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 \(\mathbb{R}^3\)
 
Prüft, ob die Vektoren \(v_1, v_2\) und \(v_3\) eine Basis des \(\mathbb{R}^3\) bilden.
 
=== Änderungen in JACK3 ===
* Für die Konstanten \(e, \pi, i\) müssen '''innerhalb von JACK3-Ausdrücken''' (z.B. Variablendefinitionen) die jeweiligen '''Evaluator-Funktionen ([[ConstE|constE()]], [[ConstPi|constPi()]], [[Imaginary|imaginary()]])''' genutzt werden. Ansonsten kann es zu Fehlern bei der Berechnung kommen. Siehe auch [[Variablen (JACK3)#Mathematische Variablen und Konstanten|Mathematische Variablen und Konstanten (JACK3)]].
* Die Funktion <code>evaluateInSage</code> 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.: <code>evaluateInSage("var('x')=[var=Text];bool(x==3)") -> false</code>


===Weitere Links===
===Weitere Links===
* [http://linear.ups.edu/download/fcla-2.22-sage-4.7.1-preview.pdf Ausführliche Sage Dokumentation]
* [http://linear.ups.edu/download/fcla-2.22-sage-4.7.1-preview.pdf Ausführliche Sage Dokumentation]
* [https://sagecell.sagemath.org Online-Sage-Evaluator] zum Testen von Ausdrücken
* [https://sagecell.sagemath.org Online-Sage-Evaluator] zum Testen von Ausdrücken
 
[[Kategorie:Math-Evaluatorfunktion]][[Kategorie:JACK2]][[Kategorie:JACK3]]
[[Kategorie:Evaluatorfunktion]]

Aktuelle Version vom 13. August 2024, 14:31 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 Evaluator-Konsole 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.

 evaluateInSage("var('a'); ... Befehle können hier mit 'a' arbeiten ... ")

Achtung: In früheren Versionen des Evaluators war es möglich, die Variable x ohne eine explizite Definition zu verwenden. Dies ist nicht mehr der Fall, auch die Variable x muss wie oben gezeigt explizit definiert werden.

Für die Konstanten \(e, \pi, i\) müssen innerhalb von JACK3-Ausdrücken (z.B. Variablendefinitionen) die jeweiligen Evaluator-Funktionen (constE(), constPi(), imaginary()) genutzt werden. Ansonsten kann es zu Fehlern bei der Berechnung kommen. Siehe auch Mathematische Variablen und Konstanten (JACK3).

Methodenaufrufe

Funktionen können in Sage zum Beispiel durch

Jack3: evaluateInSage("[input=field1].factor()")
Jack2: evaluateInSage("[pos=1].factor()") 

aufgerufen werden. Dies sollte vermieden werden, da es sonst zu Fehlinterpretationen kommen kann. Wenn im Beispiel vorher im Feld

Jack3: [input=field1] 
Jack2: [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. Das Eingabefeld als Argument von factor evaluateInSage("factor([input=field1])") (Jack2: evaluateInSage("factor([pos=1])")) oder
  2. das Eingabefeld Klammern, also evaluateInSage("( [input=field1] ).factor()") (Jack2: evaluateInSage("( [pos=1] ).factor()"))

Variablen

Wird eine Variable durch evaluateInSage("var('t');...") gesetzt, muss darauf geachtet werden, dass innerhalb von var keine Leerzeichen stehen. Ansonsten wird die Variable nicht korrekt erkannt.

Hochkommas

Es ist möglich evaluateInSage()-Ausdrücke mit einfachen Hochkommas statt Anführungszeichen 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 \(\mathbb{R}^3\)

Prüft, ob die Vektoren \(v_1, v_2\) und \(v_3\) eine Basis des \(\mathbb{R}^3\) bilden.

Änderungen in JACK3

  • Für die Konstanten \(e, \pi, i\) müssen innerhalb von JACK3-Ausdrücken (z.B. Variablendefinitionen) die jeweiligen Evaluator-Funktionen (constE(), constPi(), imaginary()) genutzt werden. Ansonsten kann es zu Fehlern bei der Berechnung kommen. Siehe auch Mathematische Variablen und Konstanten (JACK3).
  • 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