% MATLAB Tutorial
% ===============
% Kurze Einführung in Funktionen relevant zu unserer Vorlesung
% Erstellt von Sebastian Scherer sebastian.scherer@uni-tuebingen.de
% CC BY-SA 3.0 ( http://creativecommons.org/licenses/by-sa/3.0/ )
% Allgemeines:
% ============
% MATLAB ist eine
% 1) einfache Skriptsprache zur schnellen Manipulation von Matrizen,
% 2) vollständige IDE,
% 3) Sammlung etlicher wichtige mathematischer Bibliotheken + Toolboxen.
%
% Kommerzielles (teures!) Produkt, für Studenten und Mitarbeiter kostenlos.
%
% Download im CampusSoftware-Portal des ZDV:
% https://services.zdv.uni-tuebingen.de/CampusSoftware/
%
% Interessante freie Alternativen:
%
% - GNU Octave:
% * Weitgehend kompatibel zu MATLAB ohne Toolboxen
% * Keine symbolischen Berechnungen
%
% - (wx)Maxima:
% * Freies Computer Algebra System
%
% - Python:
% * NumPy/SciPy für numerische Berechnungen
% http://wiki.scipy.org/NumPy_for_Matlab_Users
% * matplotlib für plots
% http://matplotlib.org/
% * SymPy für symbolische Berechnungen
% http://www.sympy.org/en/index.html
close all; % evtl. geöffnete plot-Fenster schließen
clear all; % Daten im Workspace löschen
% Einfaches Rechnen:
% ==================
% Taschenrecher-Ersatz:
% Setzt man am Ende einer Zeile kein Semikolon, wird das Ergebnis
% direkt ausgegeben:
5+3 %#ok<*NOPTS> % Warne nicht vor fehlenden Semikolons
3^2
sqrt(9)
cos(pi)
1/inf
% Variablen und Funktionen:
% =========================
% Variablen werden bei der ersten Zuweisung deklariert:
a = 5
b = 2 + a
% Das Ergebnis der letzten Operation kann aus der Variablen 'ans'
% ausgelesen werden (aber bitte nicht in Skripten verwenden):
ans
% Funktionen können "anonym" deklariert und anschließend verwendet werden:
parabel = @(x) 5*x.^2 + 2*x + 1
parabel(5)
% Für komplexere Funktionen empfiehlt es sich allerdings, diese in eine
% extra Datei auszulagern (s. beispielFunktion.m).
% Matlab durchsucht das aktuelle Verzeichnis + seinen Suchpfad
% (konfigurierbar).
beispielFunktion(5)
% Lineare Algebra:
% ================
% Matrizen oder Vektoren werden folgendermaßen eingegeben: Ein Semikolon
% markiert das Ende einer Zeile, zwischen Elementen einer Zeile kann man
% ein Komma setzen (optional).
M = [1 2; 3 4]
v = [1; 2]
% Es gibt diverse Abkürzungen zur Erzeugung einfacher Matrizen:
I4 = eye(4) % Identität
Z = zeros(4,4)
a = ones(4,1)
D = diag([1, 2, 3])
% Einer der hilfreichsten Operatoren ist der Doppelpunkt-Operator:
vi = 1:10
vi = 1:0.1:10
% Passende Dimensionen vorausgesetzt, können Vektoren und Matrizen einfach
% konkateniert werden:
B = [I4 Z a]
B2 = [I4; Z]
% Matrizen und Vektoren werden mit "*" multipliziert:
M*v
M*M
5*M
% Elementweise Operationen werden durch einen vorangestellten Punkt
% ausgedrückt:
M.*M
M.^5
% "'" transponiert Matrizen:
M'
v'
% Zugriff auf einzelne Einträge geht über runde Klammern.
% Achtung: MATLAB verwendet 1-basierte Zählweise
M(1,2)
v(1)
v(end)
% Teilmatrizen bzw. Zeilen und Spalten werden über ":" selektiert:
M(:,1)
M(1,1:2)
v(2:end)
% Übrigens: Die meisten eingebauten Funktionen akzeptieren sowohl Skalare
% als auch Matrizen als Eingabe und werten Matrizen elementweise aus:
sin(M)
% Außerdem praktisch: Summieren über eine Dimension:
sum(M,1)
sum(M,2)
% Beispiel Rotation in 2D um 180° als homogene Transformationsmatrix:
rot = @(alpha) [cos(alpha), -sin(alpha), 0; sin(alpha), cos(alpha), 0; 0, 0, 1]
rot(180)
rot(pi)
% Plotten von Daten:
% ==================
% Gewünschten Wertebereich für x-Achse auswählen:
x = 0:0.01:2*pi;
% Zugheörige y-Werte berechnen und plotten:
plot(x, sin(x));
% Mehrere Kurven:
plot(x, sin(x), x, cos(x));
legend('sin', 'cos')
% 3D:
x = 0:0.01:10*pi;
plot3(sin(x),cos(x),x)
% Für mehr Details siehe Hilfe!
% Hilfreiche Funktionen beim Umgang mit Wahrscheinlichkeiten
% ==========================================================
% Zufallsvariablen erzeugen:
randn(10, 1) % normalverteilt N(0, 1)
rand(10, 1) % gleichverteilt zwischen 0 und 1
r2 = mvnrnd([0; 0], eye(2), 20) % n-D normalverteilt mit geg. mu, Sigma
% Mean und Sample Covariance Matrix:
mu = mean(r2)
S = cov(r2)
x = -5:0.01:5;
% Wahrscheinlichkeitsdichte und kumulative Verteilungsfunktion:
plot(x, normpdf(x, 0, 1), x, normcdf(x, 0, 1));
% Wahrscheinlichkeitsdichte im mehrdimensionalen Fall:
mvnpdf(r2(1,:), mu, S)
% Symbolisches Rechnen
% ====================
% MATLAB enthält ein komplettes Computeralgebrasystem: Das frühere MuPAD.
% Symbolische Variablen werden mit dem Befehl syms deklariert.
% Falls sie nicht weiter spezifiziert werden, geht MATLAB von komplexen
% Zahlen aus. Wir rechnen meist mit reellen Zahlen.
syms x y z real
x + y
% Plotten von Symbolischen Funktionen:
% ====================================
syms x y z real
parabel(x)
ezplot(parabel, [-1,1])
% Etwas komplexer:
l = (x^2 + y^2)^2 - 20*(x^2 - y^2)
ezplot( l == 0 )
% Vereinfachen von Termen:
% ========================
term = sin(x)*cos(y) + sin(y)*cos(x)
terms = simplify(term)
% Manchmal gibt es unterschiedliche Möglichkeiten, einen Term zu
% "vereinfachen"
simple(10*(x^2 + y*(20+z)))
% Ableiten und integrieren:
% =========================
% Ableitung nach x:
d = diff(parabel(x), x)
% Unbestimmtes Integral: ("Stammfunktion")
s = int(parabel(x), x)
% Schönere Ausgabe:
% =================
pretty(rot(x))
latex(rot(x))
% Symbolische Berechnungen mit Matrizen:
% ======================================
syms px py pz x real
p = [px; py; pz]
R = rot(x)
R*p
diff(R*p, x)
% Jacobi-Matrix:
d = sqrt(p'*p)
J = jacobian(d, p)
% Sonstiges:
% ==========
solve(parabel(x) == 1, x)
limit(1/x, x, 0)
limit(1/x, x, 0, 'right')
limit(1/x, x, 0, 'left')
limit(1/x, x, Inf, 'left')