EMZETT.
Login

Kurz: 1 2 3 4 5

Teil des Kurses MATLAB

Kapitel 2 von 8 im Kurs MATLAB (Abschnitt „Matrizen“). Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.

Vektoren

zeile = [1 2 3 4 5]          % Zeilenvektor (Leerzeichen oder Komma)
spalte = [1; 2; 3]            % Spaltenvektor (Semikolon)
von_bis = 1:5
schritt = 0:0.25:1
runter = 10:-3:0
linspace(0, 1, 5)             % 5 gleichmäßig verteilte Punkte
logspace(0, 3, 4)
zeros(1, 3)
ones(2, 2)
numel(zeile)
length(spalte)
size(zeile)
zeile(1)                      % Indizes beginnen bei 1!
zeile(end)
zeile(2:4)
zeile([1 3 5])
zeile(zeile > 2)              % logische Indizierung
zeile'                        % transponieren

Ausgabe:

zeile =
 
   1   2   3   4   5
 
spalte =
 
   1
   2
   3
 
von_bis =
 
   1   2   3   4   5
 
schritt =
 
         0    0.2500    0.5000    0.7500    1.0000
 
runter =
 
   10    7    4    1
 
ans =
 
        0   0.2500   0.5000   0.7500   1.0000
 
ans =
 
      1     10    100   1000
 
ans =
 
   0   0   0
 
ans =
 
   1   1
   1   1
 
ans = 5
ans = 3
ans =
 
   1   5
 
ans = 1
ans = 5
ans =
 
   2   3   4
 
ans =
 
   1   3   5
 
ans =
 
   3   4   5
 
ans =
 
   1
   2
   3
   4
   5

Matrizen

A = [1 2 3; 4 5 6; 7 8 10]
size(A)
A(2, 3)                       % Zeile 2, Spalte 3
A(2, :)                       % ganze Zeile
A(:, 1)                       % ganze Spalte
A(1:2, 2:3)                   % Teilmatrix
A(end, end)
A(:)'                         % alle Elemente als Spalte (spaltenweise)
A(A > 5)'
A(2, :) = []                  % Zeile löschen
B = zeros(2, 3);
B(:, 2) = [7; 8]
C = [A; 100 200 300]          % Zeile anhängen
D = [A, [1; 2]]               % Spalte anhängen
eye(3)
magic(3)
diag([1 2 3])
rand(2) >= 0
numel(rand(3, 4))
reshape(1:6, 2, 3)
repmat([1 2], 2, 2)

Ausgabe:

A =
 
    1    2    3
    4    5    6
    7    8   10
 
ans =
 
   3   3
 
ans = 6
ans =
 
   4   5   6
 
ans =
 
   1
   4
   7
 
ans =
 
   2   3
   5   6
 
ans = 10
ans =
 
    1    4    7    2    5    8    3    6   10
 
ans =
 
    7    8    6   10
 
A =
 
    1    2    3
    7    8   10
 
B =
 
   0   7   0
   0   8   0
 
C =
 
     1     2     3
     7     8    10
   100   200   300
 
D =
 
    1    2    3    1
    7    8   10    2
 
ans =
 
Diagonal Matrix
 
   1   0   0
   0   1   0
   0   0   1
 
ans =
 
   8   1   6
   3   5   7
   4   9   2
 
ans =
 
Diagonal Matrix
 
   1   0   0
   0   2   0
   0   0   3
 
ans =
 
  1  1
  1  1
 
ans = 12
ans =
 
   1   3   5
   2   4   6
 
ans =
 
   1   2   1   2
   1   2   1   2

Matrizen werden spaltenweise gespeichert: reshape(1:6, 2, 3) füllt erst Spalte 1, dann Spalte 2 usw. Mit A(5) greifst du über einen linearen Index zu.

Elementweise vs. Matrixoperationen

Der Punkt . vor dem Operator macht ihn elementweise:

a = [1 2 3];
b = [4 5 6];
a + b
a .* b
a ./ b
a .^ 2
a * b'                        % Skalarprodukt (Zeile * Spalte)
a' * b                        % äußeres Produkt (3x3)
dot(a, b)
cross([1 0 0], [0 1 0])
norm([3 4])
A = [2 1; 1 3];
A * A                         % Matrixprodukt
A .* A                        % elementweise
A ^ 2
A .^ 2
A'
inv(A)
det(A)
rank(A)
trace(A)
A \ [3; 5]                    % lineares Gleichungssystem A*x = b lösen
eig(A)

Ausgabe:

ans =
 
   5   7   9
 
ans =
 
    4   10   18
 
ans =
 
   0.2500   0.4000   0.5000
 
ans =
 
   1   4   9
 
ans = 32
ans =
 
    4    5    6
    8   10   12
   12   15   18
 
ans = 32
ans =
 
   0   0   1
 
ans = 5
ans =
 
    5    5
    5   10
 
ans =
 
   4   1
   1   9
 
ans =
 
    5    5
    5   10
 
ans =
 
   4   1
   1   9
 
ans =
 
   2   1
   1   3
 
ans =
 
   0.6000  -0.2000
  -0.2000   0.4000
 
ans = 5.0000
ans = 2
ans = 5
ans =
 
   0.8000
   1.4000
 
ans =
 
   1.3820
   3.6180

Achtung

* und / sind Matrix-Operationen, .*, ./, .^ elementweise. Das ist die häufigste Fehlerquelle für Neulinge.

Funktionen auf Vektoren und Matrizen

x = [4 8 15 16 23 42];
sum(x)
prod([1 2 3 4])
mean(x)
median(x)
std(x)
var(x)
max(x)
[m, i] = max(x)
min(x)
sort(x, 'descend')
cumsum(x)
diff(x)
any(x > 40)
all(x > 0)
find(x > 10)
fliplr(x)
unique([3 1 2 3 1])
numel(find(x > 10))
A = magic(4);
sum(A)                        % Spaltensummen
sum(A, 2)'                    % Zeilensummen
sum(A(:))
mean(A(:))
max(A, [], 2)'
diag(A)'
triu(A)
any(A(:) == 16)

Ausgabe:

ans = 108
ans = 24
ans = 18
ans = 15.500
ans = 13.491
ans = 182
ans = 42
m = 42
i = 6
ans = 4
ans =
 
   42   23   16   15    8    4
 
ans =
 
     4    12    27    43    66   108
 
ans =
 
    4    7    1    7   19
 
ans = 1
ans = 1
ans =
 
   3   4   5   6
 
ans =
 
   42   23   16   15    8    4
 
ans =
 
   1   2   3
 
ans = 4
ans =
 
   34   34   34   34
 
ans =
 
   34   34   34   34
 
ans = 136
ans = 8.5000
ans =
 
   16   11   12   15
 
ans =
 
   16   11    6    1
 
ans =
 
   16    2    3   13
    0   11   10    8
    0    0    6   12
    0    0    0    1
 
ans = 1

Merke

  • Vektoren: [1 2 3] (Zeile), [1; 2; 3] (Spalte), 1:5, linspace
  • Indizes beginnen bei 1; A(zeile, spalte), : = alle, end = letztes
  • * ist Matrixprodukt, .* elementweise
  • Lineare Gleichungssysteme löst A \ b
  • sum, mean, max, sort, find, cumsum wirken spaltenweise auf Matrizen

Übungsaufgabe

Löse das Gleichungssystem 2x + y = 5, x + 3y = 10 mit dem Backslash-Operator.

Quiz zur Selbstkontrolle

Weiter im Kurs

Zurück: Einführung und erstes Skript

Weiter: Kontrollfluss und Funktionen

Alle Kapitel: MATLAB im Überblick