import flame import laff as laff def Trmv_ln_unb_var1(L, x): LTL, LTR, \ LBL, LBR = flame.part_2x2(L, \ 0, 0, 'BR') xT, \ xB = flame.part_2x1(x, \ 0, 'BOTTOM') while LBR.shape[0] < L.shape[0]: L00, l01, L02, \ l10t, lambda11, l12t, \ L20, l21, L22 = flame.repart_2x2_to_3x3(LTL, LTR, \ LBL, LBR, \ 1, 1, 'TL') x0, \ chi1, \ x2 = flame.repart_2x1_to_3x1(xT, \ xB, \ 1, 'TOP') #------------------------------------------------------------# laff.scal( lambda11, chi1 ) laff.dots( l10t, x0, chi1 ) #------------------------------------------------------------# LTL, LTR, \ LBL, LBR = flame.cont_with_3x3_to_2x2(L00, l01, L02, \ l10t, lambda11, l12t, \ L20, l21, L22, \ 'BR') xT, \ xB = flame.cont_with_3x1_to_2x1(x0, \ chi1, \ x2, \ 'BOTTOM') flame.merge_2x1(xT, \ xB, x) from numpy import random from numpy import matrix L = matrix( random.rand( 4,4 ) ) x = matrix( random.rand( 4,1 ) ) xold = matrix( random.rand( 4,1 ) ) # Notice that L is not lower triangular. We will only use the lower triangular part. print( 'L before =' ) print( L ) print( 'x before =' ) print( x ) import numpy as np laff.copy( x, xold ) # save the original vector x Trmv_ln_unb_var1( L, x ) print( 'x after =' ) print( x ) print( np.tril( L ) * xold ) print( 'x - ( np.tril( L ) * xold ) = ' ) #np.tril makes a matrix lower triangular print( x - ( np.tril( L ) * xold ) ) import flame import laff as laff def Trmv_ln_unb_var2(L, x): LTL, LTR, \ LBL, LBR = flame.part_2x2(L, \ 0, 0, 'BR') xT, \ xB = flame.part_2x1(x, \ 0, 'BOTTOM') while LBR.shape[0] < L.shape[0]: L00, l01, L02, \ l10t, lambda11, l12t, \ L20, l21, L22 = flame.repart_2x2_to_3x3(LTL, LTR, \ LBL, LBR, \ 1, 1, 'TL') x0, \ chi1, \ x2 = flame.repart_2x1_to_3x1(xT, \ xB, \ 1, 'TOP') #------------------------------------------------------------# laff.axpy( chi1, l21, x2 ) laff.scal( lambda11, chi1 ) #------------------------------------------------------------# LTL, LTR, \ LBL, LBR = flame.cont_with_3x3_to_2x2(L00, l01, L02, \ l10t, lambda11, l12t, \ L20, l21, L22, \ 'BR') xT, \ xB = flame.cont_with_3x1_to_2x1(x0, \ chi1, \ x2, \ 'BOTTOM') flame.merge_2x1(xT, \ xB, x) from numpy import random from numpy import matrix L = matrix( random.rand( 4,4 ) ) x = matrix( random.rand( 4,1 ) ) xold = matrix( random.rand( 4,1 ) ) # L is not lower triangular. We will only use the lower triangular part. print( 'L before =' ) print( L ) print( 'x before =' ) print( x ) laff.copy( x, xold ) # save the original vector y Trmv_ln_unb_var2( L, x ) print( 'x after =' ) print( x ) print( 'x - ( np.tril( L ) * xold ) = ' ) #np.tril makes the matrix lower triangular print( x - ( np.tril( L ) * xold ) )