mwchase icon

Math 551 91.2

mwchase | PRO | 10/01/11 09:00:33 PM UTC | 0 ⭐ | 789 👁️ | Never ⏰ | []
Python |

730 B

|

None

|

0 👍

/

0 👎

import numpy
 
eps = 2**-52
 
def LU(A):
    U = numpy.matrix(A)
    n = U.shape[0]
    assert len(U.shape)==2
    assert n==U.shape[1]
    L = numpy.matrix(numpy.identity(n))
    for j in range(n-1):
        assert abs(U[j,j])>=eps
        for i in range(j+1, n):
            mult=U[i,j]/U[j,j]
            for k in range(n):
                U[i,k] -= mult*U[j,k]
            L[i,j]=mult
    return L, U
    
def backsolve(A, b):
    b = numpy.matrix(b).transpose()
    L, U = LU(A)
    n = L.shape[0]
    assert b.shape[0]==n
    assert b.shape[1]==1
    c = numpy.matrix(numpy.zeros((n, 1)))
    x = c.copy()
    for i in range(n):
        mult = c[i] = b[i]
        for k in range(i,n):
            b[k]-= mult*L[k,i]
    for i in range(n-1, -1, -1):
        mult = x[i] = c[i]/U[i,i]
        for k in range(i):
            c[k]-=mult*U[k,i]
    return x
 

Comments