Size: 1239
Comment:
|
Size: 3078
Comment: Made notation consistent
|
Deletions are marked like this. | Additions are marked like this. |
Line 2: | Line 2: |
<<TableOfContents>> ---- |
|
Line 5: | Line 11: |
Matrices are multiplied non-commutatively. The ''m'' rows of matrix A are multiplied by the ''p'' rows of matrix B. Therefore, note that A must be as tall as B is wide. |
Matrices are multiplied '''non-commutatively'''. The ''m'' rows of '''''A''''' are multiplied by the ''p'' rows of '''''B'''''. '''''A''''' must be as ''tall'' as '''''B''''' is ''wide''. |
Line 10: | Line 14: |
┌ ┐┌ ┐ ┌ ┐ │ 0 0││ 0 0 0│ │ 0 0 0│ │ 0 0││ 0 0 0│ = │ 0 0 0│ │ 0 0│└ ┘ │ 0 0 0│ └ ┘ └ ┘ |
julia> A = [1 2 0 0 0 0] 3×2 Matrix{Int64}: 1 2 0 0 0 0 |
Line 16: | Line 22: |
A x B = C | julia> B = [1 0 0 2 0 0] 2×3 Matrix{Int64}: 1 0 0 2 0 0 |
Line 18: | Line 28: |
mxn x nxp = mxp | julia> A * B 3×3 Matrix{Int64}: 5 0 0 0 0 0 0 0 0 |
Line 21: | Line 35: |
A cell in a matrix is expressed as C,,ij,, where `i` is a row index and `j` is a column index. | A cell in a matrix is expressed as ''c,,ij,,'' where ''i'' is a row index and ''j'' is a column index. ---- |
Line 25: | Line 41: |
== Multiplication == | == Computation == |
Line 27: | Line 43: |
In a multiplication of matrices A and B, cell C,,ij,, is solved as (row `i` of A)(column `j` of B). | |
Line 29: | Line 44: |
Consider the following: | === Cell-wise === In a multiplication of matrices '''''A''''' and '''''B''''', cell ''c,,ij,,'' of the new matrix '''''C''''' is the [[LinearAlgebra/VectorMultiplication#Dot_Product|dot product]] of row '''''A,,i,,''''' and column '''''B,,j,,'''''. |
Line 32: | Line 50: |
┌ ┐┌ ┐ ┌ ┐ │ 1 2││ 1 0│ │ 1 2│ │ 3 4││ 0 1│ = │ 3 4│ └ ┘└ ┘ └ ┘ |
julia> [1 2; 3 4] * [1 0; 0 1] 2×2 Matrix{Int64}: 1 2 3 4 }}} |
Line 37: | Line 56: |
cell (1,1) = (row 1 of A)(column 1 of B) = [1 2][1 0] = (1 * 1) + (2 * 0) = 1 |
|
Line 42: | Line 57: |
cell (1,2) = (row 1 of A)(column 2 of B) = [1 2][0 1] = (1 * 0) + (2 * 1) = 2 |
|
Line 47: | Line 58: |
cell (2,1) = [3 4][1 0] = 3 |
=== Row-wise === |
Line 50: | Line 60: |
cell (2,2) = [3 4][0 1] = 4 |
Row ''i'' of '''''C''''' is a linear combination of the columns of '''''B'''''. Solving for each row as: {{{ row 1 = 1(column 1 of B) + 2(column 2 of B) = 1[1 0] + 2[0 1] = [1 0] + [0 2] = [1 2] row 2 = 3(column 1 of B) 4(column 2 of B) = 3[1 0] + 4[0 1] = [3 0] + [0 4] = [3 4] }}} === Column-wise === Column ''j'' of '''''C''''' is a linear combination of the rows of '''''A'''''. Solving for each column as: {{{ column 1 = 1(row 1 of A) + 0(row 2 of A) = 1[1 2] + 0 = [1 2] column 2 = 0(row 1 of A) + 1(row 2 of A) = 0 + 1[3 4] = [3 4] }}} === Summation === '''''C''''' can be evaluated as a summation of the columns of '''''A''''' by the rows of '''''B'''''. {{{ julia> [1; 2] * [1 0] 2×2 Matrix{Int64}: 1 0 2 0 julia> [3; 4] * [0 1] 2×2 Matrix{Int64}: 0 3 0 4 julia> [1; 2] * [1 0] + [3; 4] * [0 1] 2×2 Matrix{Int64}: 1 3 2 4 }}} === Block-wise === '''''C''''' can be evaluated block-wise. Suppose '''''A''''' and '''''B''''' are 20x20 matrices; they can be divided each into 10x10 quadrants. Using these matrices '''''A''''' and '''''B''''' as the building blocks: {{{ julia> A = [1 2; 3 4] 2×2 Matrix{Int64}: 1 2 3 4 julia> B = [1 0; 0 1] 2×2 Matrix{Int64}: 1 0 0 1 }}} Much larger matrices may be composed of these building blocks. {{{ julia> A_ = [A1 A2; A3 A4] 4×4 Matrix{Int64}: 1 2 1 2 3 4 3 4 1 2 1 2 3 4 3 4 julia> B_ = [B1 B2; B3 B4] 4×4 Matrix{Int64}: 1 0 1 0 0 1 0 1 1 0 1 0 0 1 0 1 }}} The entire product could be computed, as in: {{{ julia> A_ * B_ 4×4 Matrix{Int64}: 2 4 2 4 6 8 6 8 2 4 2 4 6 8 6 8 }}} But if a specific block of the product is of interest, it can be solved as '''''C^1^''''' = '''''A^1^B^1^''''' + '''''A^2^B^3^'''''. {{{ julia> A1 * B1 + A2 * B3 2×2 Matrix{Int64}: 2 4 6 8 |
Matrix Multiplication
Contents
Introduction
Matrices are multiplied non-commutatively. The m rows of A are multiplied by the p rows of B. A must be as tall as B is wide.
julia> A = [1 2 0 0 0 0] 3×2 Matrix{Int64}: 1 2 0 0 0 0 julia> B = [1 0 0 2 0 0] 2×3 Matrix{Int64}: 1 0 0 2 0 0 julia> A * B 3×3 Matrix{Int64}: 5 0 0 0 0 0 0 0 0
A cell in a matrix is expressed as cij where i is a row index and j is a column index.
Computation
Cell-wise
In a multiplication of matrices A and B, cell cij of the new matrix C is the dot product of row Ai and column Bj.
julia> [1 2; 3 4] * [1 0; 0 1] 2×2 Matrix{Int64}: 1 2 3 4
Row-wise
Row i of C is a linear combination of the columns of B.
Solving for each row as:
row 1 = 1(column 1 of B) + 2(column 2 of B) = 1[1 0] + 2[0 1] = [1 0] + [0 2] = [1 2] row 2 = 3(column 1 of B) 4(column 2 of B) = 3[1 0] + 4[0 1] = [3 0] + [0 4] = [3 4]
Column-wise
Column j of C is a linear combination of the rows of A.
Solving for each column as:
column 1 = 1(row 1 of A) + 0(row 2 of A) = 1[1 2] + 0 = [1 2] column 2 = 0(row 1 of A) + 1(row 2 of A) = 0 + 1[3 4] = [3 4]
Summation
C can be evaluated as a summation of the columns of A by the rows of B.
julia> [1; 2] * [1 0] 2×2 Matrix{Int64}: 1 0 2 0 julia> [3; 4] * [0 1] 2×2 Matrix{Int64}: 0 3 0 4 julia> [1; 2] * [1 0] + [3; 4] * [0 1] 2×2 Matrix{Int64}: 1 3 2 4
Block-wise
C can be evaluated block-wise. Suppose A and B are 20x20 matrices; they can be divided each into 10x10 quadrants.
Using these matrices A and B as the building blocks:
julia> A = [1 2; 3 4] 2×2 Matrix{Int64}: 1 2 3 4 julia> B = [1 0; 0 1] 2×2 Matrix{Int64}: 1 0 0 1
Much larger matrices may be composed of these building blocks.
julia> A_ = [A1 A2; A3 A4] 4×4 Matrix{Int64}: 1 2 1 2 3 4 3 4 1 2 1 2 3 4 3 4 julia> B_ = [B1 B2; B3 B4] 4×4 Matrix{Int64}: 1 0 1 0 0 1 0 1 1 0 1 0 0 1 0 1
The entire product could be computed, as in:
julia> A_ * B_ 4×4 Matrix{Int64}: 2 4 2 4 6 8 6 8 2 4 2 4 6 8 6 8
But if a specific block of the product is of interest, it can be solved as C1 = A1B1 + A2B3.
julia> A1 * B1 + A2 * B3 2×2 Matrix{Int64}: 2 4 6 8