import numpy



# LU decomposiong method

def LU_decompose(a):

    n = len(a)

    for k in range(0,n-1):

        for i in range(k+1,n):

           if a[i,k] != 0.0:

               lam = a [i,k]/a[k,k]

               a[i,k+1:n] = a[i,k+1:n] - lam*a[k,k+1:n]

               a[i,k] = lam

    return a



#solving LU

def LU_solution(a,b):

    n = len(a)

    for k in range(1,n):

        b[k] = b[k] - numpy.dot(a[k,0:k],b[0:k])

    for k in range(n-1,-1,-1):

       b[k] = (b[k] - numpy.dot(a[k,k+1:n],b[k+1:n]))/a[k,k]

    return b



a=[]

m = eval(raw_input("Enter number of rows: " ))

n = eval(raw_input("Enter number of columns: " ))

for i in range(m):

    for j in range(n):

       c = eval(raw_input("Enter element %d %d: " %(i+1,j+1) ))

       a.append(c)

a = numpy.reshape(a,(m,n))

a = LU_decompose(a)

det = numpy.prod(numpy.diagonal(a))

print '\nDeterminant =',det

while 1:

   print '\nInput constant vector (press return to exit):'

   try:

       b = numpy.array(eval(raw_input('==> ')))

   except SyntaxError: break

   x = LU_solution(a,b)

   print 'The solution is:\n',x

raw_input("\nPress return to exit")




Strang-1.5-15-U (last edited 2010-12-17 11:47:25 by 172)