예제 #1
0
def test_Bloqs20matricesDim3():
    '''
    Evalúa 20 veces el algoritmo de factorización PLU y por bloques para
    matrices aleatorias de hata de dimensión 10^3 x 10^3

    '''
    np.random.seed(3338014)  # semilla para replicabilidad de las pruebas
    print(
        "* Evalúa PLU por blñoques para 10 matrices hasta de tamaó 10^3x10^3")
    eps = 1.0E-8  # para definir la precisión a 8 dígitos
    n_veces = 20
    dim_lim_inf = 2
    dim_lim_sup = 10**3
    ents_lim_sup = 10000

    for i in range(1, n_veces + 1):
        A, dim_mat = rv.crea_matrices(dim_lim_inf, dim_lim_sup, ents_lim_sup)
        # se realiza la multiplicación de A con x_real para obtener el lado derecho del SEL
        X = np.round(np.random.normal(dim_lim_inf, dim_lim_sup, dim_mat), 2)
        # computa B
        B = A @ X

        try:
            X_algo = plu_functions.solve_blocks(A, B)
            if np.allclose(X, X_algo):
                print("algoritmo computado correctamente")
            else:
                print("algoritmo computado con baja precisión")
                captured = capsys.readouterr()
                assert captured.out == "Repetición terminado\n"
        except:
            print("matriz singular")
예제 #2
0
def test_comparaSciPyPLU_10Matrices():
    '''
    Evalúa la factorización PLU para 10 matrices cuadradas aleatorias con
    dimensión entre 2x2 y (10^2)x(10^2).

    Compara los elementos P, L, y U de la factorización asociada obtenidos con
    la librería SciPy y con la librería creada para este ejercicio.
    Evalúa que la diferencia de cada elemento de cada una de dichas matrices no
    sea mayor a "eps".
    '''
    np.random.seed(3338014)  # semilla para replicabilidad de las pruebas
    print(
        "* Evalúa 10 veces el algoritmo de factorización PLU para matrices hasta de 10^2x10^2"
    )
    eps = 1.0E-8  # para definir la precisión a 8 dígitos
    n = 10
    dim_lim_inf = 3
    dim_lim_sup = 10**3
    ents_lim_sup = 10000
    # crea matrices aleatorias
    for i in range(1, n + 1):
        mat, _ = rv.crea_matrices(dim_lim_inf, dim_lim_sup, ents_lim_sup)

        # prueba el algoritmo PLU
        P, L, U = plu_functions.PLU(mat)
        P_scipy, L_scipy, U_scipy = scipy.linalg.lu(mat)
        # verificar que los elementos de los dos modulos son iguales
        print("* ¿Solución igual a Scipy?")
        print((P_scipy == P).all() and (L_scipy == L).all()
              and (U_scipy == U).all())
예제 #3
0
def test_10Matrices():
    '''
    Evalúa la factorización PLU para 10 matrices cuadradas aleatorias con
    dimensión entre 2x2 y (10^3)x(10^3).
    NOTA: Las entradas de los números son floats están entre -10.000 y 10.000.
    Para más información del ejemplo ver el sript de "revision_PLU.py"
    '''
    np.random.seed(3338014)  # semilla para replicabilidad de las pruebas
    print("* Evalúa el algoritmo PLU para 10 matrices aleatorias hata de 10^2x10^2")
    eps = 1.0E-8  # para definir la precisión a 8 dígitos
    n = 10
    dim_lim_inf = 2
    dim_lim_sup = 10**3
    ents_lim_sup = 10000
    # crea matrices aleatorias
    for i in range(1, n + 1):
        mat, _ = rv.crea_matrices(dim_lim_inf, dim_lim_sup, ents_lim_sup)
    # prueba el algoritmo PLU
        P, L, U = plu_functions.PLU(mat)
        # verifica que la diferencia entre los elementos de la operación PA-LU
        # sean menores a eps
        assert ((np.matmul(P, mat) - np.matmul(L, U))).all() <= eps