Mittwoch, 30. September 2015

Sudoku App für Android

Heute mal etwas Offtopic-mäßiges: Neben meiner Sudoku Seite habe ich nun eine App für Android geschrieben, mit welcher die Sudokus einfach und bequem auf dem Smartphone gelöst werden können. Ich würde mich freuen, wenn der eine oder andere sie mal ausprobiert, oder selber Interesse an der App Entwicklung findet. Die App habe ich in Java geschrieben, über die Erstellung von Android Apps mit C# gibt es auf diesem Blog eine Einführung.
Die App kann kostenlos über den Google Play Store heruntergeladen werden.

Samstag, 19. September 2015

Matlab Tutorial Teil 5 - Plots

Im heutigen Post möchte ich eine kurze Einführung in die Erstellung von Plots mit Matlab geben.
Dieser Beitrag soll nur einen groben Überblick vermitteln, für genaueres verweise ich auf die Dokumentation von Matlab. Dort sind alle Plot Arten mit Parametern aufgelistet, dort wird auch zum Beispiel erklärt wie man Achsen beschriftet, Farben ändert etc.
Hier möchte ich zwei Arten von 2-dimensionalen Plots erläutern, nämlich einfache Linien- und Balkendiagramme, sowie den Surface Plot als 3-dimensionalen.
Ein Liniendiagramm (line plot) erstellen wir mit der Funktion plot(). Dafür legen wir zuerst ein paar Testdaten mittels x = rand(8, 1) an, also einen Vektor mit 8 zufälligen Werten zwischen 0 und 1.
Dann liefert plot(x) das folgende Ergebnis:






















bar() erstellt ein Balkendiagramm (bar chart) aus den gegebenen Daten. bar(x) sieht wie folgt aus:






















Nun zu einem 3-dimensionalen Plot, dem Surface Plot. Dieser stellt (zum Beispiel) eine übergebene 2-dimensionale Matrix in der dritten Dimension (durch Höhe und Farbe) dar. Am Punkt mit Koordinaten (i, j) wird also der (i, j). - Eintrag der Matrix dargestellt, das heißt sein Wert durch die z - Koordinate dargestellt und zusätzlich passend eingefärbt.
Wir erstellen als Beispiel mittels A = rand(32) eine zufällige 32 x 32 Matrix. surf(A) erstellt dann das folgende Diagramm:



Freitag, 18. September 2015

Matlab Tutorial Teil 4 - Skripte und Funktionen

Um oft benutzten Code nicht jedes mal neu eingeben zu müssen haben wir in Matlab die Möglichkeit diesen in Skripte und Funktionen auszulagern.
Diese werden in Dateien mit der Endung .m gespeichert. Skripte sind einfach Sammlungen von Codezeilen, während Funktionen dazu noch einen Rückgabewert liefern.
Diese Dateien können wir bequem aus der Matlab Entwicklungsumgebung anlegen: Hierzu geben wir edit Name.m ein und bestätigen den Befehl. Daraufhin öffnet sich ein Editor mit der Datei.
Als Beispiel erstellen wir das Skript MyScript.m mit folgendem Inhalt:

A = rand(100);
d = det(A)

Es wird also eine zufällige 100 x 100 Matrix A angelegt und die Determinante d berechnet.
In Matlab können wir nun das Skript durch Eingeben des Namens MyScript aufrufen. Daraufhin wird das Skript ausgeführt und die Variable d ausgegeben. Was ausgegeben wird können mir mit dem Zeichen ";" steuern. Beenden wir eine Zeile mit dem Semikolon, wird diese ohne Ausgabe ausgeführt. Lassen wir dieses weg, wird das Ergebnis der Operation ausgegeben. Lassen wir also in der 1. Zeile des Skripts das Semikolon weg, wird die komplette Matrix ebenfalls ausgegeben.

