Einblicke in die Wolfram Language

Von | 21. April 2017

Die Wolfram Language ist eine wissensbasierte symbolische Programmiersprache, welche die neusten Computer- und Webtechnologien in sich vereint.

Die Wolfram Language ist aus Mathematica entstanden und sentwickelt für eine neue Generation von Programmierern. Sie besitzt eine Fülle an Funktionen, Algorithmen, Wissensdatenbanken und Verbindungsoptionen sowie Verteilungsmöglichkeiten, die es sonst in keinem Programmiersystem gibt – alles in einem System vereint mit einer unvergleichbar eleganten, symbolischen Programmiersprache.

Der Entwickler der Sprache Stephen Wolfram beschreibt sein Werk wie folgt: “Inside the Wolfram Language we have a whole computable model of the world. And it becomes trivial to write a program that makes use of the latest stock price, computes the next high tide, generates a street map, shows an image of a type of airplane, or a zillion other things.”

Mathematica ist das integrierte System für die vollständige Entwicklung, Berechnung, Simulation, Analyse und Dokumentation von technischen Problemstellungen in einer einheitlichen, plattformunabhängigen Arbeitsumgebung unter Einsatz der Wolfram Language.

Im folgenden werden verschiedene Funktionen der Wolfram Language vorgestellt. Dabei besteht nicht der Anspruch auf Vollständigkeit, sondern es steht mehr die Vorstellung besonders interessanter Konzepte im Vordergrund.

Grundlegendes

Die Wolfram Language besteht aus etwa 5000 eingebauten Funktionen. Alle Funktionen haben Namen, bei denen jedes Wort mit einem Großbuchstaben beginnt. Die Argumente der Funktionen werden immer in eckigen […] Klammern geschrieben und durch Kommas getrennt.

Listen werden in der Wolfram Language durch { … } angegeben. Sie können Ausdrücke unterschiedlicher Art beinhalten.

Ursprünglich war Mathematica (wie der Name vermuten lässt) als Werkzeug für Mathematiker und Physiker gedacht. Welche Möglichkeiten in diesem Programmier-Paradigma steckt, erschliesst sich einem nicht sofort, man muss sich aus verschiedenen Bereichen der Sprache nähern. Dazu gibt es sehr viel Literatur. Ich möchte hier kein weiteres “Lehrbuch” schaffen, sondern mit einigen aus meiner Sicht interessanten und bemerkenswerten Einblicken, Lust machen, sich weiter damit zu befassen.

 

Wie man Rechenaufgaben lösen kann

Gegeben sei folgende Aufgabe (entnommen aus dem Buch von Prof. Kilian “Programmieren mit Mathematica, Springer 2009) : “Eine 1m tiefe, 1m hohe und 1m breite quaderförmige-Holzkiste steht direkt an einer Wand. Eine 5m lange Leiter ist über dieser Kiste an die Hauswand angelehnt“. Gefragt ist nun in welcher Höhe die Leiter die Wand berührt.

Skizze einfügen

 

In Mathematica kann man die Gleichungen einfach formulieren und dann auf “lösen” tippen und schon bekommt man die Lösung präsentiert:

 

Reine Funktionen

Reine Funktionen oder (pure functions) sind Funktionen, die nur aus den elementaren Bestandteilen bestehen. Mittels reiner Funktionen lassen sich Funktionen angeben, die auf Argumente angewandt werden können, ohne die Namen der Funktionen explizit zu definieren.

Ihr erstes Argument wird gekennzeichnet durch #, der Abschluss der Beschreibung bildet immer ein &. Beispielsweise würde eine reine Funktion, die 1 addiert wie folgt definiert werden:

Wenn eine reine Funktion als der Kopf eines Ausdrucks gegeben ist, wird die Funktion auf die Argumente angewendet:

Map-Funktion

Die Funktion Map wendet eine Funktion auf alle Elemente einer Liste an.

Beispielsweise lässt sich eine Liste der Quadratzahlen von 1 bis 10 über folgende Anweisung erzeugen:

