/** * Finds the inverse of a diagonal matrix * @param matrixToInvert matrix to compute inverse of * @param invertedMatrixToPack matrix to store inverse */ public static void invertDiagonalMatrix(RowD1Matrix64F matrixToInvert, RowD1Matrix64F invertedMatrixToPack) { if (matrixToInvert.numRows != matrixToInvert.numCols) { throw new MatrixDimensionException( "Diagonal matrix to invert is not square. Number of rows in matrix: " + matrixToInvert.getNumRows() + ", number of" + " cols in matrix: " + matrixToInvert.getNumCols() + "."); } if (invertedMatrixToPack.numRows != matrixToInvert.numRows && invertedMatrixToPack.numCols != matrixToInvert.numCols) { throw new MatrixDimensionException( "Matrix destination is the wrong size. Number of rows in matrix: " + matrixToInvert.getNumRows() + ", number of" + " cols in matrix: " + matrixToInvert.getNumCols() + "."); } if (matrixToInvert == invertedMatrixToPack) { throw new IllegalArgumentException("Matrices should not be the same. Use {@link DiagonalMatrixTools.invertDiagonalMatrix(RowD1Matrix64F)} instead."); } int size = matrixToInvert.getNumRows(); Arrays.fill(invertedMatrixToPack.data, 0, invertedMatrixToPack.getNumElements(), 0.0); for (int index = 0; index < size; index++) invertedMatrixToPack.unsafe_set(index, index, 1.0 / matrixToInvert.unsafe_get(index, index)); }
/** * Finds the inverse of a diagonal matrix * @param matrixToInvertAndPack matrix to compute inverse of */ public static void invertDiagonalMatrix(RowD1Matrix64F matrixToInvertAndPack) { if (matrixToInvertAndPack.numRows != matrixToInvertAndPack.numCols) { throw new MatrixDimensionException( "Diagonal matrix to invert is not square. Number of rows in matrix: " + matrixToInvertAndPack.getNumRows() + ", number of" + " cols in matrix: " + matrixToInvertAndPack.getNumCols() + "."); } int size = matrixToInvertAndPack.getNumRows(); for (int index = 0; index < size; index++) matrixToInvertAndPack.unsafe_set(index, index, 1.0 / matrixToInvertAndPack.unsafe_get(index, index)); }