# Python Program to Implement Elementary Row Operations Assignment Solution

June 24, 2024
Dr. Olivia
🇺🇸 United States
Python
Dr. Olivia Campbell holds a Ph.D. in Computer Science from the University of Cambridge. With over 800 completed assignments, she specializes in developing complex Python applications, including fitness trackers and exercise planners. Dr. Campbell's expertise lies in algorithm design and data analysis, ensuring optimal performance and accuracy in every project she undertakes.
Key Topics
• Instructions
• Objective
• Requirements and Specifications
Tip of the day
News

## Instructions

### Objective

Write a program to implement elementary row operations in python.

## Requirements and Specifications

Source Code

```import numpy as np from sympy import * def replace_rows(mat, i, j, alpha): mat[i,:] += alpha*mat[j,:] def exchange_rows(mat, i, j): temp = mat[j,:] # save the row j in a temporary variable mat[j,:] = mat[i,:] mat[i,:] = temp def scale_rows(mat, i, alpha): mat[i,:] = mat[i,:]*alpha def gauss_elimination(mat): """ Performs gauss elimination using pivoting to get the row-echelon form of the matrix :param mat: 2-D array representing the matrix :return: row echelon form of the matrix """ # getting number of rows and columns rows = len(mat) cols = len(mat[0]) visited_pivot = 0 # visited pivot keeps track of the pivot rows that have been used # selecting the columns first for col in range(cols): pivot = visited_pivot # set the current pivot to visited pivot # get the first non-zero element of the column while pivot < rows and mat[pivot][col] == 0: pivot += 1 if pivot < rows: # found a non-zero element # exchange the pivot row with the top most row which has not been pivoted exchange_rows(mat, pivot, visited_pivot) pivot = visited_pivot # scale the rows so that the element at the current column of the # pivot row becomes 1 scale_rows(mat, pivot, 1 / mat[pivot][col]) # now for all the rows below the visited pivot row # in order to make all elements at col below the pivot 0 # we perform row-replacement for i in range(pivot + 1, rows): col_val = mat[i][col] replace_rows(mat, i, pivot, -col_val) # increment visited pivot by 1 visited_pivot += 1 # return the matrix return mat def print_matrix(mat): """ Prints the matrix :param mat: 2-D array representing the matrix :return: None """ for i in range(len(mat)): for j in range(len(mat[i])): print(mat[i][j], end=' ') print('\n') def solve_linear_equations(A, B): """ Solve linear equations for A and B such that AX=B """ X = np.linalg.solve(A,B) return X def find_pivot(A): """ Pivots matrix A - finds row with maximum first entry and if nessecary swaps it with the first row. Input Arguments --------------- Augmented Matrix A Returns ------- Pivoted Augmented Matrix A """ B = np.zeros((1,2)) B[0,0]=A.shape[0] B[0,1]=A.shape[1] nrows =B[0,0] #This stores dimensions of the ncols =B[0,1] #matrix in an array pivot_size = np.abs(A[0,0]) #checks for largest first entry and swaps pivot_row = 0; for i in range(int(0),int(nrows)): if np.abs(A[i,0])>pivot_size: pivot_size=np.abs(A[i,0]) pivot_row = i if pivot_row>0: tmp = np.empty(int(ncols)) tmp[:] = A[0,:] A[0,:] = A[pivot_row,:] A[pivot_row,:] = tmp[:] return A def backsub(A): """ backsub(A) solves the upper triangular system Input Argument --------------- Augmented Matrix A Returns ------- vector b, solution to the linear system """ B = np.zeros((1,2)) B[0,0]=A.shape[0] B[0,1]=A.shape[1] n =B[0,0] ncols =B[0,1] n=int(n) x=np.zeros((n,1)) x[n-1]=A[n-1,n]/A[n-1,n-1] for i in range(int(n-1),int(-1),int(-1)): for j in range(int(i+1),int(n)): A[i,n] = A[i,n]-A[i,j]*x[j] x[i] = A[i,n]/A[i,i] return x def elim(A): """ elim(A)uses row operations to introduce zeros below the diagonal in first column of matrix A Input Argument --------------- Augmented Matrix A Returns ------- A with eliminated first column """ A = find_pivot(A) B = np.zeros((1,2)) B[0,0]=A.shape[0] B[0,1]=A.shape[1] nrows =B[0,0] ncols =B[0,1] #row operations if(float(A[0][0])): rpiv = 1./float(A[0][0]) else: rpiv = 1.0 for irow in range(int(1),int(nrows)): s=A[irow,0]*rpiv for jcol in range(int(0),int(ncols)): A[irow,jcol] = A[irow,jcol] - s*A[0,jcol] return A def gaussfe(A): """ gaussfe(A)uses row operations to reduce A to upper triangular form by calling elim and pivot Input Argument --------------- Augmented Matrix A Returns ------- A in upper triangular form """ B = np.zeros((1,2)) B[0,0]=A.shape[0] B[0,1]=A.shape[1] nrows =B[0,0] ncols =B[0,1] for i in range(int(0),int(nrows-1)): A[i:int(nrows),i:int(ncols)]=find_pivot(np.array(A[i:int(nrows),i:int(ncols)])) A[i:int(nrows),i:int(ncols)]=elim(A[i:int(nrows),i:int(ncols)]) return A def solve(A,b): """ Solve augments the nxn matrix A and column vector b then calls upon the functions in this module to solve the linear system Input Argument --------------- nxn matrix A and column vector b Returns ------- x, the solution to the linear system """ B = np.zeros((1,2)) B[0,0]=A.shape[0] B[0,1]=A.shape[1] nrows =B[0,0] ncols =B[0,1] Aug= np.zeros((int(nrows),int(ncols+1))) #these 2 loops augment the matrix with column vector for i in range(int(0),int(nrows)): for j in range(int(0),int(ncols)): Aug[i,j] = A[i,j] for k in range(int(0),int(nrows)): Aug[k,int(ncols)]= b[k] A = Aug A=gaussfe(A) x=backsub(A) x=x.T return x if __name__ == '__main__': print("Original matrix") # A = [[1, 4, 2], [0, 1, -4], [2, 7, 9]] A = np.array([[-1, 1, 2, -8, 16, 30], [4,-4,-8,28,-60,-108], [1,-1,-2,0,-12,-10], [4, -4,-8,24,-60,-100]]) print_matrix(A) print() M = Matrix([[-1, 1, 2, -8, 16, 30], [4,-4,-8,28,-60,-108], [1,-1,-2,0,-12,-10], [4, -4,-8,24,-60,-100]]) M_rref = M.rref() print("The Row echelon form of matrix M and the pivot columns : {}".format(M_rref)) print("The Row-echelon form:") B = gauss_elimination(np.array(M_rref[0])) print_matrix(B) print("Pivoting matrix") print(find_pivot(np.array(A))) print() print("Using gaussian with partial pivot") print(gaussfe(elim(find_pivot(np.array(A))))) print() print("Using gaussian with full pivot") print(gauss_elimination(np.array(A))) print() a = np.array([[-1, 1, 2, -8, 16, 30], [4,-4,-8,28,-60,-108], [1,-1,-2,0,-12,-10], [4, -4,-8,24,-60,-100]],float) #the b matrix constant terms of the equations b = np.array([-89, 328, 49, 316],float) print("Solve system of linear equations") print(solve(a,b)) # Testing 'solve(A,b)' when A is square A = np.array([[3, -1, 4], [17, 2, 1], [1, 12, -77]], float) b = np.array([2, 14, 54], float).T # Solve by using normal matrix multiplication x_exact = np.matmul(np.linalg.inv(A), b) print("Real sol: ", x_exact) # Using solve x = solve(A, b) print("Using solve: ", x) ```

## Similar Samples

At ProgrammingHomeworkHelp.com, delve into our sample programming assignments showcasing our proficiency across various languages and complexities. These examples illustrate our dedication to delivering high-quality solutions tailored to academic and professional needs. Explore our samples to see how we can assist you in mastering programming challenges effectively.