Reputation: 1
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
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