BandedMatrices.jl Documentation
Creating banded matrices
BandedMatrices.BandedMatrix
— TypeBandedMatrix{T}(undef, (n, m), (l, u))
returns an uninitialized n
×m
banded matrix of type T
with bandwidths (l,u)
.
BandedMatrix{T}(kv::Pair, (m,n), (l,u))
Construct a m × n BandedMatrix with bandwidths (l,u) from Pair
s of diagonals and vectors. Vector kv.second
will be placed on the kv.first
diagonal.
BandedMatrix(kv::Pair{<:Integer,<:AbstractVector}...)
Construct a square matrix from Pair
s of diagonals and vectors. Vector kv.second
will be placed on the kv.first
diagonal.
BandedMatrices.brand
— Functionbrand(T,n,m,l,u)
Creates an n×m
banded matrix with random numbers in the bandwidth of type T
with bandwidths (l,u)
BandedMatrices.brandn
— Functionbrandn(T,n,m,l,u)
Creates an n×m
banded matrix with random normals in the bandwidth of type T
with bandwidths (l,u)
To create a banded matrix of all zeros, identity matrix, or with a constant value use the following constructors:
julia> BandedMatrix(Zeros(5,5), (1,2))
+Home · BandedMatrices.jl BandedMatrices.jl Documentation
Creating banded matrices
BandedMatrices.BandedMatrix
— TypeBandedMatrix{T}(undef, (n, m), (l, u))
returns an uninitialized n
×m
banded matrix of type T
with bandwidths (l,u)
.
sourceBandedMatrix{T}(kv::Pair, (m,n), (l,u))
Construct a m × n BandedMatrix with bandwidths (l,u) from Pair
s of diagonals and vectors. Vector kv.second
will be placed on the kv.first
diagonal.
sourceBandedMatrix(kv::Pair{<:Integer,<:AbstractVector}...)
Construct a square matrix from Pair
s of diagonals and vectors. Vector kv.second
will be placed on the kv.first
diagonal.
sourceBandedMatrices.brand
— Functionbrand(T,n,m,l,u)
Creates an n×m
banded matrix with random numbers in the bandwidth of type T
with bandwidths (l,u)
sourceBandedMatrices.brandn
— Functionbrandn(T,n,m,l,u)
Creates an n×m
banded matrix with random normals in the bandwidth of type T
with bandwidths (l,u)
sourceTo create a banded matrix of all zeros, identity matrix, or with a constant value use the following constructors:
julia> BandedMatrix(Zeros(5,5), (1,2))
5×5 BandedMatrix{Float64} with bandwidths (1, 2):
0.0 0.0 0.0 ⋅ ⋅
0.0 0.0 0.0 0.0 ⋅
@@ -32,7 +32,7 @@
julia> using LazyArrays
julia> @time BandedMatrix(Hcat(Ones(10000,5000),Zeros(10000,5000)),(1,1));
-0.012627 seconds (30.01 k allocations: 1.374 MiB, 92.24% gc time)
See LazyArrays, FillArrays for other implemented structured matrices.
Accessing banded matrices
BandedMatrices.bandwidths
— Functionbandwidths(A)
Returns a tuple containing the lower and upper bandwidth of A
, in order.
sourceBandedMatrices.bandwidth
— Functionbandwidth(A,i)
Returns the lower bandwidth (i==1
) or the upper bandwidth (i==2
).
sourceBandedMatrices.bandrange
— Functionbandrange(A)
Returns the range -bandwidth(A,1):bandwidth(A,2)
.
sourceBandedMatrices.band
— Functionband(i)
Represents the i
-th band of a banded matrix.
julia> using BandedMatrices
+0.012627 seconds (30.01 k allocations: 1.374 MiB, 92.24% gc time)
See LazyArrays, FillArrays for other implemented structured matrices.
Accessing banded matrices
BandedMatrices.bandwidths
— Functionbandwidths(A)
Returns a tuple containing the lower and upper bandwidth of A
, in order.
sourceBandedMatrices.bandwidth
— Functionbandwidth(A,i)
Returns the lower bandwidth (i==1
) or the upper bandwidth (i==2
).
sourceBandedMatrices.bandrange
— Functionbandrange(A)
Returns the range -bandwidth(A,1):bandwidth(A,2)
.
sourceBandedMatrices.band
— Functionband(i)
Represents the i
-th band of a banded matrix.
julia> using BandedMatrices
julia> A = BandedMatrix(0=>1:4, 1=>5:7, -1=>8:10)
4×4 BandedMatrix{Int64} with bandwidths (1, 1):
@@ -58,7 +58,7 @@
3-element Vector{Int64}:
8
9
- 10
sourceBandedMatrices.BandRange
— ConstantBandRange
Represents the entries in a row/column inside the bands.
julia> using BandedMatrices
+ 10
sourceBandedMatrices.BandRange
— ConstantBandRange
Represents the entries in a row/column inside the bands.
julia> using BandedMatrices
julia> A = BandedMatrix(0=>1:4, 1=>5:7, -1=>8:10)
4×4 BandedMatrix{Int64} with bandwidths (1, 1):
@@ -71,7 +71,7 @@
3-element Vector{Int64}:
8
2
- 6
sourceBandedMatrices.isbanded
— Functionisbanded(A)
returns true if a matrix implements the banded interface.
sourceBandedMatrices.BandSlice
— TypeBandSlice(band::Band, indices)
Represent a range of indices corresponding to a band.
Upon calling to_indices
, Band
s are converted to BandSlice
objects to represent the indices over which the Band
spans.
This mimics the relationship between Colon
and Base.Slice
.
Example
julia> B = BandedMatrix(0 => 1:4, 1=>1:3);
+ 6
sourceBandedMatrices.isbanded
— Functionisbanded(A)
returns true if a matrix implements the banded interface.
sourceBandedMatrices.BandSlice
— TypeBandSlice(band::Band, indices)
Represent a range of indices corresponding to a band.
Upon calling to_indices
, Band
s are converted to BandSlice
objects to represent the indices over which the Band
spans.
This mimics the relationship between Colon
and Base.Slice
.
Example
julia> B = BandedMatrix(0 => 1:4, 1=>1:3);
julia> bs = to_indices(B, (Band(1),))[1];
@@ -81,7 +81,7 @@
julia> using LinearAlgebra
julia> bs == diagind(B, 1)
-true
sourceBandedMatrices.colstart
— Functioncolstart(A, i::Integer)
Return the starting row index of the filled bands in the i
-th column, bounded by the actual matrix size.
Examples
julia> A = BandedMatrix(0=>1:4, 1=>5:7)
+true
sourceBandedMatrices.colstart
— Functioncolstart(A, i::Integer)
Return the starting row index of the filled bands in the i
-th column, bounded by the actual matrix size.
Examples
julia> A = BandedMatrix(0=>1:4, 1=>5:7)
4×4 BandedMatrix{Int64} with bandwidths (0, 1):
1 5 ⋅ ⋅
⋅ 2 6 ⋅
@@ -92,7 +92,7 @@
2
julia> BandedMatrices.colstart(A, 4)
-3
sourceBandedMatrices.colstop
— Functioncolstop(A, i::Integer)
Return the stopping row index of the filled bands in the i
-th column, bounded by the actual matrix size.
Examples
julia> A = BandedMatrix(0=>1:4, 1=>5:7)
+3
sourceBandedMatrices.colstop
— Functioncolstop(A, i::Integer)
Return the stopping row index of the filled bands in the i
-th column, bounded by the actual matrix size.
Examples
julia> A = BandedMatrix(0=>1:4, 1=>5:7)
4×4 BandedMatrix{Int64} with bandwidths (0, 1):
1 5 ⋅ ⋅
⋅ 2 6 ⋅
@@ -103,7 +103,7 @@
3
julia> BandedMatrices.colstop(A, 4)
-4
sourceBandedMatrices.colrange
— Functioncolrange(A, i::Integer)
Return the range of rows in the i
-th column that correspond to filled bands.
Examples
julia> A = BandedMatrix(0=>1:4, 1=>5:7)
+4
sourceBandedMatrices.colrange
— Functioncolrange(A, i::Integer)
Return the range of rows in the i
-th column that correspond to filled bands.
Examples
julia> A = BandedMatrix(0=>1:4, 1=>5:7)
4×4 BandedMatrix{Int64} with bandwidths (0, 1):
1 5 ⋅ ⋅
⋅ 2 6 ⋅
@@ -114,7 +114,7 @@
1:1
julia> colrange(A, 3)
-2:3
sourceBandedMatrices.collength
— Functioncollength(A, i::Integer)
Return the number of filled bands in the i
-th column.
Examples
julia> A = BandedMatrix(0=>1:4, 1=>5:7)
+2:3
sourceBandedMatrices.collength
— Functioncollength(A, i::Integer)
Return the number of filled bands in the i
-th column.
Examples
julia> A = BandedMatrix(0=>1:4, 1=>5:7)
4×4 BandedMatrix{Int64} with bandwidths (0, 1):
1 5 ⋅ ⋅
⋅ 2 6 ⋅
@@ -125,7 +125,7 @@
1
julia> BandedMatrices.collength(A, 2)
-2
sourceBandedMatrices.rowstart
— Functionrowstart(A, i::Integer)
Return the starting column index of the filled bands in the i
-th row, bounded by the actual matrix size.
Examples
julia> A = BandedMatrix(0=>1:4, 1=>5:7)
+2
sourceBandedMatrices.rowstart
— Functionrowstart(A, i::Integer)
Return the starting column index of the filled bands in the i
-th row, bounded by the actual matrix size.
Examples
julia> A = BandedMatrix(0=>1:4, 1=>5:7)
4×4 BandedMatrix{Int64} with bandwidths (0, 1):
1 5 ⋅ ⋅
⋅ 2 6 ⋅
@@ -136,7 +136,7 @@
2
julia> BandedMatrices.rowstart(A, 3)
-3
sourceBandedMatrices.rowstop
— Functionrowstop(A, i::Integer)
Return the stopping column index of the filled bands in the i
-th row, bounded by the actual matrix size.
Examples
julia> A = BandedMatrix(0=>1:4, 1=>5:7)
+3
sourceBandedMatrices.rowstop
— Functionrowstop(A, i::Integer)
Return the stopping column index of the filled bands in the i
-th row, bounded by the actual matrix size.
Examples
julia> A = BandedMatrix(0=>1:4, 1=>5:7)
4×4 BandedMatrix{Int64} with bandwidths (0, 1):
1 5 ⋅ ⋅
⋅ 2 6 ⋅
@@ -147,7 +147,7 @@
3
julia> BandedMatrices.rowstop(A, 4)
-4
sourceBandedMatrices.rowrange
— Functionrowrange(A, i::Integer)
Return the range of columns in the i
-th row that correspond to filled bands.
Examples
julia> A = BandedMatrix(0=>1:4, 1=>5:7)
+4
sourceBandedMatrices.rowrange
— Functionrowrange(A, i::Integer)
Return the range of columns in the i
-th row that correspond to filled bands.
Examples
julia> A = BandedMatrix(0=>1:4, 1=>5:7)
4×4 BandedMatrix{Int64} with bandwidths (0, 1):
1 5 ⋅ ⋅
⋅ 2 6 ⋅
@@ -158,7 +158,7 @@
1:2
julia> rowrange(A, 4)
-4:4
sourceBandedMatrices.rowlength
— Functionrowlength(A, i::Integer)
Return the number of filled bands in the i
-th row.
Examples
julia> A = BandedMatrix(0=>1:4, 1=>5:7)
+4:4
sourceBandedMatrices.rowlength
— Functionrowlength(A, i::Integer)
Return the number of filled bands in the i
-th row.
Examples
julia> A = BandedMatrix(0=>1:4, 1=>5:7)
4×4 BandedMatrix{Int64} with bandwidths (0, 1):
1 5 ⋅ ⋅
⋅ 2 6 ⋅
@@ -169,10 +169,10 @@
2
julia> BandedMatrices.rowlength(A, 4)
-1
sourceBandedMatrices.bandeddata
— Functionbandeddata(A)
returns a matrix containing the data of a banded matrix, in the BLAS format.
This is required for gbmv! support
sourceBandedMatrices.BandedMatrixBand
— TypeBandedMatrixBand
Type to represent a view of a band of a BandedMatrix
Examples
julia> B = BandedMatrix(0=>1:3);
+1
sourceBandedMatrices.bandeddata
— Functionbandeddata(A)
returns a matrix containing the data of a banded matrix, in the BLAS format.
This is required for gbmv! support
sourceBandedMatrices.BandedMatrixBand
— TypeBandedMatrixBand
Type to represent a view of a band of a BandedMatrix
Examples
julia> B = BandedMatrix(0=>1:3);
julia> view(B, band(0)) isa BandedMatrices.BandedMatrixBand
-true
sourceBandedMatrices.dataview
— Functiondataview(V::BandedMatrices.BandedMatrixBand)
Forward a view of a band of a BandedMatrix
to the parent's data matrix.
Warn This will error if the indexing is out-of-bounds for the data matrix, even if it is inbounds for the parent BandedMatrix
Examples
julia> A = BandedMatrix(0=>1:4, 1=>5:7, -1=>8:10)
+true
sourceBandedMatrices.dataview
— Functiondataview(V::BandedMatrices.BandedMatrixBand)
Forward a view of a band of a BandedMatrix
to the parent's data matrix.
Warn This will error if the indexing is out-of-bounds for the data matrix, even if it is inbounds for the parent BandedMatrix
Examples
julia> A = BandedMatrix(0=>1:4, 1=>5:7, -1=>8:10)
4×4 BandedMatrix{Int64} with bandwidths (1, 1):
1 5 ⋅ ⋅
8 2 6 ⋅
@@ -185,7 +185,7 @@
3-element view(::Matrix{Int64}, 1, 2:4) with eltype Int64:
5
6
- 7
sourceTo loop over the nonzero elements of a BandedMatrix, you can use colrange(A, c)
and rowrange(A, r)
.
Creating symmetric banded matrices
Use Symmetric(::BandedMatrix)
to work with symmetric banded matrices.
Banded matrix interface
Banded matrices go beyond the type BandedMatrix
: one can also create matrix types that conform to the banded matrix interface, in which case many of the utility functions in this package are available. The banded matrix interface consists of the following:
Required methods Brief description bandwidths(A)
Returns a tuple containing the sub-diagonal and super-diagonal bandwidth BandedMatrices.isbanded(A)
Override to return true
Optional methods Brief description inbands_getindex(A, k, j)
Unsafe: return A[k,j]
, without the need to check if we are inside the bands inbands_setindex!(A, v, k, j)
Unsafe: set A[k,j] = v
, without the need to check if we are inside the bands BandedMatrices.MemoryLayout(A)
Override to get banded lazy linear algebra, e.g. y .= Mul(A,x)
BandedMatrices.bandeddata(A)
Override to return a matrix of the entries in BLAS format. Required if MemoryLayout(A)
returns BandedColumnMajor
Note that certain SubArray
s of BandedMatrix
are also banded matrices. The banded matrix interface is implemented for such SubArray
s to take advantage of this.
Eigenvalues
To compute efficiently a selection of eigenvalues for a BandedMatrix
, you may use any Krylov method that relies on a sequence of matrix * vector operations. For instance, using the package KrylovKit:
using KrylovKit
+ 7
sourceTo loop over the nonzero elements of a BandedMatrix, you can use colrange(A, c)
and rowrange(A, r)
.
Creating symmetric banded matrices
Use Symmetric(::BandedMatrix)
to work with symmetric banded matrices.
Banded matrix interface
Banded matrices go beyond the type BandedMatrix
: one can also create matrix types that conform to the banded matrix interface, in which case many of the utility functions in this package are available. The banded matrix interface consists of the following:
Required methods Brief description bandwidths(A)
Returns a tuple containing the sub-diagonal and super-diagonal bandwidth BandedMatrices.isbanded(A)
Override to return true
Optional methods Brief description inbands_getindex(A, k, j)
Unsafe: return A[k,j]
, without the need to check if we are inside the bands inbands_setindex!(A, v, k, j)
Unsafe: set A[k,j] = v
, without the need to check if we are inside the bands BandedMatrices.MemoryLayout(A)
Override to get banded lazy linear algebra, e.g. y .= Mul(A,x)
BandedMatrices.bandeddata(A)
Override to return a matrix of the entries in BLAS format. Required if MemoryLayout(A)
returns BandedColumnMajor
Note that certain SubArray
s of BandedMatrix
are also banded matrices. The banded matrix interface is implemented for such SubArray
s to take advantage of this.
Eigenvalues
To compute efficiently a selection of eigenvalues for a BandedMatrix
, you may use any Krylov method that relies on a sequence of matrix * vector operations. For instance, using the package KrylovKit:
using KrylovKit
A = BandedMatrix(Eye(5), (1, 1))
KrylovKit.eigsolve(A, 1, :LR)
Implementation
Currently, only column-major ordering is supported: a banded matrix B
[ a_11 a_12 ⋅ ⋅
a_21 a_22 a_23 ⋅
@@ -193,4 +193,4 @@
⋅ a_42 a_43 a_44 ]
is represented as a BandedMatrix
with a field B.data
representing the matrix as
[ ⋅ a_12 a_23 a_34
a_11 a_22 a_33 a_44
a_21 a_32 a_43 ⋅
- a_31 a_42 ⋅ ⋅ ]
B.l
gives the number of subdiagonals (2) and B.u
gives the number of super-diagonals (1). Both B.l
and B.u
must be non-negative at the moment.
Settings
This document was generated with Documenter.jl version 1.4.1 on Wednesday 5 June 2024. Using Julia version 1.10.4.
+ a_31 a_42 ⋅ ⋅ ]
B.l
gives the number of subdiagonals (2) and B.u
gives the number of super-diagonals (1). Both B.l
and B.u
must be non-negative at the moment.