def matrix_rayleigh_quotient_iteration(matrix, tol, max_iter, getIterCount=False): error = tol * 10 count = 0 v_i = matrix[0] v_i = vector_scal_mult(1 / vector_2norm(v_i), v_i) eigenvaluenew = matrix_mult(matrix_transpose(convert_vec_mat(v_i)), matrix_mult(matrix, convert_vec_mat(v_i)))[0][0] I = [[int(i == j) for i in range(len(matrix))] for j in range(len(matrix))] while error > tol and count < max_iter: eigenvalueold = eigenvaluenew v_i = matrix_solve_LU( matrix_add(matrix, matrix_scal_mult(-eigenvaluenew, I)), v_i) v_i = vector_scal_mult(1 / vector_2norm(v_i), v_i) eigenvaluenew = matrix_mult(matrix_transpose(convert_vec_mat(v_i)), matrix_mult(matrix, convert_vec_mat(v_i)))[0][0] error = abs(eigenvaluenew - eigenvalueold) count += 1 if getIterCount == True: return eigenvaluenew, count else: return eigenvaluenew
def matrix_inverse_power_iteration(matrix, alpha, tol, max_iter, getIterCount=False): error = tol * 10 count = 0 eigenvaluenew = 0 I = [[-int(i == j) * alpha for i in range(len(matrix))] for j in range(len(matrix))] v_i = matrix[0] while error > tol and count < max_iter: eigenvalueold = eigenvaluenew v_i = matrix_solve_LU(matrix_add(matrix, I), v_i) v_i = vector_scal_mult(1 / vector_2norm(v_i), v_i) eigenvaluenew = matrix_mult(matrix_transpose(convert_vec_mat(v_i)), matrix_mult(matrix, convert_vec_mat(v_i)))[0][0] count += 1 error = abs(eigenvaluenew - eigenvalueold) if getIterCount == True: return eigenvaluenew, count else: return eigenvaluenew