Als zweites Beispiel legen wir nun eine Funktion an, welche den Durchschnitt über die übergebenen Werte berechnet und zurückgibt. Dafür geben wir edit MyFunction.m ein.
Als Inhalt geben wir ein:

function [y] = MyFunction(x)
y = sum(x);
y = y / numel(x);
end

Wie man sieht, beginnt eine Funktionsdeklaration mit dem Schlüsselwort function und endet mit end. In eckigen Klammern geben wir dann zuerst die Rückgabeparameter an - hier wird nur y zurückgegeben, mehrere Parameter werden einfach per Komma getrennt. Nach dem Gleichheitszeichen geben wir den Namen der Funktion (welcher mit dem Dateinamen übereinstimmten sollte) sowie die Eingabeparameter in runden Klammern an - hier nur x.
In der Funktion summieren wir dann über x (wir erwarten also einen Vektor) und teilen durch die Anzahl der Elemente in x. Das Ergebnis gibt die Funktion in y zurück. In Matlab können wir dann die Funktion wie folgt aufrufen und ihren Rückgabewert benutzten: test = MyFunction([1,2,3,])
(Hinweis: In Matlab lässt sich der Durchschnittswert natürlich einfacher berechnen - zum Beispiel mit der vordefinierten Funktion mean(). Ich habe dieses Beispiel nur zur Erläuterung genommen.)

Donnerstag, 17. September 2015

Matlab Tutorial Teil 3 - Lineare Gleichungssysteme lösen

Im heutigen Teil möchte ich zeigen, wie man mit Matlab lineare Gleichungssysteme löst.
Ein lineares Gleichungssystem hat die Form A * x = b, wobei A die Koeffizienten Matrix und b die rechte Seite des Gleichungssystems ist. Wir möchten dann nach x auflösen.
Hierfür müssen wir einfach A und x in Matlab eingeben und dann den Befehl

x = linsolve(A, b)

aufrufen.

Ein Beispiel:
Wir möchten das LGS

x1   + x2     + x3   = 5
2x1             + 3x3 = 2
          10x2 - x3    = 1

lösen.
Also geben wir in Matlab die Koeffizienten Matrix (A = [1, 1, 1; 2, 0, 3; 0, 10, -1]) sowie den Vektor b (b = [5;2;1]) ein.
Nach Eingabe von x = linsolve(A, b) gibt uns Matlab die richtige Antwort

x =

   15.6250
   -0.8750
   -9.7500

zurück.

Mittwoch, 16. September 2015

Matlab Tutorial Teil 2 - Vektoren und Matrizen

Nachdem ich im vorigen Post eine kleine Einführung in die Programmiersprache Matlab gegeben habe, möchte ich mit diesem Post nun daran anknüpfen.
Im heutigen Teil geht es um die Verwendung von Matrizen und Vektoren, für welche die Sprache besonders ausgelegt ist, und welche sehr bequem gehandhabt werden können.
Eine Matrix wird in eckigen Klammern definiert, Einträge einer Zeile werden per Komma getrennt, Zeilen durch Semikolon, also zum Beispiel: A = [1, 2; 3, 4]
Vektoren sind natürlich nur Spezialfälle einer Matrix, nämlich eindimensionale Matrizen. Dementsprechend können sie mit V1 = [1, 2] (Zeilenvektor) oder V2 = [3;4] (Spaltenvektor) definiert werden - im folgenden wird nur noch der Begriff Matrix verwendet.
Es gibt verschiedene vordefinierte Matlab Funktionen mit welchen bestimmte Matrizen erzeugt werden können: Hier möchte ich ones(), zeros() und rand() erwähnen.
ones(a, b) erzeugt eine a x b Matrix (a Zeilen, b Spalten) bei der alle Einträge 1 sind. Dies kann auch für höhere Dimensionen gemacht werden, wird nur ein Parameter übergeben wird eine 2-dimensionale quadratische Matrix erzeugt.
zeros() und rand() tun das gleiche, zeros() füllt die resultierende Matrix mit Nullen, rand() mit zufälligen Einträgen zwischen 0 und 1.
Mit Matrizen kann wie gewohnt umgegangen werden. Mit +, -, * können also Matrixaddition, -subtration und -multiplikaton durchgeführt werden. * ist überladen und kann auch für eine Skalarmultiplikation zwischen einem Skalar (einer Zahl) und einer Matrix verwendet werden.
In der Matlab Dokumentation sind alle möglichen Funktionen zum Umgang mit Matrizen aufgeführt, wie zum Beispiel die Rangbestimmung (rank()) und und und.
Eine weitere interessante Funktion beim Umgang mit Matrizen ist die Extraktion von Untermatrizen.
Wir können wie folgt die Untermatrix einer Matrix A, welche aus den Zeilen a bis b und Spalten c bis d besteht auswählen: A(a:b, c:d)
Wir können eine Dimension komplett wählen indem wir dafür nur den Doppelpunkt übergeben: A(:, c:d)
Mit der Funktion sum() können wir so zum Beispiel bequem über die Spalten / Zeilen einer Matrix summieren, für Zeile i lautet der Befehl dafür: sum(A(1,:))
Im nächsten Post werde ich eine weitere interessante Anwendung zeigen, dort geht es um das Lösen von Gleichungssystemen.

