Weitere Infos
Wissenswertes und Hintergründe
Überblick
NumeRe: Framework für Numerische Rechnungen ist ausgelegt als eine numerische Umgebung, die mathematische und physikalische Probleme lösen kann. Dabei wird jeder Datensatz als Tabelle aufgefasst, welche zur weiteren Analyse ausgewertet werden kann.
Grundlage für NumeRe ist eine möglichst simple, sprechende Syntax, die an manchen Stellen möglicherweise an bekannte Programme wie Gnuplot erinnern kann.
Systemvoraussetzungen
NumeRe: Framework für Numerische Rechnungen wurde für Microsoft Windows® entwickelt und ist (bisher) nur auf diesem OS lauffähig.
Betriebssystem: MS-Windows® (x86 oder x64, ab Windows 7)
Tastatur und Maus
Installation
NumeRe wird als Installer ausgeliefert, der sich um alle nötigen Schritte kümmert, die bis zur Lauffähigkeit zu tun sind. Es gibt hier zwei Versionen:
eine stable Version. Dieser Installer braucht Administratorrechte und verknüpft NumeRe ggf. vollständig mit dem Betriebssystem (dies kann aber auch abgewählt werden). Vorteile sind die bessere Interaktion mit dem Betriebssystem in Form von Dateiicons und "Öffnen mit"-Verknüpfungen. Nachteil: NumeRe ist damit nicht mehr portabel
eine portable Version. Dieser Installer kann mit normalen Nutzerrechten ausgeführt werden. Er erzeugt keine Dateiverknüpfungen und die installierte NumeRe-Version kann nachträglich beliebig verschoben werden
Um eine neuere Version von NumeRe zu installieren, kann diese einfach über die alte Version installiert werden. Es ist nicht nötig (und wird auch nicht empfohlen), NumeRe zuvor zu deinstallieren.
Geschichte
NumeRe entstand auf freiwilliger Basis aus einem Tutorium der Physik. Die Entwicklung lief dabei wie folgt:
Ursprüngliche Entwicklung
Die Entwicklung begann im September 2013 in der ursprünglichen Form unter dem etwas umständlichen Namen Basisframework für numerische Rechnungen und war gedacht als ein erster Einblick für Physikstudenten des ersten Semesters in die Programmiersprache C++. Dabei sollte vorgestellt werden, wie die Tasks, welche eigentlich mittels GNU Octave hätten durchgeführt werden sollen, aussehen, wenn sie direkt in einen Quellcode überführt werden.
Es zeigte sich jedoch bald, dass der Core dieses Programms zu weit mehr in der Lage ist, als zur puren Auswertung von Datentabellen. Folglich wurde die Entwicklung fortgeführt und mündete schließlich in die Entwicklung dieses Frameworks.
Weitere Entwicklung
Bald nach dem Schritt zur Weiterentwicklung (etwa Mitte Oktober 2013) folgte die Umbenennung in den aktuellen Namen NumeRe: Framework für Numerische Rechnungen. Während der Beginn der Entwicklung mit der IDE Orwell Dev-C++ geschah, erfolgte Ende Oktober der Wechsel zu Code::Blocks, da erstere IDE mit Bugs zu kämpfen hatte, die die Arbeit mit großen Projekten nahezu unmöglich machte.
Anfang November kam mit Version v 0.5.1 die muParser-Library als Kommandozeilen-Parser für mathematische Audrücke hinzu und Ende Dezember wurde mit der Version v 0.9.0 die MathGL-Bibliothek integriert, so dass fortan auch graphische Plots von Funktionen und Datensätzen möglich waren.
User Interface
Auf der rechten Seite ist ein Screenshot einer typischen NumeRe-Sitzung dargestellt. Dabei ist links der Dateinavigator, der einen Überblick über die Dateien in den Standardpfaden liefert, zu sehen. Rechts oben befindet sich der Editor und rechts unten die Konsole, die beide die Syntaxhervorhebung und eine Autovervollständigung unterstützen. Außerdem zeigt der Editor Tooltips zu den Syntaxelementen unter dem Mauszeiger an. Er unterstützt des Weiteren Klammer- und Textbausteinhervorhebung, sowie weitere Funktionen, die das Arbeiten mit Scripten und Prozeduren erleichtern sollen.
1D-, 2D- & 3D-Plotting
NumeRe ist mit einem vielseitigen Plotalgorithmus ausgestattet. Dieser kann Funktionen und Datensätze graphisch darstellen, wobei der erzeugte Graph stets in eine externe Datei geschrieben wird. (Es kann ein Defaultviewer eingerichtet werden, der diese Datei dann automatisch lädt, z.B. Irfanview)
Der Plotalgorithmus wird durch eines der folgenden Kommandos gestartet, die jeweils einen andern Plotting-Style aktivieren: plot, plot3d, mesh, mesh3d, surf, surf3d, dens, dens3d, grad, cont, cont3d, vect & vect3d. Dabei erzeugen plot* Linien- und Datenpunktplots, mesh* Gitterplots von Oberflächen, surf* Oberflächenplots, dens* Dichteplots, grad einen Gradientenplot, cont* Konturlinienplots und vect* Vektorfeld-Plots. Letztere sind allerdings stets mit Vorsicht zu genießen, da sie in vielen Fällen beim ersten Versuch keine besonders gute Darstellung des Vektorfeldes erzeugen und etwas Feintuning erfordern.
Die ein paar Zeilen weiter oben stehende Abbildung lässt sich beispielsweise duch das Kommando
|<- plot cos(2*x)*exp(-x/2), exp(-x/2), -exp(-x/2) -set grid box [0:10]
reproduzieren. Dabei wird für jede (durch die Kommata getrennte) Funktion eine eigene Kurve mit eigener Farbe und eigener Legende angelegt. Die Anzahl der verschiedenen Farben und Linienstile sind auf 14 begrenzt und rechts dargestellt. Nach dieser Zahl wiederholen sich die Farben und Stile der Kurven, allerdings ist es vermutlich nur in den wenigsten Fällen sinnvoll, mehr als 14 Kurven in einen Plot zu zeichnen.In diesem Fall zeigt sich die Möglichkeit, mehrere Kurven in einen einzigen Plot zu legen, um den Informationsgehalt desselben noch weiter zu erhöhen.
Das links dargestellte Meshgrid wird durch das Kommando mesh in der folgenden Variante erzeugt:
|<- mesh cos(_pi*x) + sin(_pi*y) -set box grid [0:_pi,0:_pi]
Hier wird die weiter oben bereits erwähnte Konstante _pi für den numerischen Wert von PI für die x- und y-Plotintervallgrenzen verwendet.
Syntax
Die Syntax von NumeRe gliedert sich in zwei wesentliche Kategorien: mathematische Ausdrücke und Kommandosyntax. Auf beide soll hier etwas genauer eingegangen werden.
Syntax mathematischer Ausdrücke
Die Syntax von mathematischen Ausdrücken ist vermutlich die intuitivere der beiden Syntaxen, da die Eingabe sich im Prinzip wenig von der Eingabe in einen Taschenrechner unterscheidet, der mehr als die Standardrechenoperationen beherrscht. NumeRe verwendet natürlich die korrekte Prioritätsreihenfolge der mathematischen Operatoren, wie oben bereits erwähnt wurde, allerdings sollte speziell bei Brüchen auf korrekte Klammersetzung geachtet werden (da NumeRe selbst nicht mit dem Konzept eines Bruches umgehen kann). So ist im Allgemeinen z.B.
|<- a / b*c != a / (b*c)
wie NumeRe für a,b,c != 0 und c != 1 bestätigen wird.
Ein weiterer Unterschied liegt in der Parallelität des mathematischen Parsers: er kann theoretisch beliebig viele Werte zugleich auswerten (dies wird in der Realität natürlich unter anderem durch die maximale Länge eines Strings begrenzt, aber dabei handelt es sich um 4,2949673 * 109 Zeichen, was etwas mehr als 4 Milliarden entspricht). Um mehrere Ausdrücke parallel auswerten zu lassen, müssen sie durch Kommata getrennt eingegeben werden:
|<- AUSDRUCK_1, AUSDRUCK_2, ..., AUSDRUCK_n
Abgesehen davon versteht NumeRe die Bedeutung der folgenden mathematischen (* + - / ^ = ( ) %) und logischen Operatoren (== != > >= < <= & && | || ||| ! COND ? TRUE_WERT : FALSE_WERT). Während die ersteren relativ offensichtlich sind (^ wird zur Kennzeichnung eines Exponenten verwendet, z.B. x^2 für x2, und % ist der Modulo-Operator), bedürfen die Logikausdrücke vermutlich einer kurzen Erläuterung:
== "gleich"
!= "ungleich"
> "größer als"
>= "größer als oder gleich"
< "kleiner als"
<= "kleiner als oder gleich"
& "binäres und" (vergleicht die Bits einzeln)
&& "und"
| "Binäres oder" (vergleicht die Bits einzeln)
|| "oder"
||| "entweder oder"
! "nicht"
COND ? TRUE_WERT : FALSE_WERT "wenn COND wahr, dann TRUE_WERT, sonst FALSE_WERT"
Als Rückgabewert logischer Ausdrücke wird 0 als FALSCH und 1 als WAHR ausgegeben und in Logikausdrücken auch ebenso interpretiert. (Zusätzlich zur 1 sind auch alle anderen Werte ungleich 0 innerhalb logischer Ausdrücke ein WAHR-Wert).
Kommandosyntax
Die Syntax der NumeRe-Kommandos folgt in eigentlich jedem Fall dem folgenden Schema:
|<- KOMMANDO [AUSDRUCK] [-PARAMETER[=WERT] [OPTIONEN]]
Dies lässt sich auch durch den folgenden "Merksatz" ausdrücken, der die Reihenfolge von Kommando, Ausdruck und Parametern illustriert: "Führe eine Aktion [auf etwas] aus und verwende dabei die folgenden Parameter"
Die Angaben in eckigen Klammern sind dabei nicht bei jedem Kommando vorhanden. Dies ist gut an den folgenden Beispielen zu erkennen:
|<- load samples/data
|<- help
|<- help integrate
|<- find arccos acos
|<- integrate cos(x)*exp(-x) -set x=0:2_pi
|<- set -loadpath=data/import
|<- grad exp(-norm(x,y)^2/10) -set [-10:10,-10:10] pcont fcont hires=medium
Um die Fehleranfälligkeit bei dieser Syntaxstruktur zu verringern, können die Reihenfolge der Optionen und des Parameters verändert werden, so lange sie von einem vorangestellten Minuszeichen vom Kommando abgetrennt werden. Wenn allerdings ein Ausdruck auf das Kommando folgt, so muss der Optionensatz mit dem Parameter -set (Dieser kann auch durch "--" ersetzt werden) beginnen.