public void applyQ(DMatrixRBlock B , boolean isIdentity ) {
        int minDimen = Math.min(dataA.numCols,dataA.numRows);

        DSubmatrixD1 subB = new DSubmatrixD1(B);

        W.col0 = W.row0 = 0;
        Y.row1 = W.row1 = dataA.numRows;
        WTA.row0 = WTA.col0 = 0;

        int start = minDimen - minDimen % blockLength;
        if( start == minDimen )
            start -= blockLength;
        if( start < 0 )
            start = 0;

        // (Q1^T * (Q2^T * (Q3^t * A)))
        for( int i = start; i >= 0; i -= blockLength ) {

            Y.col0 = i;
            Y.col1 = Math.min(Y.col0+blockLength,dataA.numCols);
            Y.row0 = i;
            if( isIdentity )
                subB.col0 = i;
            subB.row0 = i;

            setW();
            WTA.row1 = Y.col1-Y.col0;
            WTA.col1 = subB.col1-subB.col0;
            WTA.original.reshape(WTA.row1,WTA.col1,false);

            // Compute W matrix from reflectors stored in Y
            if( !saveW )
                BlockHouseHolder_DDRB.computeW_Column(blockLength,Y,W,temp, gammas,Y.col0);

            // Apply the Qi to Q
            BlockHouseHolder_DDRB.multTransA_vecCol(blockLength,Y,subB,WTA);
            MatrixMult_DDRB.multPlus(blockLength,W,WTA,subB);
        }
    }
public void applyQ ( DMatrixRBlock B , boolean isIdentity ) { int minDimen = Math . min ( dataA . numCols , dataA . numRows ) ; DSubmatrixD1 subB = new DSubmatrixD1 ( B ) ; W . col0 = W . row0 = 0 ; Y . row1 = W . row1 = dataA . numRows ; WTA . row0 = WTA . col0 = 0 ; int start = minDimen - minDimen % blockLength ; if ( start == minDimen ) start -= blockLength ; if ( start < 0 ) start = 0 ; for ( int i = start ; i >= 0 ; i -= blockLength ) { Y . col0 = i ; Y . col1 = Math . min ( Y . col0 + blockLength , dataA . numCols ) ; Y . row0 = i ; if ( isIdentity ) subB . col0 = i ; subB . row0 = i ; setW ( ) ; WTA . row1 = Y . col1 - Y . col0 ; WTA . col1 = subB . col1 - subB . col0 ; WTA . original . reshape ( WTA . row1 , WTA . col1 , false ) ; if ( ! saveW ) BlockHouseHolder_DDRB . computeW_Column ( blockLength , Y , W , temp , gammas , Y . col0 ) ; BlockHouseHolder_DDRB . multTransA_vecCol ( blockLength , Y , subB , WTA ) ; MatrixMult_DDRB . multPlus ( blockLength , W , WTA , subB ) ; } }
Specialized version of applyQ() that allows the zeros in an identity matrix
to be taken advantage of depending on if isIdentity is true or not.

@param B
@param isIdentity If B is an identity matrix.