Netzwerk Mathematik/Physik + E-Learning

Ziel dieses Bausteins ist es, eine Liste kurz umrissener Szenarien und UseCases in der Verwendung von MAXIMA in ONYX-Aufgaben zusammenzutragen, für die es lohnenwert erscheint, in einem zweiten Schritt ggf. eine nützliche Dokumentation (Erläuterung / Anwendungsbeispiel) im ONYX Hilfesystem zu erstellen.

Allgemeine Hinweise zum Programmieren mit Maxima in Onyx

Maxima ist ein frei verfügbares CAS (Computer Algebra System), alle verfügbaren Befehle sind ausführlich dokumentiert: Maxima-Befehls Dokumentation

Projekt Webseite mit Links zum Download: https://maxima.sourceforge.io/

Entwicklungsumgebung

Es gibt verschiedene Möglichkeiten den Maxima-Code zu entwickeln:

  • Online in Onyx
  • Offline direkt in Maxima
  • Offline in einer Maxima Entwicklungsumgebung, z.B. wxMaxima
  • Offline in einem anderen Editor, z.B. RStudio (Kurzerklärung: Code im Editor, Ausgaben im Terminal Fenster. Hierzu gibt man im Editor den Installations-Pfad von Maxima ein z.B. c:\maxima-5.44.0\bin\maxima und sendet diesen mit STRG + ALT + ENTER an den Terminal (oder wenn die Datei als *.sh gespeichert ist, mit STRG + ENTER) nun kann man alle weiteren Code-Zeilen jeweils mit der gleichen Tastenkombination an die Maxima-Instanz im Terminal senden und den Code im Editor weiterentwickeln. (Rückfragen zur Entwicklung mit Maxima in RStudio sind willkommen: bjoern.boettcher@tu-dresden.de)

Für alle die lieber programmieren als klicken, ist ggf. der all-in-one Ansatz auf Folie 9 des Vortrags zu Best-Practice Erfahrungen nützlich. Umgesetzt mit Formeln und Bild z.B. in: Aufgabenpool > Aufgabenpool Mathematik > Stochastik: Wahrscheinlichkeitsrechnung > Allgemeines/Mix/Verschiedenes > Venn-Diagramm

Unabhängig von der Entwicklungsumgebung: Eine Sammlung von nützlichen Ideen/Erfahrungen mit Code-Beispielen findet sich auf der Startseite dieses Wikis: Index.

Für den Einstieg in komplexere Programmierung ist insbesondere die Verwendung von lokalen Variablen und lokalen Funktionen wichtig, siehe Mehrschrittige MAXIMA-Berechnungen.

Neustarts - Generierungsfehler - Laufzeit

Grundsätzlich wird jede Maxima-Berechnung auf Opal in der Vorschau parallel in zwei (live nur eine!) Instanzen gerechnet. Sofern Zufallszahlen in Maxima generiert werden, wird auch in der Vorschau nur in einer Instanz gerechnet. Auf den Prüfungsservern wird auch nur in einer Instanz gerechnet. Das doppelte Ausführen soll helfen Veränderungen der Maxima-Instanzen festzustellen.

Die Maxima-Instanzen laufen im Hintergrund weiter. Der Neustart einer Instanz ist sehr zeitaufwendig (ca. 700 ms im Vergleich zu ca. 7 ms für einen einfachen Zuweisungsaufruf). Dieses kann zu Generierungsfehlern von Aufgaben führen, insbesondere bei wiederholten Neustarts innerhalb einer Aufgabe. Ein Neustart wird in folgenden Fällen durchgeführt:

  1. Wenn die Instanz 500 mal verwendet wurde (dieses kann man als Entwickler nicht kontrollieren, da die Instanzen für alle Nutzer verwendet werden).
  2. Wenn die Instanz (der Thread) nicht mehr "rein" ist, d.h. insbesondere wenn globale Eigenschaften verändert wurden u.a. auch wenn globalen Variablen oder globalen Funktionen angelegt wurden.

Die Ausgabe einer Aufgabe für die Lehrenden enthält auch den Abschnitt Aufgabe: MAXMIA-Ausgaben, z.B.

 [maxima-pool-1-thread-8] MAXIMA: Nr. 158 (1/6ms): ...
In diesen Beispiel sieht man, dass die Instanz in Thread 8 bisher 158 mal genutzt wurde und die Laufzeit der aktuellen Durchführung betrug 1ms in Maxima und insgesamt 6ms in Onyx. Onxy Hilfe zur Maxima Ausgabe

Technische Hinweise

Das Maxima in Onyx basiert (Stand Frühjahr 2023) auf der Version:

build_info();
Maxima version: "branch_5_41_base_177_g3d02b5e"  
Maxima build date: "2018-02-01 07:11:46" 
Host type: "x86_64-unknown-linux-gnu" 
Lisp implementation type: "GNU Common Lisp (GCL)" 
Lisp implementation version: "GCL 2.6.12"

Es werden folgende Bibliotheken automatisch geladen:

load(distrib)$
load(descriptive)$ 
load(stats)$
load(draw)$

Weitere werden ggf. geladen wenn Funktionen aus der Bibliothek verwendet werden (z.B. stringproc; Die Verwendung von Funktionen aus den Bibliotheken kann zu Neustarts der Instanz (s.o.) führen, dieses ist ggf. im Einzelfall zu prüfen.)

Außerdem werden noch einige Hilfsfunktionen geladen.

Diskussion: [Name der Diskussion]