Advertisement
mwchase

Math 551 91.2

Oct 1st, 2011
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.73 KB | None | 0 0
  1. import numpy
  2.  
  3. eps = 2**-52
  4.  
  5. def LU(A):
  6.     U = numpy.matrix(A)
  7.     n = U.shape[0]
  8.     assert len(U.shape)==2
  9.     assert n==U.shape[1]
  10.     L = numpy.matrix(numpy.identity(n))
  11.     for j in range(n-1):
  12.         assert abs(U[j,j])>=eps
  13.         for i in range(j+1, n):
  14.             mult=U[i,j]/U[j,j]
  15.             for k in range(n):
  16.                 U[i,k] -= mult*U[j,k]
  17.             L[i,j]=mult
  18.     return L, U
  19.    
  20. def backsolve(A, b):
  21.     b = numpy.matrix(b).transpose()
  22.     L, U = LU(A)
  23.     n = L.shape[0]
  24.     assert b.shape[0]==n
  25.     assert b.shape[1]==1
  26.     c = numpy.matrix(numpy.zeros((n, 1)))
  27.     x = c.copy()
  28.     for i in range(n):
  29.         mult = c[i] = b[i]
  30.         for k in range(i,n):
  31.             b[k]-= mult*L[k,i]
  32.     for i in range(n-1, -1, -1):
  33.         mult = x[i] = c[i]/U[i,i]
  34.         for k in range(i):
  35.             c[k]-=mult*U[k,i]
  36.     return x
  37.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement