java.lang.Object
net.finmath.functions.LinearAlgebra
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
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionstatic double[][]
diag
(double[] vector) Generates a diagonal matrix with the input vector on its diagonalstatic 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
-
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],
- 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],
- 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)
-