def gauss_inverse(m, i=0, j=0, test=False): from gauss_inv import gauss_inv as ginv """ Calculates the inverso of a block diagonal matrix """ # if test: # check whetehr the inversion worked # return block_inverse(m,i=i,j=j) nb = len(m) # number of blocks ca = [None for ii in range(nb)] ua = [None for ii in range(nb - 1)] da = [None for ii in range(nb - 1)] for ii in range(nb): # diagonal part ca[ii] = m[ii][ii] for ii in range(nb - 1): ua[ii] = m[ii][ii + 1] da[ii] = m[ii + 1][ii] # in case you use the -1 notation of python if i < 0: i += nb if j < 0: j += nb # now call the actual fortran routine mout = ginv(ca, da, ua, i + 1, j + 1) mout = np.matrix(mout) if test: # check whetehr the inversion worked mout2 = block_inverse(m, i=i, j=j) diff = np.sum(np.abs(mout - mout2)) # if diff>0.001: raise return mout
def gauss_inverse(m,i=0,j=0,test=False): from gauss_inv import gauss_inv as ginv """ Calculates the inverso of a block diagonal matrix """ # if test: # check whetehr the inversion worked # return block_inverse(m,i=i,j=j) nb = len(m) # number of blocks ca = [None for ii in range(nb)] ua = [None for ii in range(nb-1)] da = [None for ii in range(nb-1)] for ii in range(nb): # diagonal part ca[ii] = m[ii][ii] for ii in range(nb-1): ua[ii] = m[ii][ii+1] da[ii] = m[ii+1][ii] # in case you use the -1 notation of python if i<0: i += nb if j<0: j += nb # now call the actual fortran routine mout = ginv(ca,da,ua,i+1,j+1) mout = np.matrix(mout) if test: # check whetehr the inversion worked mout2 = block_inverse(m,i=i,j=j) return mout2 diff = np.sum(np.abs(mout-mout2)) # if diff>0.001: raise return mout
def gauss_inverse(d,a,b,i=0,j=0): from gauss_inv import gauss_inv as ginv """ Calculates the block element of the inverse a block diagonal matrix, d are diagonal blocks and a,b the upper and lower diagonals """ if not len(d)==len(a)+1==len(b)+1: print "Wrong dimensions of diagonals" raise mout = ginv(d,b,a,i+1,j+1) # call the fortran function return np.matrix(mout)
def gauss_inverse(m, i=0, j=0): from gauss_inv import gauss_inv as ginv """ Calculates the inverso of a block diagonal matrix """ nb = len(m) # number of blocks ca = [None for ii in range(nb)] ua = [None for ii in range(nb - 1)] da = [None for ii in range(nb - 1)] for ii in range(nb): # diagonal part ca[ii] = m[ii][ii] for ii in range(nb - 1): ua[ii] = m[ii][ii + 1] da[ii] = m[ii + 1][ii] mout = ginv(ca, da, ua, i + 1, j + 1) return np.matrix(mout)
def gauss_inverse(m,i=0,j=0): from gauss_inv import gauss_inv as ginv """ Calculates the inverso of a block diagonal matrix """ nb = len(m) # number of blocks ca = [None for ii in range(nb)] ua = [None for ii in range(nb-1)] da = [None for ii in range(nb-1)] for ii in range(nb): # diagonal part ca[ii] = m[ii][ii] for ii in range(nb-1): ua[ii] = m[ii][ii+1] da[ii] = m[ii+1][ii] mout = ginv(ca,da,ua,i+1,j+1) return np.matrix(mout)