Forum:  Mathematische Software & Apps
Thema: CAS in eigene Software einbinden
Themen-Übersicht
goeba
Senior
Dabei seit: 24.03.2006
Mitteilungen: 1363
Aus: Göttingen
Themenstart: 2020-02-01 12:08

Hallo,

ich habe vor vielen Jahren einige Lernprogramme geschrieben, die zur Evaluation der Nutzereingaben auch ein CAS verwendet haben.

Das hat (um ein ganz einfaches Beispiel zu nennen) den Vorteil, dass Nutzereingaben wie "b*a" als richtig erkannt werden, auch wenn die vorgegebene Lösung "a*b" war.

Meine Programme haben den Nachteil, dass sie nach heutigen Maßstäben nicht mehr "gut" aussehen. Außerdem kann ich sie nicht mehr warten, weil die verwendeten Bibliotheken mit aktuellen Compilern nicht mehr kompilierbar sind (seinerzeit waren das Yacas und FLTK, letzteres gibt es noch, ersteres wird in der c-Version, die ich damals verwendet habe, nicht mehr gepflegt).

Meine persönliche Lieblingsprogrammiersprache ist C++, ich überlege aber, die Modernisierung in Java anzugehen (da ich Java auch gut kann und mir so das Pflegen mehrerer Binaries sparen könnte).

Mein persönliches Lieblings-CAS ist Maxima (mit wxMaxima Frontend), die Anbindung an ein externes Programm ist bei Maxima aber recht kompliziert (wenn auch machbar, einen Prototypen, wo ich eine Eingabe in ein Textfeld schreibe und die Ausgabe in ein anderes Textfeld gepastet wird, habe ich schon). Es stellt sich daher die Frage, ob es nicht eine (Java) Bibliothek gibt, die man einbinden kann, sodass das Aufrufen eines externen Programms nicht nötig ist.

Der Einstieg in die Verwendung von CAS Bibliotheken ist meist recht steinig, daher mein Posting hier:

- hat jemand Erfahrung bei der Einbindung von CAS Programmen oder Bibliotheken in eigene Programme?
- wenn ja, welche Programme / Bibliotheken / Programmiersprachen?

Zusätzlich eine Spezialfrage zu Maxima/wxMaxima : weiß jemand, ob der grafische Output in wxMaxima auch direkt über einen Maxima-Befehl zu bekommen ist? wxMaxima kann einen Ausdruck in diversen Formaten bereitstellen (Text, LaTeX, MathML, Grafik). Für die Verwendung in einem einfachen Lernprogramm wäre Grafik am besten, aber der direkte Maxima-Output ist zweidimensionaler Text.

Also konkretes Beispiel: Es soll das Auflösen von Klammern geübt werden. Die Aufgabe wird zufällig erzeugt, angenommen, sie lautet x^2*(x+1), dann sollte sie als \(x^2 \cdot \left( x+1 \right) \) angezeigt werden, der Nutzer gibt die Lösung als x^3 + x^2 ein.

Gebe ich den Ausgangsterm in wxMaxima ein, so bekomme ich automatisch eine grafisch schöne Darstellung. So etwas müsste die verwendete Bibliothek auch leisten, oder ich müsste wissen, wie ich die Grafik von Maxima per Batch-Aufruf erzeugen kann. Der einzige Weg, der mir momentan möglich wäre, ist von Maxima LaTeX code erzeugen zu lassen (das geht auch auf der Konsole), diesen dann zu kompilieren und per Ghostscript in eine Grafik umzuwandeln. Das ist komplex und Fehleranfällig. Hier müsste es einen einfachen Weg geben.

Mit Yacas habe ich seinerzeit das eingebaute Pretty Print verwendet, was mir die Terme als mehrzeilige Textausgabe formatiert hat. Das sieht nicht wirklich gut aus, aber ist gerade noch akzeptabel.

