01 – Einführung in Matlab

 

Matlab ist ein Programm zur Lösung mathematischer Probleme und zur grafischen Darstellung der Ergebnisse. Die Berechnungen erfolgen dabei primär numerisch mit Hilfe von Matrizen. Es werden also zum Beispiel Integrale numerisch approximiert, Stammfunktionen können nicht gebildet werden.
An dieser Stelle soll eine kurze Einführung in Struktur und Syntax der verwendeten Programmiersprache gegeben werden.

Zur Vertiefung empfehle ich die Aufgaben im Matlab-Projekt.

Vorbereitung

Bei der Verwendung von Matlab ist es nötig, ein Arbeitsverzeichnis anzulegen. Dort werden später die Programme gespeichert. Im command window sind dazu folgene Befehle nützlich:

pwd
mkdir matlab
cd matlab

Einfache Rechenoperationen

In das Kommandofenster von Matlab werden Anweisungen eingegeben und numerische Ergebnisse ausgegeben.
Grundlegende Rechenoperationen:

13 / 3 + 5 * 6 - pi
sqrt(7) - 5 ^ 2

Definition von Variablen: Braucht man einen Ausdruck öfters, definiert man ihn als Variable. Der Wert der Variable wird im Workspace gespeichert. Folgende Regeln sind bei der Definition von Variablen zu beachten:

  • Der Variablenname draf keine Sonderzeichen außer dem Unterstrich enthalten
  • Das erste Zeichen muss ein Buchtabe sein
  • Der name darf nicht mehr als 19 Zeichen enthalten

Beispiel:

Variable_1 = 2 * pi
Variable_1 = 2 * pi;   %Ausgabe wird unterdrückt

Verschiedene häufig benutzte Konstanten (wie etwa π), sind bereits gespeichert und können wie im Beispiel verwendet werden.

Zahlendarstellungen

Die Ausgabe erfolgt standardmäßig mit vier Nachkommastellen.

Darstellungsformate: Hier ein paar Beispiele für verschiedene Ausgabeformate

x = 4/3
format long; x 		% Ausgabe mit vielen Nachkommastellen
format long e; x 	% Ausgabe in Exponentendarstellung
format +; x 		% gibt das Vorzeichen aus
format short; x 	

y=10^20, z=1e20 	% nicht nur bei der Ausgabe, sondern auch bei der Eingabe
					% hat man diese beiden Möglichkeiten

s=1/0, t=1/s, u=t*s, s/s, 2/t, 1^s, 2^s, s-s;
% Programm stürzt nicht ab, wenn durch 0 geteilt wird,
% sondern rechnet mit unendlich weiter! Unbestimmte Zahlen
% (z.B. Inf/Inf) werden als NaN "not a number" dargestellt,
% die Rechnung kann dann nicht fortgesetzt werden.

help format 		% Hilfe mit Beispielen

Wichtig: Bei Änderung des Formats ändert sich nur die Ausgabe, nicht aber die interne Darstellung (und damit die Genauigkeit) der Zahlen.

Komplexe Zahlen

Matlab kann auch mit komplexen Zahlen umgehen. Die imaginäre Einheit kann als i oder j eingegeben werden.

z1 = 3 + 4j, z2 = 2 + 2j, z3 = 1 - 2i
z1 / 3 + z2 * z1
w1 = conj(z1), w3 = z3' 	% der Strich bedeutet "konjugiert komplex" bei komplexen Zahlen
real(z1), imag(z1) 			% Realteil und Imaginärteil
abs(z1) 					% Betrag
angle(z2) 					% Winkel
lookfor complex 			% sucht alles mit "complex" in der Beschreibung

Vektoren und Matrizen

Vektoren und Matrizen sind die Grundbausteile von Matlab. Matlab unterscheidet zwischen Spalten- und Zeilenvektoren, man muss also bei Rechenoperationen auch auf Dimensionen achten.

Format:

