Computación numérica

Pascal. Cifras Significativas. Matrices. Complejidad Temporal. Regla de Crámer. Términos del desarrollo. Errores Absolutos y Relativos. Polinomio

  • Enviado por: Miguel Lopez
  • Idioma: castellano
  • País: España España
  • 10 páginas
publicidad

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);

uses WinCrt;

var

i :Integer;

x, x2, y : Real;

begin

x:=0;

i:=1;

x2:=0.1;

repeat

x:=x+x2;

x2:=x2/10;

y:=x+x2;

i:=i+1;

writeln(x,' ',y,' i=',i);

until (x=y);

writeln ('La máxima precisión es :', i-1, . 'dígitos.');

end.

program ej1bpr1 (input, output);

{$N+}

uses WinCrt;

var

i : Integer;

x, x2, y : Double;

begin

x:=1;

i:=1;

x2:=0.1;

repeat

x:=x+x2;

x2:=x2/10;

y:=x+x2;

i:=i+1;

writeln(x,' ',y,' i=',i);

until (x=y);

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.