Also, für Erfahrungen mit guten CAS-Bibliotheken, die das Gewünschte leisten, wäre ich sehr dankbar.

Mir ist übrigens klar, dass ich durch Lesen des wxMaxima-Quellcodes vieles, was ich hier frage, selbst herausbekommen könnte, aber das ist mittlerweile ein sehr komplexes Projekt, ich scheue also den Aufwand.


haerter
Senior
Dabei seit: 07.11.2008
Mitteilungen: 1605
Aus: Bochum
Beitrag No.1, eingetragen 2020-02-01 17:27

Hallo goeba,

ich weiß nicht, ob es Dir eher darum geht, etwas genau Maßgeschneidertes selbst zu programmieren oder ob eher das Lernprogramm von Interesse ist.

Kennst Du  STACK ? Dort ist Maxima als CAS im Hintergrund integriert und drumherum ein System zur Fragenerstellung und für Bewertung und Feedback entwickelt worden.
Es ist hauptsächlich für den Einsatz mit Moodle oder Ilias konzipiert, aber man kann es auch anders integrieren, davon verstehe ich aber nichts.

Ich erstelle mit STACK regelmäßig Übungsaufgaben und denke, dass man damit viel machen kann. In etwas eingeschränktem Maße kann man auch Maxima-Graphiken direkt einbinden.

Viele Grüße,
haerter


goeba
Senior
Dabei seit: 24.03.2006
Mitteilungen: 1363
Aus: Göttingen
Beitrag No.2, vom Themenstarter, eingetragen 2020-02-01 19:20

Hallo,
das finde ich in der Tat genial. Ich nutze Moodle intensiv, kannte das Modul aber nicht.

Problem: Die aktuelle Version unterstützt Moodle bis 3.6, wir haben 3.7 . Weißt Du, ob das trotzdem läuft? Vermutlich nicht ...

Ich frage mal auf moodle.org

Besten Dank für den Tipp!


hyperG
Senior
Dabei seit: 03.02.2017
Mitteilungen: 1129
Aus:
Beitrag No.3, eingetragen 2020-02-01 22:17

2020-02-01 12:08 - goeba im Themenstart schreibt:
... dann sollte sie als \(x^2 \cdot \left( x+1 \right) \) angezeigt werden, der Nutzer gibt die Lösung als x^3 + x^2 ein.

Gebe ich den Ausgangsterm in wxMaxima ein, so bekomme ich automatisch eine grafisch schöne Darstellung. So etwas müsste die verwendete Bibliothek auch leisten, oder ich müsste wissen, wie ich die Grafik von Maxima per Batch-Aufruf erzeugen kann. Der einzige Weg, der mir momentan möglich wäre, ist von Maxima LaTeX code erzeugen zu lassen (das geht auch auf der Konsole), diesen dann zu kompilieren und per Ghostscript in eine Grafik umzuwandeln. Das ist komplex und Fehleranfällig. Hier müsste es einen einfachen Weg geben...

Also brauchst Du CAS nicht zum Rechnen, sondern nur eine Software, die Stringeingaben in Grafik wandelt.
Sehr einfach ist die google-API
Browsereingabe
http://chart.googleapis.com/chart?cht=tx&chl=Textformel

Leider muss das "+" Zeichen durch "%2B" ersetzt werden (replace-Befehl). Beispiel:
Textformel replace("x^2*(x+1)","+","%2B") ergibt x^2*(x%2B1)
also diesen LINK versenden (ob nun per Browser oder was auch immer)
chart.googleapis.com/chart?cht=tx&chl=x^2*(x%2B1)

Der Server von google übernimmt diesen LaTeX Text und wandelt ihn in ein PNG-Bild um, was jeder Browser richtig anzeigt.

Jeder Browser sollte dann so ein Bild anzeigen:


Nachteile:
- man muss online sein
- einige Besonderheiten (wie "+" muss per %2B eingegeben werden)

Es gibt auch noch andere Übergabeparameter für Farbe und Größe des Bildes.

