Пример #1
0
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
Пример #2
0
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
Пример #3
0
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)
Пример #4
0
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)
Пример #5
0
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)