21.06.2014 Views

Numerical Methods Contents - SAM

Numerical Methods Contents - SAM

Numerical Methods Contents - SAM

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

1.1.2 Matrices<br />

Matrices = two-dimensional arrays of real/complex numbers<br />

⎛<br />

A := ⎝ a ⎞<br />

11 ... a 1m<br />

. . ⎠ ∈ K n,m , n, m ∈ N .<br />

a n1 ... a nm<br />

vector space of n × m-matrices: (n ˆ= number of rows, m ˆ= number of columns)<br />

⎛<br />

Zero matrix: O = ⎝ 0 . .. 0<br />

⎞<br />

. ... . ⎠ ∈ K n,m , MATLAB: O = zeros(n,m);<br />

0 . .. 0<br />

⎛<br />

Diagonal matrix: D = ⎝ d ⎞<br />

1 0<br />

. .. ⎠ ∈ K n,n , MATLAB: D = diag(d); with vector d<br />

0 d n<br />

✎ notation: bold capital roman letters, e.g., A,S,Y<br />

MATLAB:<br />

K n,1 ↔ column vectors, K 1,n ↔ row vectors<br />

✄ vectors are 1 × n/n × 1-matrices<br />

✄ initialization:<br />

Accessing matrix entries & sub-matrices (✎<br />

⎛<br />

A := ⎝ a ⎞<br />

11 . .. a 1m<br />

. . ⎠<br />

a n1 . .. a nm<br />

⎛<br />

A = [1,2;3,4;5,6]; → 3 × 2 matrix ⎝ 1 2<br />

⎞<br />

3 4⎠ .<br />

5 6<br />

notations):<br />

→ entry (A) i,j = a ij , 1 ≤ i ≤ n, 1 ≤ j ≤ m ,<br />

→ i-th row, 1 ≤ i ≤ n: a i,: = (A) i,:<br />

Ôº¾ ½º½<br />

,<br />

→ j-th column, 1 ≤ j ≤ m: a i,: = (A) :,j ,<br />

1 ≤ k ≤ l ≤ n ,<br />

→ matrix block (a ij ) i=k,...,l = (A) k:l,r:s ,<br />

1 ≤ r ≤ s ≤ m .<br />

MATLAB: Matrix A ↦→ entry at position (i,j) = A(i,j)<br />

↦→ i-th row = A(i,:)<br />

↦→ j-th column = A(:,j)<br />

↦→<br />

matrix block<br />

(sub-matrix)<br />

(a ij ) i=k,...,l<br />

j=r,...,s<br />

= (A) k:l,r:s = A(k:l,r:s)<br />

Transposed matrix:<br />

⎛<br />

A T = ⎝ a ⎞T<br />

⎛<br />

11 ... a 1m<br />

. . ⎠ := ⎝ a ⎞<br />

11 . .. a n1<br />

. . ⎠ ∈ K m,n .<br />

a n1 ... a nm a 1m . .. a mn<br />

Adjoint matrix (Hermitian transposed):<br />

⎛<br />

A H := ⎝ a ⎞H<br />

⎛ ⎞<br />

11 . .. a 1m ... ā n1<br />

. . ⎠ := ⎝ā11 . . ⎠ ∈ K m,n .<br />

a n1 . .. a nm ā 1m ... ā mn<br />

✎ notation: ā ij = Re(a ij ) − iIm(a ij ) complex conjugate of a ij .<br />

Special matrices:<br />

⎛<br />

Identity matrix: I = ⎝ 1 0<br />

⎞<br />

Ôº¾ ½º½<br />

... ⎠ ∈ K n,n , MATLAB: I = eye(n);<br />

0 1<br />

Remark 1.1.1 (Matrix storage formats). (for dense/full matrices, cf. Sect. 2.6)<br />

A ∈ K m,n<br />

⎛<br />

A = ⎝ 1 2 3<br />

⎞<br />

4 5 6⎠<br />

7 8 9<br />

linear array (size mn) + index computations<br />

(Note:<br />

leading dimension (row major, column major))<br />

Row major (C-arrays, bitmaps, Python):<br />

A_arr 1 2 3 4 5 6 7 8 9<br />

Access to entry a ij of A ∈ K n,m , i = 1,...,n,<br />

j = 1, ...,m:<br />

row major:<br />

column major:<br />

a ij ↔A_arr(m*(i-1)+(j-1))<br />

a ij ↔A_arr(n*(j-1)+(i-1))<br />

Column major (Fortran, MATLAB, OpenGL):<br />

A_arr 1 4 7 2 5 8 3 6 9<br />

Example 1.1.2 (Impact of data access patterns on runtime).<br />

row major<br />

Cache hierarchies ❀ slow access of “remote” memory sites !<br />

column oriented<br />

A = randn(n,n);<br />

for j = 1:n-1,<br />

A(:,j+1) = A(:,j+1) - A(:,j);<br />

end<br />

access<br />

row oriented<br />

A = randn(n);<br />

for i = 1:n-1,<br />

A(i+1,:) = A(i+1,:) - A(i,:);<br />

end<br />

column major<br />

Ôº¾ ½º½<br />

2 K = 3 ; res = [ ] ;<br />

access<br />

n = 3000 ❀ 0.1s n = 3000 ❀ 0.3s<br />

Code 1.1.3: timing for row and column oriented matrix access in MATLAB<br />

1 % Timing for row/column operations<br />

△<br />

Ôº¾ ½º½

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!