/*
* Copyright (c) 2015 NOVA, All rights reserved.
* This library is free software, licensed under GNU Lesser General Public License version 3
*
* This file is part of NOVA.
*
* NOVA is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* NOVA is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with NOVA. If not, see <http://www.gnu.org/licenses/>.
*/package nova.core.util.math;
import org.apache.commons.math3.exception.DimensionMismatchException;
import org.apache.commons.math3.exception.util.Localizable;
import org.apache.commons.math3.linear.MatrixUtils;
import org.apache.commons.math3.linear.RealMatrix;
import java.util.Locale;
/**
* @author Kubuxu
*/
public class MatrixUtil {
public static RealMatrix augment(RealMatrix matrix, int rows, int columns) {
if (matrix.getRowDimension() > rows)
throw new DimensionMismatchException(of("rows: {0} !< {1}"), matrix.getRowDimension(), rows);
if (matrix.getColumnDimension() > columns)
throw new DimensionMismatchException(of("columns: {0} !< {1}"), matrix.getColumnDimension(), columns);
RealMatrix augmented = MatrixUtils.createRealMatrix(rows, columns);
augmented.setSubMatrix(matrix.getData(), 0, 0);
return augmented;
}
public static RealMatrix augmentWithIdentity(RealMatrix matrix, int dimensions) {
RealMatrix augmented = augment(matrix, dimensions, dimensions);
for (int i = MathUtil.max(matrix.getRowDimension(), matrix.getColumnDimension()) + 1; i <= dimensions; i++) {
augmented.setEntry(i - 1, i - 1, 1);
}
return augmented;
}
// Little cheat.
private static Localizable of(String string) {
return new Localizable() {
@Override
public String getSourceString() {
return string;
}
@Override
public String getLocalizedString(Locale locale) {
return string;
}
};
}
}