# Block Algebra Utilities

Summary

The algebra package has utility functions for commonly used operations on block matrices and vectors. We give the user a glimpse here.

Warning

The routines in this section assume that the block sizes of the input matrix are homogenous i.e. the number of row blocks is equal to number of column blocks.

## Blocked Operations¶

Following operations are the blocked implementations of standard algorithms used for matrices.

### $LU$ Decomposition¶

$LU$ decomposition consists of decomposing a square matrix into lower and upper triangular factors.

 1 2 3 4 //Initialize a square matrix val sq_mat: PartitionedMatrix = _ val (lower, upper) = bLU(sq_mat) 

### Cholesky Decomposition¶

Cholesky decomposition consists of decomposing a symmetric positive semi-definite matrix uniquely into lower and upper triangular factors.

 1 2 3 4 //Initialize a psd matrix val psd_mat: PartitionedPSDMatrix = _ val (lower, upper) = bcholesky(psd_mat) 

### Trace¶

Trace of a square matrix is the sum of the diagonal elements.

 1 2 3 4 //Initialize a square matrix val sq_mat: PartitionedMatrix = _ val tr = btrace(sq_mat) 

### Determinant¶

The determinant of a square matrix represents the scaling factor of the transformation described by the matrix

 1 2 3 4 //Initialize a square matrix val sq_mat: PartitionedMatrix = _ val de = bdet(sq_mat) 

### Diagonal¶

Obtain diagonal elements of a square block matrix in the form of a block vector.

 1 2 3 4 //Initialize a square matrix val sq_mat: PartitionedMatrix = _ val dia: PartitionedVector = bdiagonal(sq_mat) 

• Self Quadratic Forms: $\mathbf{x}^\intercal \Omega^{-1} \mathbf{x}$
• Cross Quadratic Form: $\mathbf{y}^\intercal \Omega^{-1} \mathbf{x}$
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 val (x,y): (DenseVector[Double], DenseVector[Double]) = (_,_) val omega: DenseMatrix[Double] = _ //Use breeze function val lower = cholesky(omega) val x_omega_x = quadraticForm(lower, x) val y_omega_x = crossQuadraticForm(y, lower, x) //Blocked Version of the same. val (xb,yb): (PartitionedVector, PartitionedVector) = (_,_) val omegab: PartitionedPSDMatrix = _ //Use DynaML algebra function val lowerb = bcholesky(omegab) val x_omega_x_b = blockedQuadraticForm(lowerb, xb) val y_omega_x_b = blockedCrossQuadraticForm(yb, lowerb, xb)