|
|
1 import numpy as np 2 from scipy.linalg import lu 3 A = np.array([[0.0, 2.0, 0.0, 1.0], [2.0, 2.0, 3.0, 2.0], [4.0, -3.0, 0.0, 1.0], [6.0, 1.0, -6.0, -5.0]]) 4 P, L, U = lu(A) 5 print("SciPy LU-decomposition: P - Permutation Matrix \n", P) 6 print("SciPy LU-decomposition: L - Lower Triangular with unit diagonal elements \n", L) 7 print("SciPy LU-decomposition: U - Upper Triangular \n", U) 8 def forward(L, b): 9 y=np.zeros(np.shape(b),dtype=float) 10 for i in range(len(b)): 11 y[i]=np.copy(b[i]) 12 for j in range(i): 13 y[i]=y[i]-(L[i, j]*y[j]) 14 y[i] = y[i]/L[i, i] 15 return y 16 b = np.array([[6.0], [-7.0], [-2.0], [0.0]]) 17 # b = np.array([[1.0], [4.0], [-3.0], [1.0]]) 18 y=forward(L,b) 19 print("y vector from Ly=b by forward substitution :", np.transpose(y)) 20 def backward(U, y): 21 x=np.zeros(np.shape(y),dtype=float) 22 ylen=len(y)-1 23 x[ylen] =y[ylen]/U[ylen, ylen] # Print the last stage x value 24 for i in range(ylen-1,-1,-1): 25 x[i]=np.copy(y[i]) 26 for j in range(ylen,i,-1): 27 x[i]=x[i]-(U[i, j]*x[j]) 28 x[i] = x[i]/U[i, i] 29 return x 30 x=backward(U,y) 31 print("x vector from Ux=y by backward substitution :", np.transpose(x)) |