CHAPTER 2: MATRIX COMPUTATIONS AND LINEAR ALGEBRA
Lecture 2.2: Block and band
matrices, structures and cells
Structure of a band matrix:
·
diag(x): outputs a diagonal matrix with elements of x at the main
diagonal
·
diag(x,k): outputs a matrix with elements of x at the k-th
diagonal, located above the main diagonal if k > 0 and below
the main diagonal if k < 0
·
diag(A,k): outputs the vector standing at the k-th diagonal of a
matrix A
A1 = diag(x), A2 =
diag(x,2), A3 = diag(x,-1)
v = diag(A2,2)
0 2 0
0 0
0 0 3
0 0
0 0 0
4 0
0 0 0
0 5
A2 = 0
0 1 0 0 0
0
0 0 0
2 0 0 0
0 0 0
0 3 0 0
0 0 0
0 0 4 0
0 0 0
0 0 0 5
0 0 0
0 0 0 0
0 0 0
0 0 0 0
A3 = 0
0 0 0 0 0
1 0 0
0 0 0
0 2 0
0 0 0
0 0 3
0 0 0
0 0 0
4 0 0
0 0 0
0 5 0
v = 1
2
3
4
5
·
tril(A) : extracts the lower triangular part of a matrix
·
tril(A,p): extracts the lower triangular part of a matrix on and below the p-th
diagonal
·
triu(A) : extracts the upper triangular part of a matrix
·
triu(A,q): extracts the upper triangular part of a matrix on and above the q-th
diagonal
A = magic(5)
% fun matrix magic(N) is constructed from the integers
% 1 through N^2 with equal row, column, and diagonal sums
B1 = tril(A,1), B2 = triu(A,-1)
17 24
1 8 15
23 5
7 14 16
4 6
13 20 22
10 12
19 21 3
11 18
25 2 9
B1 =
17 24
0 0 0
23 5
7 0 0
4 6
13 20 0
10 12
19 21 3
11 18
25 2 9
B2 =
17 24
1 8 15
23 5
7 14 16
0 6
13 20 22
0 0
19 21 3
0 0 0 2 9
% an example
of a tridiagonal matrix for a three-point central difference:
% u''(x) = (u(x+h) – 2*u(x) + u(x-h))/h^2
x = 1 : 7; % the step size is one, h = 1
n = length(x);
A1 = -2*diag(ones(1,n)) + diag(ones(1,n-1),1) +
diag(ones(1,n-1),-1)
A2 = -2*eye(n) + triu(tril(ones(n),1),-1)-eye(n)
% A1 = A2, the same matrix
is generated by two different MATLAB functions
-2 1
0 0 0 0 0
1 -2
1 0 0 0 0
0 1
-2 1 0
0 0
0 0
1 -2 1 0 0
0 0 0
1 -2 1 0
0 0
0 0 1 -2 1
0 0
0 0 0 1 -2
A2 =
-2 1
0 0 0 0 0
1 -2
1 0 0 0 0
0 1
-2 1 0
0 0
0 0
1 -2 1 0 0
0 0
0 1 -2 1 0
0 0
0 0 1 -2 1
0 0 0 0 0 1 -2
Structure
of a block matrix:
AA = : a block matrix consisting of four matrices A,B,C,D
Constraints:
B must
have the same number of rows as A, C must have the same number of
columns as A, and D must have the same number of
rows as C and the same number of columns as B.
A = [ 1 2 3 4 ; 1 2 3 4; 1 2 3 4; 1 2 3 4] % A is a 4-by-4 matrix
b = [ 0; 0; 1; 1 ] % b is a column vector
c = b'; % c is a
row-vector
d = 100 % d is a scalar
AA = [ A, b; c, d ] % a block 5-by-5 matrix
1 2 3
4
1 2 3
4
1 2 3
4
b = 0
0
1
1
d = 100
AA = 1
2 3 4 0
1 2 3
4 0
1 2 3
4 1
1 2 3
4 1
0 0 1 1 100
b1 = [ 0; 0; 1; 1; 1]; % b has now a
mis-match in a number of columns
AA1 =[ A, b1; c, d ] % an error in building the block matrix
All matrices on a row in the bracketed expression must have the
same number of rows.
·
sub-elements of block matrices are lost after construction
AA(1,1) %
returns only the first element of A, not the first block of AA
AA(1:4,1:4) % returns the first block of AA, i.e. the matrix A
1
ans =
1 2
3 4
1 2
3 4
1 2
3 4
1 2 3 4
% the command returns a block of AA consisting of the first,
third, and fifth rows of AA
% and the first and third columns of AA, i.e. the command returns a 3-by-2 matrix
1 4
0 1
·
sub-elements of block matrices can be created as cell arrays
C{1,1} = A; C{1,2} = b; C{2,1} = c; C{2,2} = d;
C, C{1:2,1:2}
[4x4 double] [4x1 double]
[1x4 double] [
100]
ans =
1 2
3 4
1 2
3 4
1 2
3 4
1 2
3 4
ans =
0 0
1 1
ans =
0
0
1
1
ans = 100
Advanced
data objects:
·
struct: establish a structure array with fields and numerical or string values
PA =
struct('point','A','x',5,'y',3) % creates point A(5,3)
PB = struct('point','B','x',1,'y',-1) % creates point B(1,-1)
x: 5
y: 3
PB = point: 'B'
x: 1
y: -1
PC.point =
'C'; PC.x = 9; PC.y = 4; % creates point C(9,4)
PC
x: 9
y: 4
P =
struct('point',char('A','B','C'),'x',[5;1;9],'y',[3;-1;4])
% char('A','B','C') creates separate rows for character strings
'A','B', and 'C'
% different structures in P
are located at different rows
x: [3x1 double]
y: [3x1 double]
a1 = PA.point, a2 = PC.x, a3 = PC.y
a4 = P.point(1), a5 =
P.x(:)
r = sqrt(PA.x^2 + PA.y^2) % computes radius in polar coordinates
a2 = 9
a3 = 4
a4 = A
a5 = 5
1
9
r = 5.8310
·
cell: a
data container, that may contain any type of data (array of numbers, strings,
structures, or cells)
C{1,1} = rand(3); % a 3-by-3 random matrix is in C{1,1} box
C{1,2} = char('john','dmitry'); % an array of 2 strings is in
C{1,2} box
C{2,1} = PA; % a structure PA is in C{2,1} box
C{2,2} = cell(3,3); % a 3-by-3 nested cell is in C{2,2} box
[3x3 double]
ans =
[2x6 char]
ans =
[1x1 struct]
ans =
{3x3 cell}
0.2311 0.8913
0.0185
0.6068 0.7621 0.8214