`AlmostBlockDiagonals.AlmostBlockDiagonal`

— Type`AlmostBlockDiagonal{T, I <: Integer, V <: AbstractMatrix{T}} <: AbstractMatrix{T}`

A matrix with block matrices on the diagonal, but not strictly has their corner against each other.

For example:

A 10 x 10 matrix:

x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x

can be abstracted as:

`julia> AlmostBlockDiagonal([rand(3,4),rand(2,4),rand(2,4),rand(3,4)], [2,2,2,4])`

Here, the first argument is the fillers in the almost block diagonal matrix, the second argument is the offset of each adjacent block in the diagonal.

! note The column of block `ncol`

and row of block `nrow`

must satisfy: `ncol`

≥ `nrow`

.

The implementation mainly comes from the paper: SOLVEBLOK: A Package for Solving Almost Block Diagonal Linear Systems which is originally a FORTRAN program for the solution of an almost block diagonal system by gaussian elimination with scale row pivoting.

`AlmostBlockDiagonals.IntermediateAlmostBlockDiagonal`

— TypeIntermediate matrix used for the representation of modified almost block diagonals mainly use for pivoting LU factorization.

`AlmostBlockDiagonals.IntermediateAlmostBlockDiagonal`

— MethodConvert a `AlmostBlockDiagonal`

matrix to an intermediate form to do the factorization and solving

! note Only for the square almost diagonal matrix of course

`AlmostBlockDiagonals.nblocks`

— Method`nblocks(A::AlmostBlockDiagonal[, dim])`

Return the number of on-diagonal blocks.

`AlmostBlockDiagonals.nblocks`

— Methodnblocks(A::IntermediateAlmostBlockDiagonal[, dim])