def imprime_matriz_vetor(): n = outros.set_n(a, b) print('\n\n---------- MATRIZ ----------') pprint.pprint(construtor.matriz(q, n['x'], n['h'], n['n'])) print('\n\n---------- VETOR DE TERMOS INDEPENDENTES ----------') pprint.pprint(construtor.vetor(r, n['x'], n['h'], n['n'], a_, b_))
def reducao_erro(): # Define o valor de N e calcula a solução de Gauss para o N determinado n = outros.set_n(a, b) v_gauss = np.array(gauss.v_sol_mh(q, r, n['x'], n['h'], n['n'], a_, b_)) # Cria dois vetores vazios, para armazenar os valores do erro e a taxa erro = [] taxa = [] # Calcula a solução de Jacobi para n_max=1 # Calcula o erro (módulo da diferença entre o vetor solução de Gauss e Jacobi) # v2 recebe apenas o valor máximo do erro. v2 = max( abs((np.array( jacobi.v_sol_mh(q, r, n['x'], n['h'], n['n'], a_, b_, 1, 0, False)) - v_gauss)).tolist()) for i in range(2, 50): v1 = v2 # Calcula a solução de Jacobi para n_max=i # Calcula o erro (módulo da diferença entre o vetor solução de Gauss e Jacobi) # v2 recebe apenas o valor máximo do erro. v2 = max( abs((np.array( jacobi.v_sol_mh(q, r, n['x'], n['h'], n['n'], a_, b_, i, 0, False)) - v_gauss)).tolist()) # Adiciona o erro máximo ao vetor erro. erro.append(v2) # Adiciona a taxa (1 - ((erro n_max=i-1)/(erro n_max=i)) ao vetor taxa taxa.append(1 - (v2 / v1)) print('\n\nERRO A CADA ITERAÇÃO') print(erro) print('\n\nTAXA DE REDUÇÃO A CADA ITERAÇÃO') print(taxa) print('\n\nTAXA DE REDUÇÃO MÉDIA') print(sum(taxa) / len(taxa))
def solucoes_residuo(): n = outros.set_n(a, b) prin = int(input('Exibir resultados detalhados? (0 - não / 1 - sim) ')) print('\n---------- SOLUÇÕES ----------') # Soluciona a matriz utilizando a solução real conhecida if prin == 1: print('\n-------------------- REAL --------------------') print(solve.v_sol(y, n['x'])) # Soluciona a matriz pelo método de Gauss print('\n-------------------- GAUSS --------------------') start_time = time.time() v1 = gauss.v_sol_mh(q, r, n['x'], n['h'], n['n'], a_, b_) if prin == 1: print(v1) # Calcula o resíduo para solução de Gauss res_gauss = outros.residuo( construtor.matriz(q, n['x'], n['h'], n['n']), construtor.vetor(r, n['x'], n['h'], n['n'], a_, b_), v1) if prin == 1: print('\nRESÍDUO') print(res_gauss) print('\nRESÍDUO MAX') print(max(res_gauss)) print("\n---------- {:.06f} S ----------".format( abs(start_time - time.time()))) # Soluciona a matriz pelo método de Jacobi print('\n-------------------- JACOBI --------------------') n_max = int(input('\nInsira o número máximo de iterações desejado ')) tol = float(input('Insira a tolerância desejada ')) start_time = time.time() v2 = jacobi.v_sol_mh(q, r, n['x'], n['h'], n['n'], a_, b_, n_max, tol) if prin == 1: print(v2) # Calcula o resíduo para solução de Jacobi res_jacobi = outros.residuo( construtor.matriz(q, n['x'], n['h'], n['n']), construtor.vetor(r, n['x'], n['h'], n['n'], a_, b_), v2) if prin == 1: print('\nRESÍDUO') print(res_jacobi) print('\nRESÍDUO MAX') print(max(res_jacobi)) print("\n---------- {:.06f} S ----------".format( abs(start_time - time.time()))) # Compara os resíduos de Gauss e Jacobi print( '\n-------------------- DIFERENÇA ENTRE RESÍDUOS --------------------') dif_res = abs(np.array(res_jacobi) - np.array(res_gauss)).tolist() if prin == 1: print(dif_res) print('\nDIFERENÇA MAX') print(max(dif_res))