private void updateRemoveQ ( int rowIndex ) { Qm . set ( Q ) ; Q . reshape ( m_m , m_m , false ) ; for ( int i = 0 ; i < rowIndex ; i ++ ) { for ( int j = 1 ; j < m ; j ++ ) { double sum = 0 ; for ( int k = 0 ; k < m ; k ++ ) { sum += Qm . data [ i * m + k ] * U_tran . data [ j * m + k ] ; } Q . data [ i * m_m + j - 1 ] = sum ; } } for ( int i = rowIndex + 1 ; i < m ; i ++ ) { for ( int j = 1 ; j < m ; j ++ ) { double sum = 0 ; for ( int k = 0 ; k < m ; k ++ ) { sum += Qm . data [ i * m + k ] * U_tran . data [ j * m + k ] ; } Q . data [ ( i - 1 ) * m_m + j - 1 ] = sum ; } } }
Updates the Q matrix to take inaccount the row that was removed by only multiplying e lements that need to be . There is still some room for improvement here ...