}
public void testDenseLUToInput() {
// MTJ bug in DenseLU code
Matrix m = new DenseMatrix(3, 3);
// -2 2 -3
// -1 1 3
// 2 0 -1
m.set(0, 0, -2);
m.set(0, 1, 2);
m.set(0, 2, -3);
m.set(1, 0, -1);
m.set(1, 1, 1);
m.set(1, 2, 3);
m.set(2, 0, 2);
m.set(2, 1, 0);
m.set(2, 2, -1);
// SHOULD BE:
// L:
// 1.000 0.000 0.000
// -1.000 1.000 0.000
// 0.500 0.000 1.000
//
// U:
// -2.000 2.000 -3.000
// 0.000 2.000 -4.000
// 0.000 0.000 4.500
//
// Permutation matrix:
// 1.000 0.000 0.000
// 0.000 0.000 1.000
// 0.000 1.000 0.000
DenseLU dlu = DenseLU.factorize(m);
// check that m = L . U
Matrix lTimesU = new DenseMatrix(3, 3);
dlu.getL().mult(dlu.getU(), lTimesU);
int[] pivots = dlu.getPivots();
for (MatrixEntry entry : m) {
int row = entry.row();
int col = entry.column();
double val = entry.get();
double valLU = pivots[row] * lTimesU.get(row, col);
assert val == valLU : "Row " + row + ", Col " + col
+ " wasn't equal! " + val + " " + valLU;
}
Matrix lu = dlu.getLU();