Home > Net >  How to safe a column from diagonal element to the bottom
How to safe a column from diagonal element to the bottom

Time:12-01

I'm trying to get the L and U--matrices from the following Gauss-elimination code I wrote

matrix = np.array ([[2,1,4,1], [3,4,-1,-1] , [1,-4,1,5] , [2,-2,1,3]], dtype = float)
vector = np.array([-4, 3, 9, 7], float)
length = len(vector)
L_matrix = np.zeros((4,4), float)
U_matrix = np.zeros((4,4), float)

for m in range(length):
    L_matrix[:,m] = matrix[:,m]
    div = matrix[m,m]
    matrix[m,:] /= div
    U_matrix[m, :] = matrix[m,:]
    vector[m] /= div

I'm getting the right U-matrix, but I'm getting this L-matrix

[[  2.    0.5   2.    0.5]
 [  3.    2.5  -2.8  -1. ]
 [  1.   -4.5 -13.6  -0. ]
 [  2.   -3.  -11.4  -1. ]]

i.e I'm getting the whole matrix instead of a lower triangular matrix with zeros at the top! What am I doing wrong here?

CodePudding user response:

The issue here is that the provided code does not perform the elimination. Try this:

for m in range(length):
    div = matrix[m, m]
    L_matrix[:, m] = matrix[:, m] / div
    U_matrix[m, :] = matrix[m, :]
    matrix -= np.outer(L_matrix[:, m], U_matrix[m, :])

See this article for more details. For actually solving your linear system, the issue is that LU is not exactly the same as standard Gaussian elimination. You can use back substitution to efficiently compute what vector should be.

  • Related