x = [1 2 3 4 5]
A = [1 2 3; 4 5 6; 7 8 9] 	% Zeilenumbruch mit ;
y = [1.2, 4, sqrt(3)] 		% , oder Leerzeichen kann als Trennzeichen benutzt werden
z = [1 2 3]' 				% Transponierter Spaltenvektor = Zeilenvektor
M = magic(4) 				% 4x4 Matrix, gleiche Zeilen- Spalten- und Diagonalsumme
M = ones(3) 				% Matrix mit 1en gefüllt
C = zeroes(4) 				% Matrix mit 0en gefüllt
E = eye(3) 					% Einheitsmatrix
e = ones(1,3) 				% Vektor mit 1 gefüllt
diag(e) 					% Diagonalmatrix mit Elementen des Vektors e auf Diagonale
diag(diag(e)) 				% Diagonale einer Matrix als Vektor

Rechnen mit Matrizen:

H = 3 * diag(e) - 2 * B
E * B, E .* B 	% der Punkt lässt die Multiplikation komponentenweise ausführen
p1 = e * e', p2 = e' * e
z = x(4) - e(2) %mit dieser Syntax ist der Zugriff auf einzelne Elemente möglich.
% Wichtig: Matlab fängt bei 1 mit dem Zählen an, statt bei 0

v = x' 			% der Strich steht hier für den transponierten Vektor
r = [10 11 12]
q = [13 14 15 16]', p=[13;14;15;16]
B = [A; r] 		% fügt Zeile unter Matrix A an
C=[B p] 		% fügt Spalte an Matrix B an
size(B) 		% gibt die Anzahl der Zeilen und Spalten aus
[m,n]=size(A) 	% mehr als ein Rückgabewert kann in Form eines
				% Vektors mit [...] verarbeitet werden

Der Doppelpunkt-Operator

Der Doppelpunkt-Operator findet anwendung bei Zähl-Intervallen und Indexbereichen:

n = 10
1 : n 				% gibt Vektor mit den Zahlen 1 bis 10 zurück
1 : 2 : n 			% gibt Vektor mit den Zahlen 1 3 5 7 9 zurück (1 bis 10 in 2er-Schritten)
n : -2 : n 			% gibt Vektor mit den Zahlen 10 8 6 4 2 zurück
linspace(0,pi,11) 	% Vektor mit 11 Komponenten mit Zahlen zwischen 0 und pi
help linspace 		% Hilfe zu diesem praktischen Operator
y = x(3 : 5) 		% Vektor mit dritter bis fünfter Komponente
y(4 : 6) = x(1 : 3) % weist 4er bis 6er Komponente von y die 1te bis 3te Komponente von x zu
C = C(:, 4 : -1 : 1) 	% : bedeutet hier "nimm alle Zeilen",
						% die Spalten werden von 4 nach 1 umsortiert
A = C(1 : 2, : ) 		% nur die ersten beiden Zeilen, alle Spalten
v = A( : ) 				% Matrix wird spaltenweise in Vektor geschrieben
x = pi * (0 : 1/2 : 2) 	% Vektor mit Werten von pi*0 bis pi*2, in 0.5-Schritten
s = sin(x), c = cos(x) 	% berechnet Funktionswert an allen Stellen des Vektors

Graphische Darstellungen

Matlab bietet zahlreiche Möglichkeiten der graphischen Darstellung. Hier eine kleine Auswahl:

% x als Vektor von 0 in der Schrittweite 0.05 bis 2pi. Berechne cos und sin:
x = 0 : .05 : 2 * pi; c=cos(x); s=sin(x) 

plot(c) % graphische Ausgabe der Werte für den Cosinus. Auf der x-Achse
		% stehen die Nummern der Komponenten des Vektors, nicht deren Wert

plot(x, c) 			% hier werden die x-Werte auf die Achse eingetragen
plot(x, c, '.') 	% gibt nur die Punkte aus, ohne Verbindungslinie
plot(x, c, '*') 	% gibt die Punkte in Form von Sternchen aus
plot(x, c, 'rs') 	% gibt die Punkte in Form von roten Quadraten aus

% Mehrere Plots können in einem Fenster angeordnet werden. Dazu gibt man zuerst an,
% wie viele untereinander (2) und nebeneinander (1) kommen, es folgt die Nummer
% des aktuellen Plots (1). "title" dient zur Beschriftung der Plots
subplot(2, 1, 1), plot(x, c), title('cos')
subplot(2,1,2), plot(x,s), title('sin')

