# Class LinearAlgebra

java.lang.Object
net.finmath.functions.LinearAlgebra

public class LinearAlgebra extends Object
This class implements some methods from linear algebra (e.g. solution of a linear equation, PCA). It is basically a functional wrapper using either the Apache commons math or JBlas
Version:
1.6
Author:
Christian Fries

Constructors
Constructor
Description

• ## Method Summary

Modifier and Type
Method
Description
static double[][]
diag(double[] vector)
Generates a diagonal matrix with the input vector on its diagonal
static double[][]
exp(double[][] matrix)
Calculate the "matrix exponential" (expm).
static org.apache.commons.math3.linear.RealMatrix
exp(org.apache.commons.math3.linear.RealMatrix matrix)
Calculate the "matrix exponential" (expm).
static double[][]
factorReduction(double[][] correlationMatrix, int numberOfFactors)
Returns a correlation matrix which has rank < n and for which the first n factors agree with the factors of correlationMatrix.
static double[][]
factorReductionUsingCommonsMath(double[][] correlationMatrix, int numberOfFactors)
Returns a correlation matrix which has rank < n and for which the first n factors agree with the factors of correlationMatrix.
static double[][]
getCholeskyDecomposition(double[][] symmetricMatrix)
Create a Cholesky decomposition of a symmetric matrix.
static double[][]
getFactorMatrix(double[][] correlationMatrix, int numberOfFactors)
Returns the matrix of the n Eigenvectors corresponding to the first n largest Eigenvalues of a correlation matrix.
static double[][]
invert(double[][] matrix)
Returns the inverse of a given matrix.
static double[][]
matrixExp(double[][] matrix)
Matrix exponential.
static double[][]
matrixLog(double[][] matrix)
Matrix logarithm.
static double[][]
matrixPow(double[][] matrix, double exponent)
Matrix power.
static double[][]
multMatrices(double[][] left, double[][] right)
Multiplication of two matrices.
static double[]
multMatrixVector(double[][] matrix, double[] vector)
Multiplication of matrix and vector.
static double[][]
pow(double[][] matrix, double exponent)
Calculate the power of a matrix Note: The function currently requires jblas.
static double[][]
pseudoInverse(double[][] matrix)
Pseudo-Inverse of a matrix calculated in the least square sense.
static double[]
solveLinearEquation(double[][] matrixA, double[] b)
Find a solution of the linear equation A x = b where A is an m x n - matrix given as double[m][n] b is an m - vector given as double[m], x is an n - vector given as double[n],
static double[]
solveLinearEquationLeastSquare(double[][] matrix, double[] vector)
Find a solution of the linear equation A x = b in the least square sense where A is an m x n - matrix given as double[m][n] b is an m - vector given as double[m], x is an n - vector given as double[n],
static double[][]
solveLinearEquationLeastSquare(double[][] matrix, double[][] rhs)
Find a solution of the linear equation A X = B in the least square sense where A is an m x n - matrix given as double[m][n] B is an m x k - matrix given as double[m][k], X is an n x k - matrix given as double[n][k],
static double[]
solveLinearEquationSVD(double[][] matrixA, double[] b)
Find a solution of the linear equation A x = b where A is an m x n - matrix given as double[m][n] b is an m - vector given as double[m], x is an n - vector given as double[n],
static double[]
solveLinearEquationSymmetric(double[][] matrix, double[] vector)
Find a solution of the linear equation A x = b where A is an symmetric n x n - matrix given as double[n][n] b is an n - vector given as double[n], x is an n - vector given as double[n],
static double[]
solveLinearEquationTikonov(double[][] matrixA, double[] b, double lambda)
Find a solution of the linear equation A x = b where A is an m x n - matrix given as double[m][n] b is an m - vector given as double[m], x is an n - vector given as double[n], using a standard Tikhonov regularization, i.e., we solve in the least square sense A* x = b* where A* = (A^T, lambda I)^T and b* = (b^T , 0)^T.
static double[]
solveLinearEquationTikonov(double[][] matrixA, double[] b, double lambda0, double lambda1, double lambda2)
Find a solution of the linear equation A x = b where A is an m x n - matrix given as double[m][n] b is an m - vector given as double[m], x is an n - vector given as double[n], using a Tikhonov regularization, i.e., we solve in the least square sense A* x = b* where A* = (A^T, lambda0 I, lambda1 S, lambda2 C)^T and b* = (b^T , 0 , 0 , 0)^T.
static double[][]
transpose(double[][] matrix)
Transpose a matrix

### Methods inherited from class java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
• ## Constructor Details

• ### LinearAlgebra

public LinearAlgebra()
• ## Method Details

