public static boolean bidiagOuterBlocks ( final int blockLength , final DSubmatrixD1 A , final double gammasU [ ] , final double gammasV [ ] ) { // System.out.println("---------- Orig"); // A.original.print(); int width = Math . min ( blockLength , A . col1 - A . col0 ) ; int height = Math . min ( blockLength , A . row1 - A . row0 ) ; int min = Math . min ( width , height ) ; for ( int i = 0 ; i < min ; i ++ ) { //--- Apply reflector to the column // compute the householder vector if ( ! computeHouseHolderCol ( blockLength , A , gammasU , i ) ) return false ; // apply to rest of the columns in the column block rank1UpdateMultR_Col ( blockLength , A , i , gammasU [ A . col0 + i ] ) ; // apply to the top row block rank1UpdateMultR_TopRow ( blockLength , A , i , gammasU [ A . col0 + i ] ) ; System . out . println ( "After column stuff" ) ; A . original . print ( ) ; //-- Apply reflector to the row if ( ! computeHouseHolderRow ( blockLength , A , gammasV , i ) ) return false ; // apply to rest of the rows in the row block rank1UpdateMultL_Row ( blockLength , A , i , i + 1 , gammasV [ A . row0 + i ] ) ; System . out . println ( "After update row" ) ; A . original . print ( ) ; // apply to the left column block // TODO THIS WON'T WORK!!!!!!!!!!!!! // Needs the whole matrix to have been updated by the left reflector to compute the correct solution // rank1UpdateMultL_LeftCol(blockLength,A,i,i+1,gammasV[A.row0+i]); System . out . println ( "After row stuff" ) ; A . original . print ( ) ; } return true ; }
Performs a standard bidiagonal decomposition just on the outer blocks of the provided matrix