KnitR/Computer Algebra in R
Einleitung
[Bearbeiten]Diese Seite zum Thema KnitR/Computer Algebra in R kann als Wiki2Reveal Folien angezeigt werden. Einzelne Abschnitte werden als Folien betrachtet und Änderungen an den Folien wirken sich sofort auf den Inhalt der Folien aus. Dabei werden die folgenden Teilaspekte im Detail behandelt:
- (1) Grundlegende Ausführung von Befehlen von Computer-Algebra-Systemen in R,
- (2) Digitale Lernumgebungen in der Mathematik für die Computer-Algebra-System für adaptive Übungsblätter im Kontext mit Lösungshilfen erstellt werden können
Zielsetzung
[Bearbeiten]Diese Lernressource zu Thema KnitR und Computer Algebra in R in der Wikiversity hat das Ziel, den grundlegenden Einsatz von Computer-Algebra-Systemen (CAS) in KnitR zu behandeln und die Einsatzfelder im Kontext von Digitalen Lernumgebungen und individualisierten Übungsblättern zu behandeln.
Voraussetzungen
[Bearbeiten]Als Voraussetzungen für der Lernressource zum Thema KnitR und Computer Algebra in R'' ist empfohlen eine funktionierende OpenSource-Installation von R und RStudio auf Ihrem Rechner zu installieren und ein Basis R-Markdown-Dokument, in dem Sie Ihre Übungen eintragen können.
Aufgaben für Lernende / Studierende
[Bearbeiten]Mit den folgenden Aufgaben zum Thema KnitR/Computer Algebra in R wird zunächst ein Computer-Algebra-System (hier YACAS[1] ausgewählt, die CAS-Befehle in R[2] ausführt.
- Analysieren Sie zunächst das YACAS-Tutorial[3] in einem mathematischen Bereich, für den Sie digitale Übungsblätter erstellen wollen, bzw. mit dem Sie CAS-Werkzeuge für Berechnung von Lösungen und Lösungshilfen verwenden möchten.
- Erzeugen Sie Aufgabe in KnitR zum Vereinfachen von Termen, bei dem ein Term mit zufällig erzeugten ganzzahligen Koeffizienten vereinfacht werden soll und erzeugen Sie zu dem Aufgabenblatt eine Lösung unter Verwendung des CAS.
CAS in R verwenden
[Bearbeiten]Um Computer Algebra in R in KnitR nutzen zu können muss man zunächst das Paket ryacas installieren. Danach steht das Computer-Algebra-System YACAS in R zur Verfügung. Betrachten Sie dann zunächst die Einbettung von YACAS-Befehlen in R und integrieren Sie dann das Werkzeug in KnitR-Code-Chunks (Befehlsfolgen in einem R-Markdown-Dokument).
Begriff - Code-Chunk
[Bearbeiten]Der Begriff "Code-Chunk" bezeichnet Programmiercode (i.d.R. in der Programmiersprache R), der in den Text ausführbar integriert wird.
Bibliothek Ryacas - Installation
[Bearbeiten]Wenn man die Bibliothek Ryacas verwenden möchte, muss man zunächst das Paket Ryacas installieren.
![Installation RYACAS in RStudio - install-Tab](http://upload.wikimedia.org/wikipedia/commons/thumb/2/20/Yacas_install_rstudio.png/350px-Yacas_install_rstudio.png)
Bibliothek Ryacas einbinden
[Bearbeiten]Nach der Installation erfolgt die Nutzung in einem KnitR-Dokument über die Eingabe des folgenden Befehls in dem ersten Code-Chunk des KnitR-Dokumentes, das in der Regel alle Bibliotheken listet, die in dem KnitR-Dokument für die Berechnung benötigt werden.
library(Ryacas)
Bemerkung - Einbindung in ersten Code-Chunk
[Bearbeiten]Generell kann man YACAS erst nach Einbindung der Ryacas-Bibliothek verwenden. Daher ist die Einbindung in dem ersten Code-Chunk sinnvoll, der mit echo=FALSE in erzeugte Dokument nicht dargestellt wird
```{r liblist,echo=FALSE}
library(Ryacas)
```
Ableitungen über YACAS berechnen
[Bearbeiten]In einem ersten Schritt werden Ableitungen mit installiertem Ryacas berechnet. Beispielsweise ist liefert der YACAS-Befehl
D(x)Sin(x*y)
die Ableitung eines Funktionsterms nach . Mit der Funktion yac_str() sendet man den CAS-Befehl an YACAS und man erhält als Ergebnis die Ableitung zurück. Diese wird in dem folgenden Beispiel in der Variablen ableitung gespeichert:
ableitung <- yac_str("D(x)Sin(x*y)")
Ableitungen als Funktion in R über YACAS
[Bearbeiten]In einem zweiten Schritt definiert man eine Ableitung über YACAS als Funktion in R, die das Rückgabewert die Ableitung ausgibt.
diff <- function (pTerm,pVariable) {
# Erzeugen des YACAS Befehls z.B. D(x)Sin(x*y)
# mit pTerm="Sin(x*y)" und pVariable="x"
yacasbefehl <- paste("D(",pVariable,")",pTerm,sep="")
# Absenden des YACAS-Befehl als YACAS
ergebnis <- yac_str(yacasbefehl)
# return: Ableitung von pTerm nach pVariable
ergebnis
}
Aufruf der Funktion - Ableitungsoperator
[Bearbeiten]Wurde der YACAS-Ableitungsoperator als Funktion in R definiert, kann man nach der Definition den Ableitungsoperator "diff(...)" wie folgt verwenden.
diff("x^2+2*x+6","x") # Ausgabe: 2*x+2
# diff(..)-Operator mit Variablen aufrufen
variable <- "x"
term <- "Sin(x*y)"
diff(term,variable) # Ausgabe: y*Cos(x*y)
# Variable 'ableitung' mit dem YACAS-Ergebnis setzen
ableitung <- diff(term,variable)
# Variable 'ableitung' hat nun den Wert "y*Cos(x*y)"
Bestimmtes Integral über YACAS berechnen
[Bearbeiten]Ein bestimmtes Integral benötigt in YACAS als Eingabe die Integrationsvariable und die unter und obere Integrationsgrenze. Der YACAS-Befehl
Integrate(x,a,b) Cos(x)
integriert den Funktionsterm nach in den Integralgrenzen und . Als Ergebnis erhält man .
Bestimmtes Integral als Funktion in R über YACAS
[Bearbeiten]Ein bestimmtes Integral als Funktion in R 4 Parameter. Neben dem Integrationsterm noch die Integrationsvariablen und die untere und obere Intervallgrenze. Eine solche Funktion kann in R wie folgt definiert werden:
integral_best <- function (pTerm,pVariable,pUnten,pOben) {
# Erzeugen des YACAS Befehls z.B. Integrate(x,a,b) Cos(x)
# mit pTerm="Cos(x)", pVariable="x", pUnten="a" und pOben="b"
yacasbefehl <- paste("Integrate(",pVariable,",",pUnten,",",pOben,")",pTerm,sep="")
# Absenden des YACAS-Befehl als YACAS
ergebnis <- yac_str(yacasbefehl)
# return: Bestimmtes Integral von pTerm bzgl. der Integralgrenzen
ergebnis
}
Aufruf der Funktion - Bestimmtes Integral
[Bearbeiten]Wurde die YACAS-Integration als Funktion in R definiert, kann man nach der Definition den Ableitungsoperator "integral_best(...)" wie folgt verwenden.
integral_best("x^2","x","a","b") # Ausgabe: 1/3*b^3-1/3*a^3
# integral_best(..)-Funktion mit Variablen aufrufen
variable <- "x"
unten <- 2
oben <- 5
term <- "Cos(x)"
integral_best(term,variable,unten,oben) # Ausgabe: Sin(5)-Sin(2)
# Variable 'ergebnis' mit dem YACAS-Funktion setzen
ergebnis <- integral_best(term,variable,unten,oben)
# Variable 'ergebnis' hat nun den Wert "Sin(5)-Sin(2)"
Stammfunktion - Unbestimmtes Integral über YACAS berechnen
[Bearbeiten]Eine Stammfunktion von einem Funktionsterm kann in YACAS wie folgt berechnet werden.
Integrate(x) Cos(x)
Als Ergebnis in YACAS erhält man .
Stammfunktion - Unbestimmtes Integral in R berechnen
[Bearbeiten]Eine Stammfunktion kann in R über den Aufruf von yac_str(...) an YACAS gesendet werden. Dabei muss die Integrationvariable festgelegt werden.
yac_str("Integrate(x) Cos(x)")
Als Ergebnis in YACAS erhält man .
Stammfunktion - Unbestimmtes Integral in Variable speichern
[Bearbeiten]Eine Stammfunktion kann in R über den Aufruf von yac_str(...) an YACAS gesendet werden. Dabei muss die Integrationvariable festgelegt werden.
stammfunktion <- yac_str("Integrate(x) Cos(x)")
Die Variable "stammfunktion" enthält als Ergebnis von YACAS die Zeichenkette .
Aufgabe - R-Funktion zur Berechnung der Stammfunktion
[Bearbeiten]Definieren Sie analog zu dem obigen Beispiel ein Funktion zur Berechnung einer Stammfunktion zu einem gegebenen als Term und einer gegebenen Integrationsvariable in R über YACAS
LaTeX-Ausgabe
[Bearbeiten]Bei der Verwendung von KnitR möchte man in der Regel berechnet algebraische Terme in mathematischer Standardschreibweise (und nicht in CAS-Syntax) ausgeben. Dazu kann man die obigen Funktionen so verändern, dass die berechneten Ergebnisse dann in LaTeX-Syntax ausgegeben werden. Dabei wird der eigentliche Ausgabe des YACAS-Befehls noch an die Funktion TexForm(...) gesendet und in LaTeX-Syntax konvertiert.
LaTeX-Konvertierungsfunktion
[Bearbeiten]integral_best4latex <- function (pTerm,pVariable,pUnten,pOben) {
# Erzeugen des YACAS Befehls z.B. Integrate(x,a,b) Cos(x)
# mit pTerm="Cos(x)", pVariable="x", pUnten="a" und pOben="b"
yacasbefehl <- paste("Integrate(",pVariable,",",pUnten,",",pOben,")",pTerm,sep="")
yacas4latex <- paste("TexForm(",yacasbefehl,")")
# Absenden des YACAS-Befehl als YACAS
ergebnis <- yac_str(yacas4latex)
# return: Bestimmtes Integral in LaTeX-Notation
ergebnis
}
Aufruf einer R-Funktion mit LaTeX-Ausgabe
[Bearbeiten]Wurde die YACAS-Integration als Funktion in R für die Ausgabe von LaTeX erweitert, kann man nach der Definition den LaTeX-Ausgabe mit "integral_best4latex(...)" wie folgt verwenden.
integral_best4latex("x^2","x","a","b")
# Ausgabe: \frac{1}{3} \cdot b^3-\frac{1}{3} \cdot a^3
formel4latex <- integral_best4latex("x^2","x","a","b")
# formel4latex <- "\frac{1}{3} \cdot b^3-\frac{1}{3} \cdot a^3"
Ausgabe im RMarkdown
[Bearbeiten]Mit der folgenden Syntax kann man die LaTeX-Formel im Fließtext einbetten
$`r formel4latex$
Die Ausgabe im Text sieht dann wie folgt aus:
In folgenden Beispiel werden statische LaTeX-Formelbestandteile mit den dynamisch berechneten in YACAS verbunden.
$\int_{a}^{b} x^2 \, dx = `r formel4latex$
Die Ausgabe der generierten Formel hat dann folgende Gestalt:
Literatur/Quellennachweise
[Bearbeiten]- ↑ Pinkus, A. Z., & Winitzki, S. (2002, June). YACAS: A do-it-yourself symbolic algebra environment. In International Conference on Artificial Intelligence and Symbolic Computation (pp. 332-336). Berlin, Heidelberg: Springer Berlin Heidelberg.
- ↑ Ryacas-Codebeispiele (2020) GitHub-Repository: https://github.com/r-cas/ryacas URL: http://r-cas.github.io/ryacas/
- ↑ YACAS-Tutorial (2020) Version 1.9 - URL: https://yacas.readthedocs.io/en/latest/tutorial/ (access 2024/05/12)
Siehe auch
[Bearbeiten]
Seiteninformation
[Bearbeiten]Diese Lernresource können Sie als Wiki2Reveal-Foliensatz darstellen.
Wiki2Reveal
[Bearbeiten]Dieser Wiki2Reveal Foliensatz wurde für den Lerneinheit KnitR' erstellt der Link für die Wiki2Reveal-Folien wurde mit dem Wiki2Reveal-Linkgenerator erstellt.
- Die Seite wurde als Dokumententyp PanDocElectron-SLIDE erstellt.
- Link zur Quelle in Wikiversity: https://de.wikiversity.org/wiki/KnitR/Computer%20Algebra%20in%20R
- siehe auch weitere Informationen zu Wiki2Reveal und unter Wiki2Reveal-Linkgenerator.