Mittwoch, 2. September 2015

Matlab Tutorial Teil 1 - Einführung

Nach Ausflügen in die App Programmierung für Android und die Internetprogrammierung mit PHP möchte ich nun das Themengebiet dieses Blogs noch ein wenig erweitern und einen Einblick in die Programmiersprache Matlab geben. Diese ist eine kommerzielle Software der Firma The MathWorks und eignet sich besonders zur Lösung mathematischer Probleme und deren Visualisierung. Matlab ist sehr beliebt und wird zum Beispiel auch in der Industrie sehr häufig eingesetzt, dies liegt unter anderem an der Einfachheit der für mathematische Anwendungsfälle entwickelten Programmiersprache, schnell können Probleme modelliert und Lösungen getestet werden. Ein Tradeoff ist dabei jedoch die Performance, optimierter C++ Code zum Beispiel kann um einen Faktor von 50 - 100 schneller sein.
Zuerst muss Matlab installiert werden. Wie bereits erwähnt ist die Software kommerziell, glücklicherweise gibt es jedoch zum Beispiel an vielen Universitäten kostenlose Versionen für Studenten. In diesem Fall kann Matlab von diesen Quellen installiert werden. Nach erfolgreichem Abschluss und Aktivierung der Lizenzen kann man das Programm starten und sollte in etwa das folgende Bild sehen:



Im mittleren Fenster, dem Command Window können wir nun direkt Befehle eingeben und so Code ausführen. Hier kann man schnell die Einfachheit der Skriptsprache Matlab erkennen: Variablen müssen zum Beispiel nicht deklariert werden, es gibt keine Typen, Zahlen, Matrizen etc. können einfach verwendet werden.
Geben wir einmal A = 1 ein und bestätigten mit Enter, danach B = 2 und bestätigen ebenfalls. In der Matlab Umgebung werden nun A und B als die entsprechenden Zahlen gespeichert, welche wir dann benutzen können, zum Beispiel mittels A + B.
Genauso können wir auch Matrizen (und damit Vektoren) definieren: Werte in einer Zeile werden mit Komma getrennt, Zeilen mit Semikolon, die ganze Matrix mit eckigen Klammern umgeben.
C = [1, 2; 3, 4] definiert die entsprechende Matrix, nach Drücken von Enter sehen wir diese dann auch grafisch im Ausgabefenster.
Mit diesen Zahlen und Matrizen können wir nun wie gewohnt weiter rechnen, man probiere zum Beispiel einmal B * C + C für die Durchführung einer Skalarmultiplikation und einer Matrixaddition.
Dies soll für eine erste Einführung genügen, demnächst folgen weitere Posts.