Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Grado en Física
Facultad de Ciencias
Práctica 6
1. Introducción
Práctica 6
módulo antiguo por el nuevo en un programa y compilándolo de nuevo,
inmediatamente dispondremos de un programa más eficiente. Esto será factible si
ambos módulos usan la misma interfaz, es decir, la llamada al módulo es idéntica
que la anterior (mismos parámetros) y los resultados de ambos son idénticos
(valores devueltos del mismo tipo).
Por tanto, aparte de la función principal, vamos a necesitar una función que
indique si un número es primo o no.
2 de 17
PROGRAMACIÓN
Grado en Física
Facultad de Ciencias
Práctica 6
Por último, no debemos olvidar añadir al principio del código fuente las directivas
de inclusión, las directivas de definición y los prototipos de las funciones que
hemos declarado:
3 de 17
PROGRAMACIÓN
Grado en Física
Facultad de Ciencias
Práctica 6
3. Probando el programa
n suma
5 10
10 17
500 21.536
1000 76.127
20000 21.171.191
50000 121.013.308
4 de 17
PROGRAMACIÓN
Grado en Física
Facultad de Ciencias
Práctica 6
t1=clock();
bloque_instrucciones_que_quiero_medir;
t2=clock();
numsecs=(double)(t2-t1)/CLOCKS_PER_SEC;
Fíjese en que hemos tenido que transformar el numerador a double para forzar el
cociente real.
Vamos a medir el tiempo que tarda en ejecutarse la suma de los números primos.
En negrita se muestran las modificaciones a realizar en la función principal.
5 de 17
PROGRAMACIÓN
Grado en Física
Facultad de Ciencias
Práctica 6
Además, de los cambios señalados, recuerde que al principio del programa debe
añadir una directiva que incluya al fichero ctime:
6 de 17
PROGRAMACIÓN
Grado en Física
Facultad de Ciencias
Práctica 6
7 de 17
PROGRAMACIÓN
Grado en Física
Facultad de Ciencias
Práctica 6
Anote en una tabla los resultados obtenidos para la suma y el tiempo invertido en
calcularla. Comprobará que se obtiene el mismo resultado para la suma pero ha
mejorado el tiempo considerablemente con un cambio muy pequeño, pero
altamente efectivo.
Cuando termine los dos programas y haya rellenado las dos tablas, avise al
profesor para que lo compruebe. Recuerde subir a SWAD tanto los códigos fuente
de ambos programas como las dos tablas realizadas.
8 de 17
PROGRAMACIÓN
Grado en Física
Facultad de Ciencias
Práctica 6
Ejercicio P6.1
Repita en el ordenador de su casa los mismos experimentos que ha realizado en
el laboratorio con los dos programas realizados.
Usando el primer programa implementado, rellene una tabla que muestre los
resultados obtenidos para la suma y el tiempo de ejecución para los siguientes
valores de n: 10.000, 20.000, 30.000, 40.000, 50.000, 60.000, 70.000, 80.000,
90.000 y 100.000.
Realice una gráfica del tiempo de ejecución t en función de n. Realice un ajuste
polinomial para obtener un modelo matemático que permita calcular el tiempo de
ejecución t a partir del valor de n. Usando el polinomio obtenido añada una
columna en la tabla anterior que muestre el tiempo calculado con el polinomio para
cada uno de los valores de n considerados en los experimentos. (Ver anexo sobre
ajuste de curvas para hacer esta parte).
Ejercicio P6.2
Usando el segundo programa implementado, rellene una tabla que muestre los
resultados obtenidos para la suma y el tiempo de ejecución para los siguientes
valores de n: 10.000, 20.000, 30.000, 40.000, 50.000, 60.000, 70.000, 80.000,
90.000 y 100.000.
Realice una gráfica del tiempo de ejecución t en función de n. Realice un ajuste
polinomial para obtener un modelo matemático que permita calcular el tiempo de
ejecución t a partir del valor de n. Usando el polinomio obtenido añada una
columna en la tabla anterior que muestre el tiempo calculado con el polinomio para
cada uno de los valores de n considerados en los experimentos. (Ver anexo sobre
ajuste de curvas para hacer esta parte).
9 de 17
PROGRAMACIÓN
Grado en Física
Facultad de Ciencias
Práctica 6
Ejercicio P6.3
Vamos a repetir exactamente los mismos pasos que en los ejercicios anteriores
usando un nuevo algoritmo. El código de la función es_primo() que vamos a
probar es el siguiente (explicado en clase de problemas):
t1=clock();
for(r=1; r<=100; r++)
bloque_instrucciones_que_quiero_medir;
t2=clock();
numsecs=(double)(t2-t1)/(CLOCKS_PER_SEC*100);
10 de 17
PROGRAMACIÓN
Grado en Física
Facultad de Ciencias
Práctica 6
En el ejemplo estamos midiendo el tiempo necesario para ejecutar la misma rutina
100 veces, y después se divide ese tiempo total entre 100 para calcular lo que se
tarda en ejecutarla una única vez, que es lo que nos interesa (es decir, en nuestro
caso, debemos ejecutar la suma acumulada 100 veces consecutivas para cada
valor de n, y dividir entre 100 el tiempo total medido). Si fuese necesario tener más
precisión, en vez de 100 puede usarse un factor mayor.
Así pues, implemente un nuevo programa que use esta última función y realice los
cambios necesarios para poder medir el tiempo de ejecución.
Rellene una tabla que muestre los resultados de la suma y del tiempo de cálculo
dobtenido para los siguientes valores de n: 10.000, 20.000, …, 100.000.
Realice una gráfica del tiempo de ejecución t en función de n. Realice un ajuste
polinomial para obtener un modelo matemático que permita calcular el tiempo de
ejecución t a partir del valor de n. Usando el polinomio obtenido añada una
columna en la tabla anterior que muestre el tiempo calculado con el polinomio para
cada uno de los valores de n considerados en los experimentos. (Ver anexo sobre
ajuste de curvas para hacer esta parte).
Ejercicio P6.4
Al realizar el ajuste de los datos medidos para el tiempo de ejecución en los 3
ejercicios anteriores, ha obtenido los coeficientes de un polinomio de segundo
grado que le permiten calcular el tiempo que tardará en ejecutarse cada programa
a partir del valor de n, sin necesidad de tener que ejecutar el programa para
medirlo.
Usando los coeficientes obtenidos para cada caso, diseñe una nueva tabla para
comparar el tiempo que tardaría en ejecutarse cada uno de los programas para
valores grandes de n.
Así, debe confeccionar una nueva tabla que muestre muestre el tiempo estimado
que el ordenador invertirá en calcular la suma de los primos menores que los
siguientes valores de n: 1.000.000, 10.000.000, 100.000.000 y 1.000.000.000 . En
dicha tabla, para cada uno de los programas, exprese el valor del tiempo obtenido
en segundos y también expresado en días.
Nota: Es imprescindible que ejecute los tres algoritmos en el mismo ordenador, ya que va a
comparar sus tiempos de ejecución. Procure que el ordenador no esté realizando otras tareas ni
ejecutando otros programas mientras realiza las medidas (no esté descargando nada, ni
escuchando música, ni haciendo copias de seguridad, etc), ya que le afectaría.
11 de 17
PROGRAMACIÓN
Grado en Física
Facultad de Ciencias
Práctica 6
Conteste a las siguientes preguntas:
12 de 17
PROGRAMACIÓN
Grado en Física
Facultad de Ciencias
Práctica 6
Anexo: Ajuste de curvas y regresión
Ajustar una curva a partir de datos experimentales es una operación usual en
cualquier experimento. Consiste en encontrar una expresión matemática que
reproduzca de forma fiel los mismos resultados que se han obtenido en un
experimento.
Por ejemplo, imaginemos que medimos una barra de metal a distintas
temperaturas y queremos conocer la fórmula que relaciona la longitud de dicha
barra con la temperatura. Para conseguirlo, existe una herramienta estadística
llamada “análisis de regresión” que, usando las medidas que hemos realizado,
permite obtener una expresión matemática que ajusta esos datos, es decir,
obtendremos una fórmula en la que, a partir del valor de la temperatura,
proporcionará el valor de la longitud de la barra metálica que se ha medido.
Probablemente, en las clases de prácticas de Física les habrán enseñado a
realizar ajustes o regresiones mediante rectas (si no lo han hecho aún, pronto lo
harán, pueden estar seguros). El ajuste mediante una recta es válido cuando
existe una relación lineal del tipo y = ax + b entre la variable medida (y) y la
variable usada como referencia (x). Por ejemplo, en el caso de la barra metálica, lo
medido sería la longitud y la referencia sería la temperatura (L = aT + b).
En general, las relaciones entre 2 variables físicas no siempre son lineales y por
ello existen otros tipos de ajustes que usan más variables o más coeficientes para
modelar formas o relaciones más complejas. Un tipo de ajuste muy usual es el
polinómico, en el cual se usa un polinomio de grado n para modelar
matemáticamente la relación entre 2 variables:
t = a n2 + b n + c
13 de 17
PROGRAMACIÓN
Grado en Física
Facultad de Ciencias
Práctica 6
Por tanto, haremos un análisis de regresión usando las medidas que hemos
realizado y obtendremos los valores de los coeficientes a, b y c del polinomio.
Usando esos coeficientes podremos calcular el valor de t para cualquier n,
simplemente usando el polinomio resultante, sin necesidad de tener que hacer
nuevos experimentos.
Existen muchos programas que permiten calcular las curvas de regresión
(Microsoft Excel u OpenOffice, por ejemplo). Sin embargo, por sencillez,
recomendamos usar una aplicación online y gratuita llamada Polynomial
Regression Data Fit:
http://arachnoid.com/polysolve/index.html
• Área de dibujo (Figura 2). En esta zona se mostrará una gráfica con los
puntos correspondientes a los datos introducidos (en color rojo). En color
azul se dibujará la curva correspondiente al polinomio que mejor concuerda
con esos datos. Compruebe el ajuste que realiza si usa un ajuste lineal en
vez de un polinomio de grado 2, u otros tipos de ajustes; verá que el
14 de 17
PROGRAMACIÓN
Grado en Física
Facultad de Ciencias
Práctica 6
modelo resultante es mucho más impreciso que en nuestro caso, lo cual
permite percibir visualmente si el modelo matemático usado para ajustar los
datos es más o menos preciso.
15 de 17
PROGRAMACIÓN
Grado en Física
Facultad de Ciencias
Práctica 6
• Tabla generadora (Figura 4). En esta zona se muestran los resultados que
se obtienen usando los coeficientes calculados para distintos valores de n.
De esta forma podemos observar si los valores que se calculan son
similares a los obtenidos experimentalmente (usando los mismos valores de
n para el cálculo que utilizamos para las mediciones) o bien, estimar qué
valor se obtiene para t usando valores de n arbitrarios.
16 de 17
PROGRAMACIÓN
Grado en Física
Facultad de Ciencias
Práctica 6
(*) Es imprescindible que ejecute los tres algoritmos en el mismo ordenador, ya que va a comparar
sus tiempos de ejecución. Procure que el ordenador no esté realizando otras tareas ni ejecutando
otros programas mientras realiza estas medidas.
(**) Las gráficas pueden ser simplemente las capturas de pantalla de la gráfica que genera la
página de http://arachnoid.com/polysolve/index.html como resultado del ajuste.
17 de 17