<jupyter_start><jupyter_text>MEDICIONES DE TIEMPOS Y ERRORES RELATIVOS A NIVEL GENERAL Este notebook tiene como finalidad medir los tiempos de ejecución y errores relativos para la función eliminacion_bloques para matrices de dimensiones 2x2, 10x10, 100x100 y 500x500.Para la parte de errores relativos, estaremos comparando los resultados obtenidos de la función implementada por los programadores contra la librería numpy. Empezamos por importar la librerias necesarias.<jupyter_code>import pandas as pd
import numpy as np
import funciones_factorizacion_QR as fqr
import time
import matplotlib.pyplot as plt<jupyter_output><empty_output><jupyter_text>Creamos una tabla vacía en la que guardaremos los resultados de cada iteración.<jupyter_code># Creamos la tabla resumen
col_names = ['Dimensiones de la matriz', 'Tiempos', 'Promedio error relativo']
table_df = pd.DataFrame(columns=col_names)<jupyter_output><empty_output><jupyter_text>EJEMPLO 1 - MATRIZ 2X2 **Medición tiempos**<jupyter_code># Creamos una matriz aleatoria
m = 2
n = 2
A = fqr.crear_matriz_aleatoria(m,n,1,2)
b= fqr.crear_matriz_aleatoria(m,1,1,2)
dim_2_2 = str(m) + ' x ' + str(n) 
# Medición de tiempos utilizando la función implementada por los programadores
begin = time.time()
solucion = fqr.eliminacion_bloques(A,b)
end = time.time()
time_2_2 = end - begin<jupyter_output><empty_output><jupyter_text>**Medición error relativo** Compararemos la función de la librería numpy vs la implementación de los programadores.<jupyter_code>solucion_numpy = np.linalg.solve(A,b)
error_relativo_2_2 = abs(solucion - solucion_numpy)/abs(solucion_numpy)
table_df.loc[len(table_df)] = [dim_2_2, time_2_2, np.mean(error_relativo_2_2)]<jupyter_output><empty_output><jupyter_text>EJEMPLO 2 - MATRIZ 10X10 **Medición tiempos**<jupyter_code># Creamos una matriz aleatoria
m = 10
n = 10
A = fqr.crear_matriz_aleatoria(m,n,1,2)
b = fqr.crear_matriz_aleatoria(m,1,1,2)
dim_10_10 = str(m) + ' x ' + str(n) 
# Medición de tiempos utilizando la función implementada por los programadores
begin = time.time()
solucion = fqr.eliminacion_bloques(A,b)
end = time.time()
time_10_10 = end - begin<jupyter_output><empty_output><jupyter_text>**Medición error relativo** Compararemos la función de la librería numpy vs la implementación de los programadores.<jupyter_code>solucion_numpy = np.linalg.solve(A,b)
error_relativo_10_10 = abs(solucion - solucion_numpy)/abs(solucion_numpy)
table_df.loc[len(table_df)] = [dim_10_10, time_10_10, np.mean(error_relativo_10_10)]<jupyter_output><empty_output><jupyter_text>EJEMPLO 3 - MATRIZ 100X100 **Medición tiempos**<jupyter_code># Creamos una matriz aleatoria
m = 10**2
n = 10**2
A = fqr.crear_matriz_aleatoria(m,n,1,2)
b= fqr.crear_matriz_aleatoria(m,1,1,2)
dim_100_100 = str(m) + ' x ' + str(n) 
# Medición de tiempos utilizando la función implementada por los programadores
begin = time.time()
solucion = fqr.eliminacion_bloques(A,b)
end = time.time()
time_100_100 = end - begin<jupyter_output><empty_output><jupyter_text>**Medición error relativo** Compararemos la función de la librería numpy vs la implementación de los programadores.<jupyter_code>solucion_numpy = np.linalg.solve(A,b)
error_relativo_100_100 = abs(solucion - solucion_numpy)/abs(solucion_numpy)
table_df.loc[len(table_df)] = [dim_100_100, time_100_100, np.mean(error_relativo_100_100)]<jupyter_output><empty_output><jupyter_text>EJEMPLO 4 - MATRIZ 500X500 **Medición tiempos**<jupyter_code># Creamos una matriz aleatoria
m = 500
n = 500
A = fqr.crear_matriz_aleatoria(m,n,1,2)
b= fqr.crear_matriz_aleatoria(m,1,1,2)
dim_500_500 = str(m) + ' x ' + str(n) 
# Medición de tiempos utilizando la función implementada por los programadores
begin = time.time()
solucion = fqr.eliminacion_bloques(A,b)
end = time.time()
time_500_500 = end - begin<jupyter_output><empty_output><jupyter_text>**Medición error relativo** Compararemos la función de la librería numpy vs la implementación de los programadores.<jupyter_code>solucion_numpy = np.linalg.solve(A,b)
error_relativo_500_500 = abs(solucion - solucion_numpy)/abs(solucion_numpy)
table_df.loc[len(table_df)] = [dim_500_500, time_500_500, np.mean(error_relativo_500_500)]<jupyter_output><empty_output><jupyter_text>Tabla Resumen Esta tabla resumen consolida los resultados obtenidos en las pruebas anteriores con la finalidad de comparar dichos resultados.<jupyter_code>table_df<jupyter_output><empty_output><jupyter_text>Se puede observar que al aumentar las dimensiones de las matrices de entrada, tanto los tiempos de ejecución como el promedio del error relativo van aumentando.Particularmente se aprecia un cambio muy brusco en los tiempos de ejecución cuando cambiamos de una matriz 100x100 a una de 500x500. Mientras que por otro lado, el cambio en el promedio del error relativo es mucho mas sutil para este mismo caso.   Gráficas  Tiempos<jupyter_code>dimensiones = table_df['Dimensiones de la matriz']
tiempos = table_df['Tiempos']
plt.plot(dimensiones, tiempos, '^-')
plt.xlabel('Dimensiones')
plt.ylabel('Tiempo en segundos')
plt.grid(True)
plt.title('Tiempos de ejecución')
plt.show()<jupyter_output><empty_output><jupyter_text>Promedio error relativo<jupyter_code>dimensiones = table_df['Dimensiones de la matriz']
error = table_df['Promedio error relativo']
plt.plot(dimensiones, error, '^-')
plt.xlabel('Dimensiones')
plt.ylabel('Tiempo en segundos')
plt.grid(True)
plt.title('Promedio error relativo')
plt.show()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.09763692984063015, 'fraction_numerical': 0.0362703791903279, 'mean_word_length': 7.323170731707317, 'pattern_counts': {'":': 0, '<': 53, '<?xml version=': 0, '>': 53, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '13', 'dir': 'jupyter-structured-clean-dedup', 'id': '540480', 'license': 'MIT', 'n_tokens_mistral': 2247, 'n_tokens_neox': 2084, 'n_words': 484, 'path': 'Insumos/Tiempos_Errores_General.ipynb', 'repo_name': 'mno-2020-gh-classroom/ex-modulo-3-comp-matricial-qr-dapivei', 'size': '5459'}