A band matrix is a matrix whose only nonzero elements lie on diagonal bands
above and/or below the main diagonal. The number of nonzero diagonals above
the main diagonal is called the upper bandwidth. The number
of nonzero diagonals below the main diagonal is called the lower bandwidth.
Band matrices exist in the usual variations. A general band matrix has
nonzero elements both above and below the main diagonal. An upper band matrix
only has elements on and above the main diagonal. A lower band matrix has
elements on and below the main diagonal. A symmetric band matrix has identical
elements on either side of the main diagonal.
All these variations of band matrices are implemented by the
BandMatrixT class.
Constructing band matrices
Band matrices are created using static methods of the
Matrix class.
The CreateBanded
creates general band matrices. It has two overloads.
The first overload takes four arguments: the number of rows and columns of the matrix,
the upper bandwidth, and the lower bandwidth.
The element type must be specified as a generic type argument.
The second overload takes an additional Boolean
argument that specifies whether extra space should be allocated
to compute an LU decomposition. The factors of an LU decomposition of a band matrix
that uses partial pivoting have a larger upper bandwidth than the original matrix.
As a result, extra storage space must be reserved to store these elements.
The shape of the band matrix is fixed. Once created, the upper and lower bandwidth
cannot be changed. If the lower bandwidth is zero, the matrix is considered
to be an upper band matrix. If the upper bandwidth is zero, the matrix is
considered to be a lower band matrix.
The following example constructs a 5x7 band matrix with a lower bandwidth
of 2 and an upper bandwidth of 1:
var b1 = Matrix.CreateBanded<double>(5, 7, 2, 1);
Dim b1 = Matrix.CreateBanded(Of Double)(5, 7, 2, 1)
No code example is currently available or this language may not be supported.
let b1 = Matrix.CreateBanded<double>(5, 7, 2, 1)
The CreateUpperBanded
and CreateLowerBanded
methods create upper and lower banded matrices. The first two arguments are the number of rows
and columns. Next is the bandwidth above or below the diagonal.
The last, optional argument is a MatrixDiagonal
value that specifies whether the main diagonal of the matrix contains all ones.
The code below creates two band matrices. The first is a 7x6 upper band matrix
with a bandwidth of 2 with unit diagonal. The second is a 7x7 lower band matrix
with a bandwidth of 3.
var b2 = Matrix.CreateUpperBanded<double>(7, 6, 2, MatrixDiagonal.UnitDiagonal);
var b3 = Matrix.CreateLowerBanded<double>(7, 7, 3);
Dim b2 = Matrix.CreateUpperBanded(Of Double)(7, 6, 2, MatrixDiagonal.UnitDiagonal)
Dim b3 = Matrix.CreateLowerBanded(Of Double)(7, 7, 3)
No code example is currently available or this language may not be supported.
let b2 = Matrix.CreateUpperBanded<double>(7, 6, 2, MatrixDiagonal.UnitDiagonal)
let b3 = Matrix.CreateLowerBanded<double>(7, 7, 3)
Finally, the
CreateSymmetricBandedT
method creates a symmetric band matrix. The first argument is the number of rows and columns.
The second argument is the upper and lower bandwidth. The example below constructs
a 6x6 symmetrical tridiagonal matrix:
var b4 = Matrix.CreateSymmetricBanded<double>(6, 1);
Dim b4 = Matrix.CreateSymmetricBanded(Of Double)(6, 1)
No code example is currently available or this language may not be supported.
let b4 = Matrix.CreateSymmetricBanded<double>(6, 1)
The BandMatrixT>
class has a number of unique properties.
The UpperBandwidth
and LowerBandwidth
properties return the number of non-zero diagonals above and below the main diagonal, respectively.
The TotalBandwidth
property returns the total number of diagonals that may contain nonzero elements,
including the main diagonal.
A group of properties returns information about the structure of the matrix.
The IsSymmetrical,
IsUpperTriangular,
IsLowerTriangular and
IsUnitDiagonal
properties fall in this category. Their names are self-explanatory.
The GetRow
and The GetColumn
methods of a BandMatrixT
usually return a vector of type
BlockVectorT.
If the vector contains only zeros, a
ConstantVectorT
is returned.
Band Matrix Decompositions
The LU decomposition for a general band matrix and the Cholesky decomposition
of a symmetric band matrix also have a special form. Two special classes
have been defined to take advantage of this special structure.