Möchte man nun eine Liste aller Quadratzahlen erzeugen und dabei zuerst alle geraden und dann alle ungeraden Zahlen umrahmen, dann kann man das wie folgt programmieren:

Liefert folgendes Ergebnis:

Die rein funktionale Programmierung ist sicher gewöhnungsbedürftig, aber wenn man sich etwas eingearbeitet hat, stellt man fest, wie einfach sich damit komplexe Aufgaben lösen lassen.

Erzeugung von Listen

Die einfachsten Formen wie Listen erzeugt werden können erfolgt durch die Funktionen Range und Table. Beispielsweise für die Erstellung einer Schaltjahrübersicht.

Folgende Funktion spiegelt die Berechnungsvorschrift für Schaltjahre wieder. Sie ergibt genau dann den Wert True wenn ein Jahr ein Schaltjahr ist:

Mit folgender Anweisung wird eine eine Jahres-Übersicht erstellt, in der die Schaltjahre Fett hervorgehoben werden:


Eine interessantere Form ist die Funktion Nestlist und NestWhileList.

In der Dokumentation heisst es:”…generates a list of the results of applying f repeatedly, starting with expr, and continuing until applying test to the result no longer yields True”

Beispielsweise soll eine Liste mit halbierten Zahlen erstellt werden bis die erste ungerade Zahl auftritt und nicht mehr ohne Rest halbiert werden kann.

 

Graphik-Darstellungsoptionen

Mathematica stellt eine Vielzahl von Möglichkeiten bereit, um Funktionen zu zeichnen. Das schöne daran ist, das dies im Standard ohne größere Detail-Kenntnisse erfolgt. Möchte man jedoch die Details selber bestimmen, wird es etwas komplizierter.

Aus diesem Grund habe ich hier ein einfaches Beispiel erstellt, wie zwei Funktionen in verschiedenen Farben dargestellt werden können.

Gezeichnet werden soll eine Funktion in Orange und ihr Grenzwert als Gerade in Grau in einer gestrichelten Form. Dazu verwendet man die Option “PlotStyle”. Diese wirkt normalerweise in in direkter Form auf den gesamten Plot-Vorgang. Würde man also nur “PlotStyle –> Orange” schreiben würden alle Funktionen in der Farbe Orange dargestellt werden. Schreibt man die Optionen aber in eine Liste sprich in geschweifte Klammern, so ordnet Mathematica dem ersten Eintrag der ersten Funktion und den zweiten Eintrag der zweiten Funktion zu.

Möchte man aber zwei Stile kombinieren, wie im Beispiel die Farbe Grau mit der Option “gestrichelt” so müssen diese beiden Optionen mit der “Directive”-Funktion kombiniert werden. Mit der Option “PlotRange” wird festgelegt, welchen Bereich auf der Y-Achse man darstellen möchte. Die Reihenfolge ist dabei beliebig, könnte also auch direkt nach der Angabe der X-Werte (die nicht optional ist) stehen.

Sicher ist das Ganze etwas ungewohnt, da es einige syntaktische Freiheiten gibt, aber mit etwas Eingewöhnung und Erfahrung stellt man fest, wie viele Gestaltungsmöglichkeiten darin verborgen sind.

Zahlensysteme

Wer häufig mit Zahlen in verschiedenen Zahlensystemen umgehen muss, hat in Mathematica ein leistungsfähiges Hilfsmittel zur Hand. Dieses Softwaresystem gibt es mittlerweile für wenig Geld zur privaten oder studentischen Nutzung. Wer den Rhasperi Pi benutzt, bekommt es mit einigen Betriebssystemversionen sogar gratis.

Speziell für die Rechnung in und mit Zahlen in verschiednen Zahlensystemen stellt es die Funktion BaseForm[ Zahl, Basis] zur Verfügung.

Diese Funktion gibt zu einer angegeben Zahl im Dezimalsystem die entsprechende Zahl im System zur angegebenen Basis wieder.

BasisForm [32 , 2]  ==> 10000|2

Da Mathematica eine funktionale Sprache ist, können weitere Funktionen dazu verwendet werden um eine einfache Tabelle verschiedener Zahlen in unterschiedlichen Systemen zu erzeugen.