/** * Q = I - gamma*u*u<sup>H</sup> */ public static CMatrixRMaj householder(CMatrixRMaj u, float gamma) { int N = u.getDataLength() / 2; // u*u^H CMatrixRMaj uut = new CMatrixRMaj(N, N); VectorVectorMult_CDRM.outerProdH(u, u, uut); // foo = -gamma*u*u^H CommonOps_CDRM.elementMultiply(uut, -gamma, 0, uut); // I + foo for (int i = 0; i < N; i++) { int index = (i * uut.numCols + i) * 2; uut.data[index] = 1 + uut.data[index]; } return(uut); }