Was ich nicht verstehe: "der Nutzer gibt die Lösung als x^3 + x^2 ein"
also rechnet niemand & Dein Programm sagt nur OK oder falsch?


goeba
Senior
Dabei seit: 24.03.2006
Mitteilungen: 1363
Aus: Göttingen
Beitrag No.4, vom Themenstarter, eingetragen 2020-02-01 23:20

Zweierlei:
1. Das externe Programm sollte eine grafisch schöne Darstellung erzeugen können.
2. Das externe Programm sollte Ergebnisse (etwa Terme) sinnvoll auf Gleichheit prüfen können sowie selbst auch das richtige Ergebnis bestimmen können.

Also grob vom Ablauf:

- Erstelle zufällige Aufgabe
- gib diese schön formatiert aus
- löse zufällig erstellte Aufgabe
- frage Nutzer nach Eingabe
- prüfe Nutzereingabe auf Äquivalenz zur selbst berechneten Lösung



schnitzel
Senior
Dabei seit: 26.02.2009
Mitteilungen: 191
Aus:
Beitrag No.5, eingetragen 2020-02-02 10:57

Hi,
eine einfache Version mit sympy (python):
python
import sympy as sy
from sympy.parsing.sympy_parser import parse_expr
from sympy import pprint
from random import randint
 
x = sy.symbols('x')
 
a = randint(0, 5)
b = randint(2, 4)
ex = (x+a)**b
 
ex1 = (x + a)**b
pprint(ex1)
ex1_expanded = ex1.expand()
s = input('Wie lautet das Ergebnis?')
ex2 = parse_expr(s.replace('^', '**')) # damit auch '^' als Exponent zugelassen ist
 
eq_value = sy.simplify(ex1_expanded - ex2) == 0
eq_exact = ex1_expanded == ex2
 
print(f"Die Polynome{' ' if eq_value else ' nicht '}stimmen überein.")
print(f"Es wurde{' ' if eq_exact else ' nicht '}korrekt umgeformt."

Sympy ist für symbolischen Rechnen und Gleichungen sehen eigentlich immer sehr gut aus. (Auch in der Konsole beispielsweise.) Es lässt sich alles aber auch in latex Code oder Bilder übersetzen. Weiter gibt es auch Module die Hilfmittel für ganze Kurse sind. z.B. nbgrader

Es ist auch möglich, sowohl Code von anderen Sprachen wie maxima zu parsen, als auch code zu generieren. (Hab ich nicht ausprobiert.)
Gruß


goeba
Senior
Dabei seit: 24.03.2006
Mitteilungen: 1363
Aus: Göttingen
Beitrag No.6, vom Themenstarter, eingetragen 2020-02-03 10:32

Hi,
danke für den Hinweis. Sympy steht ja offenbar auch hinter dem JupyterLab .

Könnte man solche interaktiven Lernumgebungen nicht direkt in dem JupyterLab implementieren?


schnitzel
Senior
Dabei seit: 26.02.2009
Mitteilungen: 191
Aus:
Beitrag No.7, eingetragen 2020-02-03 20:27

Mir ist nicht klar, was du genau meinst.
Nur um klarzustellen:

- sympy: library für smbolisches Rechnen
- jupyter notebook: Notebook ähnlich zu wxMaxima Oberfläche.
- jupyter lab: interface für verschiedenste extensions ( notebooks, editoren, ...) Prinzipiell kann jeder solche extensions schreiben.
- nbgrader: library um Übungsaufgaben automatisch zu einzusammeln, zu bewerten... (braucht  jupyter notebook).

Natürlich kann man das alles in jupyter lab benutzen.
Gruß




Dieses Forumbeitrag kommt von Matroids Matheplanet
https://https://matheplanet.de

Die URL für dieses Forum-Thema ist:
https://https://matheplanet.de/default3.html?topic=245541=410
Druckdatum: 2020-08-10 10:26