figure(2) 	% öffnet neues Ausgabefenster, damit das erste nicht überschrieben wird
hold on, plot(s), hold off  % Grafik nicht überschreiben, sondern zu der letzten dazu
plot(x, c, x, s) 		% plottet die beiden Funktionen in einen Graphen,
						% wählt automatisch verschiedene Farben
legend('Kosinus', 'Sinus') 	% Beschriftung für die beiden geplotteten Funktionen
legend('Kosinus', 'Sinus', -1) 	% setzt die Beschriftung neben die Grafik

plot(x, c, 'o', x, s, ':')
Y = 1; plot(x,Y)
title('Funktionen')
xlabel('x-Achse') 		% beschriftet die x-Achse mit "x-Achse"
ylabel('f(x)') 			% beschriftet die y-Achse mit "f(x)"
grid					% zeichnet Gitterlinien ein
x = -8 : 0.5 : 8; y = x'
X = ones(size(y)) * x; Y = y * ones(size(x));
R = sqrt(X .^ 2 + Y .^ 2) + eps;
Z = sin(R) ./ R;
mesh(Z);
view (45, 45) 			% richtet Betrachtungswinkel in geöffnetem mesh neu aus
view(0, 90)
view(45, 90)
view(0, 0)
view(3) 				% Standardwerte für 3D-Plot: (-37.5, 30)

Gleichungssysteme und Eigenwerte

A = rand(3, 3), b = rand(3, 1) 	% Zufallszahlen in Matrix und Vektor
[X, L] = eig(A) 				% Eigenwerte und Eigenvektoren werden zurückgegeben
inv(A) 							% Inverses der Matrix A
A \ b 		% löst das Gleichungssystem. Der verwendete Algorithmus ist sehr gut,
			% er analysiert auch die Struktur der Matrix.

Nützliche Hilfsfunktionen

tic
toc 	% misst die Zeit zwischen tic und toc und gibt sie aus
save tmp
clear
load tmp
save tmpmat A
save a.dat A -ascii
clear A
load a.dat
A=load('a.dat')
help[
help

Matlab als Programmiersprache: m-Files

Es gibt zwei Varianten: Script-Files und Function-Files.
Ein Script-File ist eine Aneinanderreihung von Matlab-Anweisungen, die in einen Texteditor eingegeben und mit der Endung .m abgespeichert werden. Wir betrachten folgendes Beispiel:

% Plot einer Wurfparabel
% übernimmt aus Workspace: Abwurfgeschwindigkeit v_kmh,
% Abwurfwinkel phi_grad

g = 9.81;
v_ms = v_kmh / 3.6;
phi_rad = phi_grad * pi / 180;
wurfzeit = 2 * v_ms * sin(phi_rad) / g;
t = 0 : 0.01 : wurfzeit;
x = v_ms * t * cos(phi_rad);
y = v_ms * t * sin(phi_rad) - 0.5 * g * t .^ 2;
plot(x,y); grid

Wir speichern diese Datei als “wurf.m” ab. Es müssen noch v_kmh und phi_grad im Workspace definiert werden. Anschließend wird das Skript aufgerufen:

v_kmh = 100; phi_grad = 60
wurf

Funktion-Files: Mit Hilfe von m-Files können auch neue Funktionen definiert werden. Diese werden im Arbeitsverzeichnis mit der Endung .m gespeichert. Wir betrachten als Beispiel eine Funktion, die einen Winkel x vom Bogenmaß ins Gradmaß umrechnet. Die Funktion wird mit r2d(x) bezeichnet.

function d = r2d(x)
% r2d(x) rechnet einen Winkel x vom Bogenmaß ins Gradmaß um.
d = x * 180 / pi;

Wir speichern die Datei unter dem Namen r2d.m.
Wichtig: Der Funktionsname und der Name der Datei müssen immer übereinstimmen. Wir testen die Funktion:

d = r2d(pi / 2)
x = (0 : 0.5 : 2) * pi; r2d(x);
help r2d

Ähnliche Artikel

1 Kommentar zu “01 – Einführung in Matlab”

Ich frag mich ob wir bald in jeder Vorlesung ne Matlab Einführung bekommen ;)

Kommentar verfassen