Datenstrukturen 6. Thema: Arbeiten mit Feldern Was sind Felder? • Ein Feld ist eine Datenstruktur, deren Elemente alle von derselben skalaren Datenart sind • Elemente sind ein- oder mehrdimensional angeordnet • Anordnung in einer Dimension wird durch einen Index beschrieben Eigenschaften von Feldern: • gleichwertige Elemente • Länge einer Dimension ist unabhängig vom Wert der Indices in den anderen Dimensionen (keine Lücken) Unterteilung: Felder (arrays) Matrizen Skalare (1*1-Matrizen) Vektoren (Zeilen- und Spaltenvektoren) Mehrdimensionale Felder n*m-Matrizen Anlegen von Feldern (per Hand): • Matrizen A = [a11 a12 a13; a21 a22 a23] • Vektoren - Zeilenvektoren: - b = [a11 a12 a13] - Spaltenvektoren - d = [a11; a21; a31] Anlegen von Feldern (per Hand): • mehrdimensionale Felder Matrix A Matrix B ____________ C(:, :, 1) = A C(:, :, 2) = B Besondere Funktionen zum Anlegen von Zeilenvektoren • c = [Start: Schrittweite: Ende] • linspace linspace(-2,+3,50) liefert einen Vektor mit 50 zwischen -2 und +3 äquidistant verteilten Werten. • logspace logspace(-2,+2,2000) liefert einen Vektor mit 2000 Werten, die auf einer logarithmisch skalierten Strecke zwischen 1.0e-2 und 1.0e+2 äquidistant verteilt sind. Besondere Funktionen zum Anlegen von Matrizen • Magisches Quadrat A = magic(Länge) • Einheitsmatrizen B = eye(Länge (, Länge) ) • ones - liefert Felder beliebiger Gestalt, bei denen alle Elemente den Wert 1 haben. • zeros - liefert Felder beliebiger Gestalt, bei denen alle Elemente den Wert 0 haben. Besondere Funktionen zum Anlegen von mehrdimensionalen Feldern • Die Matlab-Funktion rand liefert Felder, deren Elemente gleichverteilte Zufallszahlen im Intervall(0,1) sind. • • • • • rand(1,n) liefert einen Zeilenvektor der Länge n rand(n,1) liefert eine Spaltenvektor der Länge n rand(n) liefert eine quadratische n*n Matrix rand(n,m) liefert eine n*m Matrix rand(n,m,p) liefert ein n*m*p Feld Besondere Funktionen zum Anlegen von mehrdimensionalen Feldern • randn liefert Felder beliebiger Gestalt, bei denen die Elementwerte normalverteilt mit Mittelwert 0 und Standardabweichung 1 sind. Zugriff auf Feldbereiche • Vektoren - a(Index_D1) • Matrizen und mehrdimensionale Felder - Elemente: B(Index_D1, Index_D2) - Bereiche: B(Index_D1, b23: b25) - Zeilen: B(Index_D1, :) - Spalten: B(:, Index_D2) Rechenoperation auf Felder • • • • • • • • • • • • • Matrizen transponieren: A‘ Matrizen mit Matrizen oder Vektoren multiplizieren -B*C -D*e Komponentenweise Berechnung -t.*t Inverse einer Matrix: inv(A) Rang rank(A) Determinante det(A) Summe (Differenz) A + B (A - B) p-te Potenz A^p Skalarprodukt zweier Vektoren x‘ * y Äußeres Produkt zweier Vektoren x * y' Multiplikation mit Skalar c c*x Matrix-Vektor Produkt A*x Eine Besonderheit in MATLAB stellt die Matrix-Division dar. Hierbei gilt: • • • • • X=A\B ist Lösung der Gleichung A*X=B X=B/A ist Lösung der Gleichung X*A=B Wenn bei der Matrix-Division anstelle der Matrix B ein Vektor b verwendet wird, so stell x=A\b gerade die Lösung des linearen Gleichungssystems A*x=b dar; bei der Lösung wird der Gaußsche Algorithmus verwendet. Eigenwerte und Eigenvektoren einer Matrix A können folgendermaßen berechnet werden: • • Vektor x der Eigenwerte: x=eig(A) Matrix X der Eigenvektoren, Diagonalmatrix D der Eigenwerte: [X,D]=eig(A) Rechenoperation auf Felder • sum(Feld) – Addition aller Spalten • sum(Feld‘) – Addition aller Zeilen • sum(sum(Feld)) – Addition aller Feld Feldelemente, is auch mit dem Platzhalter ‘:‘ kombinierbar Rechenoperation auf Felder • Cat – Mit Hilfe dieser Funktion kann man aus Feldern solche mit höheren Dimension aufbauen. • Bsp.: cat(3, 2.0, 2.2, 2.4) ans(:,:,1) = 2 ans(:,:,2) = 2.2000 ans(:,:,3) = 2.4000