Example #1
0
        /**
         * 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);
        }