mush
mush

Reputation: 1

Difficult time trying to figure out where the row operations are going wrong. Following the operations given

I am taking a Linear Algebra for Data Science class through DeepLearning.AI, and one of the exercises has a linear system of equation problem, where you define 3 functions (MultiplyRow, AddRows, SwapRows) to apply elementary operations to the defined matrix A, performing row reduction according to the given instructions.

A = np.array([     
            [2, -1, 1, 1],
            [1, 2, -1, -1],
            [-1, 2, 2, 2],
            [1, -1, 2, 1]    
        ], dtype=np.dtype(int)) 
    b = np.array([6,3,14,8], dtype=np.dtype(int))

def MultiplyRow(M, row_num, row_num_multiple):
        M_new = M.copy()
        M_new[row_num] = M_new[row_num] * row_num_multiple
        return M_new
    
    def AddRows(M, row_num_1, row_num_2, row_num_1_multiple):
        M_new = M.copy()   
        M_new[row_num_2] = row_num_1_multiple * M_new[row_num_1] + M_new[row_num_2]
        return M_new

    def SwapRows(M, row_num_1, row_num_2):
        M_new = M.copy()
        M_new[[row_num_1, row_num_2]] = M_new[[row_num_2, row_num_1]]
        return M_new
    def augmented_to_ref(A, b):    
        A_system = np.hstack((A, b.reshape((4, 1))))
        print(A_system)

# swap row 0 and row 1 of matrix A_system (remember that indexing in NumPy array startsfrom0)
        A_ref = SwapRows(A_system, 0, 1)
    
        # multiply row 0 of the new matrix A_ref by -2 and add it to the row 1
        A_ref = AddRows(A_ref, 0, 1, -2)
    
        # multiply row 0 of the new matrix A_ref by -1 and add it to the row 3
        A_ref = AddRows(A_ref, 0, 3, -1)
    
        # add row 2 of the new matrix A_ref to the row 3, replacing row 3
        A_ref = AddRows(A_ref, 2, 3, 1)
    
        # swap row 1 and 3 of the new matrix A_ref
        A_ref = SwapRows(A_ref, 1, 3)
    
        # add row 2 of the new matrix A_ref to the row 3, replacing row 3
        A_ref = AddRows(A_ref, 2, 3, 1)
    
        # multiply row 1 of the new matrix A_ref by -4 and add it to the row 2
        A_ref = AddRows(A_ref, 1, 2, -4)
    
        # add row 1 of the new matrix A_ref to the row 3, replacing row 3
        A_ref = AddRows(A_ref, 1, 3, 1)
        
        # multiply row 3 of the new matrix A_ref by 2 and add it to the row 2
        A_ref = AddRows(A_ref, 3, 2, 2)
    
        # multiply row 2 of the new matrix A_ref by -8 and add it to the row 3
        A_ref = AddRows(A_ref, 2, 3, -8)
    
        # multiply row 3 of the new matrix A_ref by -1/17
        A_ref = MultiplyRow(A_ref, 3, (-1/17))
    
        return A_ref

    A_ref = augmented_to_ref(A, b)

    print(A_ref)

Expected output:

[[ 1  2 -1 -1  3]
 [ 0  1  4  3 22]
 [ 0  0  1  3  7]
 [ 0  0  0  1  1]]

The output I am getting here is:

[[ 1  2 -1 -1  3]
 [-1 -1  5  4 19]
 [-1 -2  2  4  4]
 [ 0  0  0  1  0]]

Upvotes: 0

Views: 246

Answers (1)

codingchobo
codingchobo

Reputation: 1

def augmented_to_ref(A, b):    
    ### START CODE HERE ###
    # stack horizontally matrix A and vector b, which needs to be reshaped as a vector (4, 1)
    A_system = np.hstack((A,b.reshape((4,1))))
    
    # swap row 0 and row 1 of matrix A_system (remember that indexing in NumPy array starts from 0)
    A_ref = SwapRows(A_system,0,1)
    
    # multiply row 0 of the new matrix A_ref by -2 and add it to the row 1
    A_ref = AddRows(A_ref,0,1,-2)
    
    # add row 0 of the new matrix A_ref to the row 2, replacing row 2
    A_ref = AddRows(A_ref, 0, 2, 1)
    
    # multiply row 0 of the new matrix A_ref by -1 and add it to the row 3
    A_ref =  AddRows(A_ref,0,3,-1)
    
    # add row 2 of the new matrix A_ref to the row 3, replacing row 3
    A_ref = AddRows(A_ref,2,3,1)
    
    # swap row 1 and 3 of the new matrix A_ref
    A_ref = SwapRows(A_ref,1,3)
    
    # add row 2 of the new matrix A_ref to the row 3, replacing row 3
    A_ref = AddRows(A_ref,2,3,1)
    
    # multiply row 1 of the new matrix A_ref by -4 and add it to the row 2
    A_ref = AddRows(A_ref,1,2,-4)
    
    # add row 1 of the new matrix A_ref to the row 3, replacing row 3
    A_ref = AddRows(A_ref,1,3,1)
    
    # multiply row 3 of the new matrix A_ref by 2 and add it to the row 2
    A_ref = AddRows(A_ref,3,2,2)
    
    # multiply row 2 of the new matrix A_ref by -8 and add it to the row 3
    A_ref = AddRows(A_ref,2,3,-8)
    
    # multiply row 3 of the new matrix A_ref by -1/17
    A_ref = MultiplyRow(A_ref,3,(-1/17))
    ### END CODE HERE ###
    
    return A_ref

A_ref = augmented_to_ref(A, b)

print(A_ref)

Upvotes: 0

Related Questions