Computación numérica

Anuncio
Ejercicios.
1.2.− Haz un programa que te permita encontrar el máximo número de cifras significativas para cada
uno de los tipos de datos REAL y DOUBLE. Compilalo utilizando y sin utilizar la directiva de
compilación: {$N+}.
Se ha empleado un algoritmo iterativo que comprueba dos números cuya diferencia es su ultimo dígito
decimal significativo, es decir, se han comparados los números de la série:
1,0 con 1,1
1,1 con 1,11
1,11 con 1,111
1,111 con 1,1111
etc.
hasta que el programa toma los dos como iguales, en cuyo caso se ha guardado y sacado por pantalla el
número de iteraciones que se habian realizado menos una, que equivalen al ultimo dígito decimal
significativo.
El algoritmo se ha ejecutado sobre dos tipos de datos distintos, Real y Double, dando como resultado:
Real −−−−−> 12 dígitos significativos
Double −−−−−> 15 dígitos significativos
program ej1pr1 (input, output);
program ej1bpr1 (input, output);
uses WinCrt;
{$N+}
var
uses WinCrt;
i :Integer;
var
x, x2, y : Real;
i : Integer;
begin
x, x2, y : Double;
x:=0;
begin
i:=1;
x:=1;
x2:=0.1;
i:=1;
repeat
x2:=0.1;
x:=x+x2;
repeat
1
x2:=x2/10;
x:=x+x2;
y:=x+x2;
x2:=x2/10;
i:=i+1;
y:=x+x2;
writeln(x,' ',y,' i=',i);
i:=i+1;
until (x=y);
writeln(x,' ',y,' i=',i);
writeln ('La máxima precisión es :', i−1, . 'dígitos.');
until (x=y);
end.
writeln ('La máxima precisión es :', i−1, . ' dígitos.');
end.
1.3.− Escribe un algoritmo que calcule el producto de dos matrices. Calcula la complejidad temporal
del algoritmo a priori y realiza unas pruebas de tiempo a posteriori.
Los conceptos de coste y complejidad temporal de un algoritmo se han estudiado en un problema matemático
como es la multiplicación de dos matrices. Dicha complejidad se puede estudiar a priori, analizando el numero
de pasos, funciones y procedimientos recursivos del programa, y a posteriori, analizando el tiempo que tarda
el programa en resolver varios casos distintos.
Estudiando el algoritmo empleado a priori se han obtenido los siguientes resultados:
El algoritmo incluye tres bucles de repetición enlazados uno dentro de otro, todos ellos desde 1 hasta n, luego
el coste de multiplicar cualquier matriz será:
bucle 1: 1n
bucle 2: 1n
bucle 3: 1n
coste(mult) = n*n*n = n3 O(n3)
Por lo tanto a medida que aumente el orden de la matriz de manera lineal, el coste de su multiplicación
aumentará de forma cúbica.
Analogamente, estudiando los tiempos obtenidos con el programa, para los casos de matrices cuadradas de
orden 5, 10, 15, 20, 25, 30, 35, 40, 45 y 50, representados en una gráfica, se ha visto que efectivamente se
cumplen los resultados obtenidos a priori, es decir, a medida que aumenta el rango de las matrices
multiplicadas, el coste temporal del programa aumenta de manera cúbica.
2
Descargar