• ### getCholeskyDecomposition

public static double[][] getCholeskyDecomposition(double[][] symmetricMatrix)
Create a Cholesky decomposition of a symmetric matrix.
Parameters:
symmetricMatrix - The input matrix.
Returns:
A lower triangle matrix representing the CholeskyDecomposition.
• ### solveLinearEquationTikonov

public static double[] solveLinearEquationTikonov(double[][] matrixA, double[] b, double lambda)
Find a solution of the linear equation A x = b where
• A is an m x n - matrix given as double[m][n]
• b is an m - vector given as double[m],
• x is an n - vector given as double[n],
using a standard Tikhonov regularization, i.e., we solve in the least square sense A* x = b* where A* = (A^T, lambda I)^T and b* = (b^T , 0)^T.
Parameters:
matrixA - The matrix A (left hand side of the linear equation).
b - The vector (right hand of the linear equation).
lambda - The parameter lambda of the Tikhonov regularization. Lambda effectively measures which small numbers are considered zero.
Returns:
A solution x to A x = b.
• ### solveLinearEquationTikonov

public static double[] solveLinearEquationTikonov(double[][] matrixA, double[] b, double lambda0, double lambda1, double lambda2)
Find a solution of the linear equation A x = b where
• A is an m x n - matrix given as double[m][n]
• b is an m - vector given as double[m],
• x is an n - vector given as double[n],
using a Tikhonov regularization, i.e., we solve in the least square sense A* x = b* where A* = (A^T, lambda0 I, lambda1 S, lambda2 C)^T and b* = (b^T , 0 , 0 , 0)^T. The matrix I is the identity matrix, effectively reducing the level of the solution vector. The matrix S is the first order central finite difference matrix with -lambda1 on the element [i][i-1] and +lambda1 on the element [i][i+1] The matrix C is the second order central finite difference matrix with -0.5 lambda2 on the element [i][i-1] and [i][i+1] and lambda2 on the element [i][i].
Parameters:
matrixA - The matrix A (left hand side of the linear equation).
b - The vector (right hand of the linear equation).
lambda0 - The parameter lambda0 of the Tikhonov regularization. Reduces the norm of the solution vector.
lambda1 - The parameter lambda1 of the Tikhonov regularization. Reduces the slope of the solution vector.
lambda2 - The parameter lambda1 of the Tikhonov regularization. Reduces the curvature of the solution vector.
Returns:
The solution x of the equation A* x = b*
• ### solveLinearEquation

public static double[] solveLinearEquation(double[][] matrixA, double[] b)
Find a solution of the linear equation A x = b where
• A is an m x n - matrix given as double[m][n]
• b is an m - vector given as double[m],
• x is an n - vector given as double[n],
Parameters:
matrixA - The matrix A (left hand side of the linear equation).
b - The vector (right hand of the linear equation).
Returns:
A solution x to A x = b.
• ### solveLinearEquationSVD

public static double[] solveLinearEquationSVD(double[][] matrixA, double[] b)
Find a solution of the linear equation A x = b where
• A is an m x n - matrix given as double[m][n]
• b is an m - vector given as double[m],
• x is an n - vector given as double[n],
Parameters:
matrixA - The matrix A (left hand side of the linear equation).
b - The vector (right hand of the linear equation).
Returns:
A solution x to A x = b.
• ### invert

public static double[][] invert(double[][] matrix)
Returns the inverse of a given matrix.
Parameters:
matrix - A matrix given as double[n][n].
Returns:
The inverse of the given matrix.
• ### solveLinearEquationSymmetric

public static double[] solveLinearEquationSymmetric(double[][] matrix, double[] vector)
Find a solution of the linear equation A x = b where
• A is an symmetric n x n - matrix given as double[n][n]
• b is an n - vector given as double[n],
• x is an n - vector given as double[n],
Parameters:
matrix - The matrix A (left hand side of the linear equation).
vector - The vector b (right hand of the linear equation).
Returns:
A solution x to A x = b.
• ### solveLinearEquationLeastSquare

public static double[] solveLinearEquationLeastSquare(double[][] matrix, double[] vector)
Find a solution of the linear equation A x = b in the least square sense where
• A is an m x n - matrix given as double[m][n]
• b is an m - vector given as double[m],
• x is an n - vector given as double[n],
Parameters:
matrix - The matrix A (left hand side of the linear equation).
vector - The vector b (right hand of the linear equation).
Returns:
A solution x to A x = b.
• ### solveLinearEquationLeastSquare

