Zugriff auf Matrizenelemente

Copyright 1994,  Claudia Funke
TU-Berlin, FB 13, Fachgebiet Ökonometrie und Statistik
Dieses Notebook darf ausschließlich als Unterrichtsmaterial und für private 
Zwecke verwendet und nicht ohne Zustimmung der Autorin verändert werden.

Anzeigen der Struktur von Matrizen

Die folgenden Funktionen überprüfen die Struktur von Ausdrücken und liefern
bei Übereinstimmung   TRUE,  ansonsten   FALSE.

Mit

VectorQ[ Ausdruck ]

wird abgefragt, ob  expr. die Form eines Vektors hat. Die Alternative dazu 
ist ein Skalar.

Die gleiche Funktion für eine Matrix lautet

MatrixQ[ Ausdruck ]

wobei hier von Mathematica geprüft wird, ob alle Zeilen einer Matrix 
die gleiche Länge haben.

Die Dimension einer Matrix wird mit

Dimensions[ Ausdruck ]

ermittelt. Bei einer zweidimensionalen Matrix gibt  Dimensions[ ] die Zeilen
und Spalten von  X  an.

Anwendung von Operationen auf Zeilen und Spalten einer Matrix.

Die Transponierte  X'  einer Matrix   X   erhält man mit

Transpose[ Liste  ]

x = { {1, 2, 3}, {4, 5, 6} }

MatrixForm[x]

Transpose[x]

MatrixForm[ Transpose[x] ]

Die Anzahl der Elemente einer Liste wird mit

Length[ Liste ]

berechnet. Die Funktion   Length[ ] bezieht sich explizit auf eine Liste.

x = Table[g[i,j], {i,3}, {j,4}]; MatrixForm[x]

{rows, cols} = {Length[x], Length[Transpose[x]]}

Eleganter geht es natürlich mit

{rows, cols} = Dimensions[x]

Um die Länge der Zeile einer Matrix zu erhalten, muß diese direkt
angegeben werden.

n = Length[x[[2]] ]

Die Summe der Elemente eines Vektors erhält man aus der Funktion

Sum[ Liste, {i, Length[Liste]} ]

v = {v1, v2, v3}; Sum[v[[i]], {i, Length[v]}]

Wird diese Rechnung häufiger benötigt, bietet sich deren Definition 
als Funktion an mit

sumvec[vec_] := Sum[vec[[i]], {i, Length[vec]}]

?sumvec

s = { {2,5},{2,8} }; sumvec[ x[[2]]]

Indexierung und Verkettung von Matrizen

Hier führen viele Wege nach Rom; es werden nur die kürzesten erklärt.
Das i - te Element eines Vektors bzw. einer Matrix erhält man mit

liste[[i,i]]

bzw.

List[ i,j ]

oder auch mit

Part[[ i ]]

bzw.

Part[ Liste, i ]

x = Table[ g[i,j], {i, 4}, {j, 4}]; MatrixForm[x]

Die dritte Zeile von  X  erhält man mit

x[[3]]

Die zweite Spalte von  X  ergibt sich aus

smat = Transpose[x] [[2]]

Die gleiche Wirkung hat

Map[ #[[ i ]]&, x ]

smat = Map[#[[2]]&, x]

Die Verkettung von Matrizen folgt den Regeln der Verkettung für Listen.
Mit

Join[ Liste1, Liste2 ]

werden zwei Listen aneinandergereiht.

x = { {1,2}, {3,4}, {5,6} }; MatrixForm[x]

y = { {a,b}, {c,d}, {e,f} }; MatrixForm[y]

Die vertikale Konkatenation

z = Transpose[ Join[ Transpose[x], Transpose[y] ] ]; 
MatrixForm[z]

ist etwas schwieriger zu programmieren als die horizontale Konkatenation.

z = Join[x,y]; MatrixForm[z]

Teilmatrizen

Matrizen kann man aus anderen Matrizen bilden, indem man einmal 
einen Teil aus der Ausgangsmatrix "ausschneidet" oder 
aus einzelnen Zeilen und/oder Spalten der Ausgangsmatrix
eine neue Matrix  "zusammenbastelt".

wird eine (r,s) - Untermatrix  aus  x  erzeugt, deren Elemente 
die Zeilenindices i0, ... , i1 und die Spaltenindices j0, ... , j1 bilden.

x = { {1,2,3,4}, {5,6,7,8}, {9,10,11,12} }; 
MatrixForm[x]

Eine Matrix, die die Elemente der zweiten und dritten Zeile und die der zweiten
bis vierten Spalte der Ausgangsmatrix enthält, ergibt sich aus

Mit

x[[ Range[{i0, ..., i1}], [[Range[{j0, ..., j1}] ]]

wird eine (r,s) - Untermatrix aus  X  erzeugt, deren Elemente die
Zeilenindices i0, ... ,i1 und die Spaltenindices j0, ..., j1 bilden.

x = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};
MatrixForm[x]

Eine Matrix, die die Elemente der zweiten und dritten Zeile und die der 
zweiten und vierten Spalten der Ausgangsmatrix enthält, ergibt sich aus

xneu = x[[ Range[2,3], Range[2,4] ]]; 
MatrixForm[xneu]

Mit

x[[{i1, ..., ir}, {i1, ..., il}]]

wird der angesprochene Matrixteil aus der Ausgangsmatrix  X entfernt.

Eine Untermatrix aus  X , die die Elemente der zweiten und dritten Zeile sowie
der dritten und vierten Spalte enthält, erhält man mit

u = x[[{2, 3}, {3, 4}]]; MatrixForm[u]

weitere elementare Funktionen

In dem Package   LinearAlgebra'MatrixManipulation' sind weitere, 
die Handhabung von Matrizen vereinfachende Funktionen enthalten:

AppendRows[m1, m2, ... ]
SquareMatrixQ[mat]
TakeRows[mat, part]
TakeColumns[mat, part]
TakeMatrix[mat, start, end]
SubMatrix[mat, start, dim]
BlockMatrix[block]
TakeMatrix[mat, start, dim]
UpperDiagonalMatrix[f, dim]
LowerDiagonalMatrix[f, dim]
TridiagonalMatrix[f, dim]
ZeroMatrix[dim]
HilbertMatrix[dimrow, dimcol]
HankelMatrix[cols, rows]

Graphische Darstellung von Matrizen

Mathematica bietet mit der Funktion

ListDensityPlot[ Liste ]

die Möglichkeit, die Struktur einer zweidimensionalen Matrix durch graphische
Darstellung sichtbar zu machen. So ist z.B. die Struktur der Hilbert-Matrix 
in einer solchen Graphik leicht zu erkennen.

hil = Table[1 / (i+j-1), {i,11}, {j,11}]; MatrixForm[hil]

hilpic = ListDensityPlot[hil]