13.2.3 Combining matrices
Making a matrix with a list of matrices.
The blockmatrix
command combines several matrices into one larger matrix.
-
blockmatrix takes three arguments:
-
m and n, two positive integers.
- L, a list of m n matrices such that the first m
matrices have the same number of rows; the next m matrices have
the same number of rows, etc; and the number of columns in each
group of m matrices is the same (for example, all the matrices in
L could have the same dimension), so that the n groups of m
matrices can be stacked above each other to form a larger matrix.
- blockmatrix(m,n,L) returns the larger matrix formed
by the matrices in L by putting each group of m matrices next to
each other, and stacking the resulting n matrices on top of each
other.
Examples
blockmatrix(2,3,[idn(2),idn(2),idn(2),idn(2),idn(2),idn(2)]) |
|
| ⎡
⎢
⎢
⎢
⎣ | 1 | 0 | 1 | 0 | 1 | 0 |
0 | 1 | 0 | 1 | 0 | 1 |
1 | 0 | 1 | 0 | 1 | 0 |
0 | 1 | 0 | 1 | 0 | 1 |
| ⎤
⎥
⎥
⎥
⎦ |
|
| | | | | | | | | | |
|
blockmatrix(3,2,[idn(2),idn(2),idn(2),idn(2),idn(2),idn(2)]) |
|
| ⎡
⎢
⎢
⎢
⎢
⎢
⎢
⎣ | 1 | 0 | 1 | 0 |
0 | 1 | 0 | 1 |
1 | 0 | 1 | 0 |
0 | 1 | 0 | 1 |
1 | 0 | 1 | 0 |
0 | 1 | 0 | 1 |
| ⎤
⎥
⎥
⎥
⎥
⎥
⎥
⎦ |
|
| | | | | | | | | | |
|
blockmatrix(2,2,[idn(2),newMat(2,3),newMat(3,2),idn(3)]) |
|
| ⎡
⎢
⎢
⎢
⎢
⎢
⎣ | 1 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 0 | 0 |
0 | 0 | 1 | 0 | 0 |
0 | 0 | 0 | 1 | 0 |
0 | 0 | 0 | 0 | 1 |
| ⎤
⎥
⎥
⎥
⎥
⎥
⎦ |
|
| | | | | | | | | | |
|
blockmatrix(3,2,[idn(1),newMat(1,4),newMat(2,3),idn(2),newMat(1,2),[[1,1,1]]]) |
A:=[[1,1],[1,1]];B:=[[1],[1]]:;
blockmatrix(2,3,[2*A,3*A,4*A,5*B,newMat(2,4),6*B]) |
|
| ⎡
⎢
⎢
⎢
⎣ | 2 | 2 | 3 | 3 | 4 | 4 |
2 | 2 | 3 | 3 | 4 | 4 |
5 | 0 | 0 | 0 | 0 | 6 |
5 | 0 | 0 | 0 | 0 | 6 |
| ⎤
⎥
⎥
⎥
⎦ |
|
| | | | | | | | | | |
|
Making a matrix by concatenating columns of two matrices.
The semi_augment
command concatenates two matrices with the same number of columns.
-
semi_augment takes two arguments:
A and B, two matrices with the same number of columns.
- semi_augment(A,B) returns the matrix which has the
rows of A followed by the rows of B.
Examples
semi_augment([[3,4],[2,1],[0,1]],[[1,2],[4,5]]) |
|
| ⎡
⎢
⎢
⎢
⎢
⎢
⎣ | | ⎤
⎥
⎥
⎥
⎥
⎥
⎦ |
|
| | | | | | | | | | |
|
semi_augment([[3,4,2]],[[1,2,4]]) |
Note the difference with concat.
concat([[3,4,2]],[[1,2,4]] |
Indeed, when the two matrices A and B have the same dimension, concat
makes a matrix with the same number of rows as A and B by
gluing them side by side.
concat([[3,4],[2,1],[0,1]],[[1,2],[4,5]] |
|
| ⎡
⎢
⎢
⎢
⎢
⎢
⎣ | | ⎤
⎥
⎥
⎥
⎥
⎥
⎦ |
|
| | | | | | | | | | |
|
But input:
concat([[3,4],[2,1]],[[1,2],[4,5]] |
Making a matrix by gluing two matrices together.
The augment
or concat
command glues two matrices, either side by side
or one on top of the other.
-
augment has two arguments:
A and B, two matrices with the same number of rows or the same
number of columns.
- augment(A,B) returns the matrix consisting of:
-
if A and B have the same number of rows, then the matrix
being returned consists of the columns of A followed by the
columns of B; in other words, A and B are glued side by side.
- if A and B do not have the same number of rows but have
the same number of columns, then the matrix being returned
consists of the rows of A followed by the rows of B; in other
words, A and B are glued one on top of the other.
Note that if A and B have the same dimension, then
augment(A,B) will return a matrix with the same number of
rows as A and B by horizontal gluing. In that case, if you want
to combine them by vertical gluing, you must use
semi_augment(A,B).
Examples
augment([[3,4,5],[2,1,0]],[[1,2],[4,5]]) |
augment([[3,4],[2,1],[0,1]],[[1,2],[4,5]]) |
|
| ⎡
⎢
⎢
⎢
⎢
⎢
⎣ | | ⎤
⎥
⎥
⎥
⎥
⎥
⎦ |
|
| | | | | | | | | | |
|
augment([[3,4,2]],[[1,2,4]] |
Appending a column to a matrix.
The border
command adds a column to a matrix.
-
border takes two arguments:
-
A, a matrix.
- b, a list whose length equals the number of rows of A.
- border(A,L) returns a matrix equal to A with the
transpose of L forming an additional column to the right.
Equivalent commands are tran([op(tran(A)),b]) and
tran(append(tran(A),b)).
Examples
border([[1,2,4],[3,4,5]],[6,7]) |
border([[1,2,3,4],[4,5,6,8],[7,8,9,10]],[1,3,5]) |