public static double[][] solveLinearEquationLeastSquare(double[][] matrix, double[][] rhs)
Find a solution of the linear equation A X = B in the least square sense where
• A is an m x n - matrix given as double[m][n]
• B is an m x k - matrix given as double[m][k],
• X is an n x k - matrix given as double[n][k],
Parameters:
matrix - The matrix A (left hand side of the linear equation).
rhs - The matrix B (right hand of the linear equation).
Returns:
A solution X to A X = B.
• ### getFactorMatrix

public static double[][] getFactorMatrix(double[][] correlationMatrix, int numberOfFactors)
Returns the matrix of the n Eigenvectors corresponding to the first n largest Eigenvalues of a correlation matrix. These Eigenvectors can also be interpreted as "principal components" (i.e., the method implements the PCA).
Parameters:
correlationMatrix - The given correlation matrix.
numberOfFactors - The requested number of factors (eigenvectors).
Returns:
Matrix of n Eigenvectors (columns) (matrix is given as double[n][numberOfFactors], where n is the number of rows of the correlationMatrix.
• ### factorReduction

public static double[][] factorReduction(double[][] correlationMatrix, int numberOfFactors)
Returns a correlation matrix which has rank < n and for which the first n factors agree with the factors of correlationMatrix.
Parameters:
correlationMatrix - The given correlation matrix.
numberOfFactors - The requested number of factors (Eigenvectors).
Returns:
Factor reduced correlation matrix.
• ### factorReductionUsingCommonsMath

public static double[][] factorReductionUsingCommonsMath(double[][] correlationMatrix, int numberOfFactors)
Returns a correlation matrix which has rank < n and for which the first n factors agree with the factors of correlationMatrix.
Parameters:
correlationMatrix - The given correlation matrix.
numberOfFactors - The requested number of factors (Eigenvectors).
Returns:
Factor reduced correlation matrix.
• ### exp

public static double[][] exp(double[][] matrix)
Calculate the "matrix exponential" (expm). Note: The function currently requires jblas. If jblas is not availabe on your system, an exception will be thrown. A future version of this function may implement a fall back.
Parameters:
matrix - The given matrix.
Returns:
The exp(matrix).
• ### pow

public static double[][] pow(double[][] matrix, double exponent)
Calculate the power of a matrix Note: The function currently requires jblas. If jblas is not availabe on your system, an exception will be thrown. A future version of this function may implement a fall back.
Parameters:
matrix - The given matrix.
exponent - The exponent
Returns:
The pow(matrix, exponent).
• ### exp

public static org.apache.commons.math3.linear.RealMatrix exp(org.apache.commons.math3.linear.RealMatrix matrix)
Calculate the "matrix exponential" (expm). Note: The function currently requires jblas. If jblas is not availabe on your system, an exception will be thrown. A future version of this function may implement a fall back.
Parameters:
matrix - The given matrix.
Returns:
The exp(matrix).
• ### transpose

public static double[][] transpose(double[][] matrix)
Transpose a matrix
Parameters:
matrix - The given matrix.
Returns:
The transposed matrix.
• ### pseudoInverse

public static double[][] pseudoInverse(double[][] matrix)
Pseudo-Inverse of a matrix calculated in the least square sense.
Parameters:
matrix - The given matrix A.
Returns:
pseudoInverse The pseudo-inverse matrix P, such that A*P*A = A and P*A*P = P
• ### diag

public static double[][] diag(double[] vector)
Generates a diagonal matrix with the input vector on its diagonal
Parameters:
vector - The given matrix A.
Returns:
diagonalMatrix The matrix with the vectors entries on its diagonal
• ### multMatrices

public static double[][] multMatrices(double[][] left, double[][] right)
Multiplication of two matrices.
Parameters:
left - The matrix A.
right - The matrix B
Returns:
product The matrix product of A*B (if suitable)
• ### multMatrixVector

public static double[] multMatrixVector(double[][] matrix, double[] vector)
Multiplication of matrix and vector. The vector array is interpreted as column vector.
Parameters:
matrix - The matrix A.
vector - The vector v
Returns:
product The matrix product of A*v (if suitable)
• ### matrixPow

public static double[][] matrixPow(double[][] matrix, double exponent)
Matrix power. Tries to calculate a matrix A such that M^{exponent} = A.
Parameters:
matrix - The matrix M of which we like to have the power.
exponent - The exponent.
Returns:
The exponent-th power of M
• ### matrixExp

public static double[][] matrixExp(double[][] matrix)
Matrix exponential. Tries to calculate the matrix A such that exp(M) = A.
Parameters:
matrix - The matrix M
Returns:
exp(M)
• ### matrixLog

public static double[][] matrixLog(double[][] matrix)
Matrix logarithm. Tries to calculate the matrix A such that log(M) = A.
Parameters:
matrix - The matrix M
Returns:
log(M)