private void verifyInternals(Path tempDir, Matrix a, Omega omega, int kp, int q) {
int m = a.numRows();
int n = a.numCols();
Vector xi = a.aggregateColumns(new VectorFunction() {
@Override
public double apply(Vector v) {
return v.zSum() / v.size();
}
});
// materialize omega
Matrix momega = new DenseMatrix(n, kp);
for (int i = 0; i < n; i++)
for (int j = 0; j < kp; j++)
momega.setQuick(i, j, omega.getQuick(i, j));
Vector s_o = omega.mutlithreadedTRightMultiply(xi);
System.out.printf("s_omega=\n%s\n", s_o);
Matrix y = a.times(momega);
for (int i = 0; i < n; i++) y.viewRow(i).assign(s_o, Functions.MINUS);
QRDecomposition qr = new QRDecomposition(y);
Matrix qm = qr.getQ();
Vector s_q = qm.aggregateColumns(new VectorFunction() {
@Override
public double apply(Vector v) {
return v.zSum();
}
});