Professional Documents
Culture Documents
Janeth Alpala
Codigo:
2110111173
Licenciatura en Matematicas
M
etodo de Gram-Schmidt. El proceso para ortogonalizar un conjunto de vectores es
conocido como el proceso de Gram-Schmidt. Este metodo comienza con n vectores independientes a1 , . . . , an , que son las columnas de A, donde A Rmn , con m > n,luego este
produce n vectores ortogonales q1 , . . . , qn que son las columnas de Q.
Pero el objetivo de este informe es comparar dos algoritmo de Gram-Schmidt implementados en Matlab, denominados Gram-Schmidt clasico (GSC) y Gram-Schmidt modificado
(GSM).
M
etodo de Gram-Schmidt cl
asico
El metodo de Gram-Schmidt clasico puede resultar numericamente inestable pudiendo
incurrirse en errores de cancelacion importantes si algunos de los vectors columna xj esta
proximo al subespacio
Pj1 generado por los vectores e1 , . . . , ej1 . En este caso los componentes
nos y su error relativo grande,
del vector xj i=1 hxj , ei i ei pueden llegar a ser muy peque
por lo que al dividirlo por su norma, se amplificaran errores, propagandose al resto de los
calculos desfavorablemente.
A continuacion se muestra la primera funcion de MATLAB con el algoritmo GSC
M
etodo de Gram-Schmidt modificado
Para solventar los problemas que se presentan en el metodo clasico se ha desarrollado
el metodo de Gram-Schmidt modificado que en realidad resulta del clasico al reordenar
determinados calculos. La diferencia esta en que en vez de sustraer del vector xk sus componentes sobre los k 1 vectores ei calculados en las etapas anteriores, el vector ek , que al
principio de la etapa k se hace igual a xk , se descompone paso a paso en cada uno de los
vectores ei , reactualizandose pues su valor k 1 veces una vez sustrado su componente
en cada ei .
Escribiremos entonces la segunda funcion de MATLAB con el algoritmo de GSM
B =
0.7000
0.7000
0.7071
0.7071
Q = GSM(B)
norm|Q*Q-I| = 2.3014e-11
Q =
0.7071
0.7071
2
0.7071
-0.7071
Q = GSC(B)
norm|Q*Q-I| = 2.3014e-11
Q =
0.7071
0.7071
0.7071
-0.7071
2
0
1
0
-1
0
0
1
Q = GSM(A)
norm|Q*Q-I| = 3.5544e-16
Q =
0.7071
0.7071
0
0
0.5774
-0.5774
0.5774
0
-0.1543
0.1543
0.3086
0.9258
Q = GSC(A)
norm|Q*Q-I| = 4.8827e-16
Q =
0.7071
0.7071
0
0
0.5774
-0.5774
0.5774
0
-0.1543
0.1543
0.3086
0.9258
Apartir del anterior ejemplo podemos ver que el algoritmo GSM es mas efectivo
puesto que si las columnas de Q son ortonormales entonces QT Q es I; es decir, los
3
1
-1
-1
-1
1
1
1
-1
>> Q=GSC(B)
norm|Q*Q-I| = 2.4194e-16
Q =
0.5000
0.5000
0.5000
0.5000
0.8660
-0.2887
-0.2887
-0.2887
0
0.4082
0.4082
-0.8165
>>Q=GSM(B)
norm|Q*Q-I| = 2.6049e-16
Q =
0.5000
0.5000
0.5000
0.5000
0.8660
-0.2887
-0.2887
-0.2887
-0.0000
0.4082
0.4082
-0.8165
Donde la norma implementada en los algoritmos nos muestra que para este caso
el algoritmo de Gram-Schmidt clasico es un poco mas efectico con una minima
diferencia.
N
umero de operaciones
Al igual que con el algoritmo LU, para el algoritmo de Gram-Schmidt calcularemos su
coste operacional; es decir, una estimacion del n
umero de flops (floating point operations)
que conlleva la implementacion practica del mismo.
4
Recordemos que el n
umero de flops es un polinomio en el tama
no de la matriz y que de
este polinomio solo se suele destacar el terrmino de grado mayor dado que el resto son
poco significativos salvo que n y m sean peque
nos.
Para ambos algoritmos de GramSchmidt tenemos el siguiente resultado:
Cuando m y n son grandes, el mayor n
umero de operaciones se encuentran en las dos
siguiente sentencias:
R(i,j) = Q(:,i)*Q(:,j);
Q(:,j) = Q(:,j)-Q(:,i)*R(i,j);
Donde la primera lnea calcula el producto escalar Q(:, i)0 Q(:, j) y requiere m multiplicaciones y m 1 sumas. Y la segunda fila calcula Q(:, j) = Q(:, j) Q(:, i) R(i, j);
precisando m multiplicaciones y n restas. As pues, el trabajo que se hace en cada iteracion es del orden de 4m. Como hay que hacer i = 1 : j 1 iteraciones para j = 1 : n, por
lo tanto el n
umero total de flops es:
j1
n
X
X
j=1
i=1
4m = 4m
n
X
(j 1) = 4m
j=1
n(n 1)
= 2mn2 + O(mn)
2