## module LUdecomp3 ''' c,d,e = LUdecomp3(c,d,e). LU decomposition of tridiagonal matrix [c\d\e]. On output {c},{d} and {e} are the diagonals of the decomposed matrix. x = LUsolve3(c,d,e,b). Solves [c\d\e]{x} = {b}, where {c}, {d} and {e} are the vectors returned from LUdecomp3. ''' def LUdecomp3(c,d,e): n = len(d) for k in range(1,n): lam = c[k-1]/d[k-1] d[k] = d[k] - lam*e[k-1] c[k-1] = lam return c,d,e def LUsolve3(c,d,e,b): n = len(d) for k in range(1,n): b[k] = b[k] - c[k-1]*b[k-1] b[n-1] = b[n-1]/d[n-1] for k in range(n-2,-1,-1): b[k] = (b[k] - e[k]*b[k+1])/d[k] return b