Ejemplo n.º 1
0
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_))
Ejemplo n.º 2
0
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))
Ejemplo n.º 3
0
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))