You are on page 1of 5

Informe: Algoritmo Gram Schmidt

Janeth Alpala

Codigo:
2110111173

Licenciatura en Matematicas

Algebra Lineal Numerica

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

Algoritmo- Gram Schmidt Cl


asico (GSC)
function Q=GSC(A)
[m,n]=size(A);
R = zeros(m,n);
Q = A;
for j=1:n
R(1:j-1,j) = Q(:,1:j-1)*Q(:,j);
Q(:,j) = Q(:,j)-Q(:,1:j-1)*R(1:j-1,j);
R(j,j) = norm(Q(:,j));
Q(:,j) = Q(:,j)/R(j,j);
end
fprintf( norm|Q*Q-I| = %2.4e\n,norm(Q*Q-eye(n)))
end

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

Algoritmo- Gram Schmidt Modificado (GSM)


function Q=GSM(A)
[m,n]=size(A);
Q = A;
R = zeros(n,n);
for j=1:n,
for i=1:j-1,
R(i,j) = Q(:,i)*Q(:,j);
Q(:,j) = Q(:,j)-Q(:,i)*R(i,j);
end
R(j,j) = norm(Q(:,j));
Q(:,j) = Q(:,j)/R(j,j);
end
fprintf( norm|Q*Q-I| = %2.4e\n,norm(Q*Q-eye(n)))
end
Ejemplos
Los algoritmos clasico y modificado de Gram-Schmidt son identicos para matrices
de dos columnas.

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

En el siguiente ejemplo se determina una base ortonormal para el subespacio de <4


que consiste en los vectores de la forma (a, b, c, d) tales que a 2c + d = 0.
Donde una base para el subespacio de <4 es = {(1, 1, 0, 0), (2, 0, 1, 0), (1, 0, 0, 1)} .
Por lo tanto A es una matriz de tama
no 4 3, con columnas linealmente independientes, donde al aplicar el algoritmo de Gram-Schmidt clasico y modificado se
obtiene una matriz Q de columnas ortonormales.
A=[1 2 -1;1 0 0;0 1 0;0 0 1]
A =
1
1
0
0

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

elementos de la matriz QT Q I son casi cero. O equivalentemente.


T

Q Q I 0
Tomemos
a1 = (1, 1, 1, 1), a2 = (1, 1, 1, 1), a3 = (1, 1, 1, 1).
Donde los vectores a1 , a2 , a3 son linealmente independientes. Vamos a encontrar una
base ortonormal mediante los dos algoritmos.
>> B =
1
1
1
1

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

You might also like