protected void updateRotator(DMatrixRMaj Q , int m, int n, double c, double s) {
        int rowA = m*Q.numCols;
        int rowB = n*Q.numCols;

//        for( int i = 0; i < Q.numCols; i++ ) {
//            double a = Q.get(rowA+i);
//            double b = Q.get(rowB+i);
//            Q.set( rowA+i, c*a + s*b);
//            Q.set( rowB+i, -s*a + c*b);
//        }
//        System.out.println("------ AFter Update Rotator "+m+" "+n);
//        Q.print();
//        System.out.println();
        int endA = rowA + Q.numCols;
        for( ; rowA != endA; rowA++ , rowB++ ) {
            double a = Q.get(rowA);
            double b = Q.get(rowB);
            Q.set(rowA, c*a + s*b);
            Q.set(rowB, -s*a + c*b);
        }
    }
protected void updateRotator ( DMatrixRMaj Q , int m , int n , double c , double s ) { int rowA = m * Q . numCols ; int rowB = n * Q . numCols ; int endA = rowA + Q . numCols ; for ( ; rowA != endA ; rowA ++ , rowB ++ ) { double a = Q . get ( rowA ) ; double b = Q . get ( rowB ) ; Q . set ( rowA , c * a + s * b ) ; Q . set ( rowB , - s * a + c * b ) ; } }
Multiplied a transpose orthogonal matrix Q by the specified rotator.  This is used
to update the U and V matrices.  Updating the transpose of the matrix is faster
since it only modifies the rows.


@param Q Orthogonal matrix
@param m Coordinate of rotator.
@param n Coordinate of rotator.
@param c cosine of rotator.
@param s sine of rotator.