Algoritmo
1) Dados n, a, b
1
2) Calcular x1 = (b1)
a1,1
3) Para i=2,3,…, n
1
4) Calcular xi = (bi - ai,1x1 - ai,2x2 - . . . - ai,i-1xi-1)
ai,i
5) fin
6) El vector x contendrá la solución exacta
Este algoritmo es un caso particular del problema general: solución de un sistema de ecuaciones
lineales. Los métodos numéricos normalmente se desarrollan para resolver una clase o tipo
general de problemas
15
El nombre para la función será triangular. La función recibirá como datos la matriz de
coeficientes a y el vector de constantes b y producirá como resultado el vector solución x
function x = triangular(a, b)
n = length(b);
x(1) = b(1)/a(1,1);
for i = 2: n
s = 0;
for j = 1: i-1
s = s + a(i,j)*x(j);
end
x(i) = (b(i) - s)/a(i,i);
end
Ejemplo. Escribir los comandos para resolver el siguiente problema usando la función anterior
3x1 =2
7x1 + 5x2 =3
8x1 + 2x2 + 9x3 = 6
Ventana de
comandos
Ventana de
Ingreso de edición
comandos
Escribir y
almacenar la
Resultados
función
obtenidos
16
Sea n el tamaño del problema, y T(n) la eficiencia del algoritmo (cantidad de operaciones
aritméticas requeridas). Para obtener T(n) se pueden realizar pruebas en el computador con
diferentes valores de n registrando el tiempo de ejecución. Siendo este tiempo proporcional a la
cantidad de operaciones aritméticas que se realizaron, se puede estimar la función T(n).
Esta forma experimental para determinar T(n) tiene el inconveniente que requiere la
instrumentación computacional del algoritmo para realizar las pruebas. Es preferible conocer la
eficiencia del algoritmo antes de invertir esfuerzo en la programación computacional.
Para determinar T(n) se puede analizar la formulación matemática del método numérico o la
estructura del algoritmo.
Ejemplo. El siguiente algoritmo calcula la suma de los cubos de los primeros n números
naturales. Encontrar T(n)
fin
...
La suma está dentro de una repetición que se realiza n veces, por lo tanto,
T(n) = n
Ejemplo. El siguiente algoritmo suma los elementos de una matriz cuadrada a de orden n.
Encontrar T(n)
Ejemplo. El siguiente algoritmo es una modificación del anterior. Suponga que se desea sumar
únicamente los elementos de la sub-matriz triangular superior. Obtener T(n)
...
s←0
Para i=1, 2, ..., n
Para j=i, i+1, ..., n
s ← s + ai, j
fin
fin
...
2.2.2 La notación O( )
Supongamos que para resolver un problema se han diseñado dos algoritmos: A y B, con
2
eficiencias TA(n) = 10n+2, TB(n) = 2n + 3, respectivamente. ¿Cual algoritmo es más eficiente?.
Para valores pequeños de n, TB(n) < TA(n), pero para valores grandes de n, TA(n) < TB(n). Es
de interés práctico determinar la eficiencia de los algoritmos para valores grandes de n. Por lo
tanto el algoritmo A es más eficiente que el algoritmo B como se puede observar en el gráfico:
Si T(n) incluye términos con n que tienen diferente orden, es suficiente considerar el término de
mayor orden pues es el que determina la eficiencia del algoritmo cuando n es grande. No es
necesario incluir los coeficientes y las constantes.
18
2
Ejemplo. Suponga T(n) = n + n + 10. Evaluar T para algunos valores de n
T(2) = 4 + 2 + 10
T(5) = 25 + 5 + 10
T(20) = 400 + 20 + 10
T(100) = 10000 + 100 + 10
2
Se observa que a medida que n crece, T depende principalmente de n . Este hecho se puede
expresar usando la notación O( ) la cual indica el “orden” de la eficiencia del algoritmo, y se
2 2
puede escribir: T(n) = O(n ) lo cual significa que la eficiencia es proporcional a n , y se dice que
el algoritmo tiene eficiencia cuadrática o de segundo orden.
Es de interés medir la eficiencia de los algoritmos para problemas de tamaño grande, pues para
estos valores de n se debe conocer la eficiencia. En el siguiente cuadro se ha tabulado T(n) con
algunos valores de n y para algunas funciones típicas g(n).
Tabulación de T(n) con algunos valores de n para algunas funciones típicas g(n)
2 3 n
n [log(n)] n [n log(n)] n n 2 n!
1 0 1 0 1 1 2 1
3 1 3 3 9 27 8 6
5 1 5 8 25 125 32 120
7 1 7 13 49 343 128 5040
5
9 2 9 19 81 729 512 3.62x10
7
11 2 11 26 121 1331 2048 3.99x10
9
13 2 13 33 169 2197 8192 6.22x10
12
15 2 15 40 225 3375 32768 1.30x10
5 14
17 2 17 48 289 4913 1.31x10 3.55x10
5 17
19 2 19 55 361 6859 5.24x10 1.21x10
6 19
21 3 21 63 441 9261 2.09x10 5.10x10
6 22
23 3 23 72 529 12167 8.38x10 2.58x10
7 25
25 3 25 80 625 15625 3.35x10 1.55x10
15 64
50 3 50 195 2500 125000 1.12x10 3.04x10
30 157
100 4 100 460 10000 1000000 1.26x10 9.33x10
Los algoritmos en las dos últimas columnas son de tipo exponencial y factorial
respectivamente. Se puede observar que aún con valores relativamente pequeños de n el valor
de T(n) es extremadamente alto. Los algoritmos con este tipo de eficiencia se denominan no-
factibles pues ningún computador actual pudiera calcular la solución en un tiempo aceptable
para valores de n grandes
La mayoría de los algoritmos que corresponden a los métodos numéricos son de tipo polinomial
2 3
con g(n) = n, n , n .
19
Ejemplo. Suponga que un dispositivo puede almacenar únicamente los cuatro primeros dígitos
decimales de cada número real y trunca los restantes (esto se llama redondeo inferior).
Se requiere almacenar el número:
X = 536.78
Primero expresemos el número en forma normalizada, es decir sin enteros y ajustando su
magnitud con potencias de 10:
3
X = 0.53678x10
Ahora descomponemos el número en dos partes
3 3
X = 0.5367x10 + 0.00008x10
El valor almacenado es un valor aproximado
3
X = 0.5367x10
El error de redondeo por la limitación del dispositivo de almacenamiento es
3 3-4 -1
R = 0.00008x10 = 0.8x10 = 0.8x10
En general, si n es la cantidad de enteros del número normalizado con potencias de 10, y m es
la cantidad de cifras decimales que se pueden almacenar en el dispositivo, entonces si se
truncan los decimales sin ajustar la cifra anterior, el error de redondeo absoluto está acotado por:
| R |< 1 ∗ 10n−m
Mientras que el error relativo:
max(| R X |) 1 ∗ 10n−m
| r |< = 10 ∗ 10− m
= (Solo depende del almacenamiento)
min(| R |) 0.1 ∗ 10n
20
En los métodos directos debe considerarse el error en las operaciones aritméticas cuando la
cantidad de cálculos requeridos es significativo
La magnitud del error de redondeo en la multiplicación puede ser tan grande como la suma de
los errores de redondeo de los operandos ponderada por cada uno de sus respectivos valores.
En general, si los valores de los operandos tienen ambos el mismo signo, se puede concluir que
la operación aritmética de multiplicación puede propagar más error de redondeo que la suma.
Adicionalmente, si el resultado de cada operación aritmética debe almacenarse hay que agregar
el error de redondeo r debido a la limitación del dispositivo de almacenamiento.
21
S = X + Y + Z, con X>Y>Z
S = (X + Y) + Z
X Y
eX + Y = eX + e Y + r1 = r1 r1: error de redondeo al almacenar la suma
X+Y X+Y
(2X + 2Y + Z)10 ∗ 10 − m
| e(X + Y)+ Z |<
X+Y+Z
Se puede concluir que la suma de números debe realizarse comenzando con los números de
menor magnitud
El aumento en la cota del error en el resultado es muy significativo con respecto a los operandos.
Se concluye que se debe evitar restar números cuya magnitud sea muy cercana.
Adicionalmente habría que aumentar el efecto del error de redondeo r al almacenar el resultado.
22
2.2.7 Ejercicios
1. Suponga que tiene tres algoritmos: A, B, C con eficiencia respectivamente:
TA(n) = 5n + 50
TB(n) = 10n ln(n) + 5
2
TC(n) = 3n + 1