Class BandMatrix

All Implemented Interfaces:
Iterable<MatrixEntry>, Matrix

public class BandMatrix extends AbstractMatrix
Banded matrix. The banded matrix is a useful sparse structure for many kinds of direct computations, however it should only be used if the band is sufficiently narrow as wide bands actually wastes both memory and compute time. The matrix

a11 a12      
a21 a22 a23    
a31 a32 a33 a34  
  a42 a43 a44 a45
    a53 a54 a55

has two lower diagonals and one upper diagonal. It will be stored in the array

  a11 a21 a31 a21 a22 a32 a42 a23 a33 a43 a53 a34 a44 a54   a45 a55    

Empty cells are allocated, but never referenced.

  • Constructor Details

    • BandMatrix

      public BandMatrix(int n, int kl, int ku)
      Constructor for BandMatrix
      Parameters:
      n - Size of the matrix. Since the matrix must be square, this equals both the number of rows and columns
      kl - Number of bands above the main diagonal (superdiagonals)
      ku - Number of bands below the main diagonal (subdiagonals)
    • BandMatrix

      public BandMatrix(Matrix A, int kl, int ku)
      Constructor for BandMatrix
      Parameters:
      A - Matrix to copy contents from. Only the parts of A that lie within the allocated band are copied over, the rest is ignored
      kl - Number of bands above the main diagonal (superdiagonals)
      ku - Number of bands below the main diagonal (subdiagonals)
    • BandMatrix

      public BandMatrix(Matrix A, int kl, int ku, boolean deep)
      Constructor for BandMatrix
      Parameters:
      A - Matrix to copy contents from. Only the parts of A that lie within the allocated band are copied over, the rest is ignored
      kl - Number of bands above the main diagonal (superdiagonals)
      ku - Number of bands below the main diagonal (subdiagonals)
      deep - True for a deep copy. For shallow copies, A must be a banded matrix
  • Method Details

    • copy

      public BandMatrix copy()
      Description copied from interface: Matrix
      Creates a deep copy of the matrix
      Specified by:
      copy in interface Matrix
      Overrides:
      copy in class AbstractMatrix
      Returns:
      A
    • zero

      public Matrix zero()
      Description copied from interface: Matrix
      Zeros all the entries in the matrix, while preserving any underlying structure. Useful for general, unstructured matrices.
      Specified by:
      zero in interface Matrix
      Returns:
      A
    • multAdd

      public Vector multAdd(double alpha, Vector x, Vector y)
      Description copied from interface: Matrix
      y = alpha*A*x + y
      Specified by:
      multAdd in interface Matrix
      Overrides:
      multAdd in class AbstractMatrix
      Parameters:
      x - Vector of size A.numColumns()
      y - Vector of size A.numRows()
      Returns:
      y
    • transMultAdd

      public Vector transMultAdd(double alpha, Vector x, Vector y)
      Description copied from interface: Matrix
      y = alpha*AT*x + y
      Specified by:
      transMultAdd in interface Matrix
      Overrides:
      transMultAdd in class AbstractMatrix
      Parameters:
      x - Vector of size A.numRows()
      y - Vector of size A.numColumns()
      Returns:
      y
    • solve

      public Matrix solve(Matrix B, Matrix X)
      Description copied from interface: Matrix
      X = A\B. Not all matrices support this operation, those that do not throw UnsupportedOperationException. Note that it is often more efficient to use a matrix decomposition and its associated solver
      Specified by:
      solve in interface Matrix
      Overrides:
      solve in class AbstractMatrix
      Parameters:
      B - Matrix with the same number of rows as A, and the same number of columns as X
      X - Matrix with a number of rows equal A.numColumns(), and the same number of columns as B
      Returns:
      X
    • solve

      public Vector solve(Vector b, Vector x)
      Description copied from interface: Matrix
      x = A\b. Not all matrices support this operation, those that do not throw UnsupportedOperationException. Note that it is often more efficient to use a matrix decomposition and its associated solver
      Specified by:
      solve in interface Matrix
      Overrides:
      solve in class AbstractMatrix
      Parameters:
      b - Vector of size A.numRows()
      x - Vector of size A.numColumns()
      Returns:
      x
    • transpose

      public Matrix transpose()
      Description copied from interface: Matrix
      Transposes the matrix in-place. In most cases, the matrix must be square for this to work.
      Specified by:
      transpose in interface Matrix
      Overrides:
      transpose in class AbstractMatrix
      Returns:
      This matrix
    • getData

      public double[] getData()
      Returns the matrix contents
    • add

      public void add(int row, int column, double value)
      Description copied from interface: Matrix
      A(row,column) += value
      Specified by:
      add in interface Matrix
      Overrides:
      add in class AbstractMatrix
    • set

      public void set(int row, int column, double value)
      Description copied from interface: Matrix
      A(row,column) = value
      Specified by:
      set in interface Matrix
      Overrides:
      set in class AbstractMatrix
    • get

      public double get(int row, int column)
      Description copied from interface: Matrix
      Returns A(row,column)
      Specified by:
      get in interface Matrix
      Overrides:
      get in class AbstractMatrix
    • numSubDiagonals

      public int numSubDiagonals()
      Returns the number of lower diagonals
    • numSuperDiagonals

      public int numSuperDiagonals()
      Returns the number of upper diagonals
    • set

      public Matrix set(Matrix B)
      Description copied from interface: Matrix
      A=B. The matrices must be of the same size
      Specified by:
      set in interface Matrix
      Overrides:
      set in class AbstractMatrix
      Returns:
      A
    • iterator

      public Iterator<MatrixEntry> iterator()
      Specified by:
      iterator in interface Iterable<MatrixEntry>
      Overrides:
      iterator in class AbstractMatrix