Vous êtes sur la page 1sur 3

Pr actica de MATLAB n umero 4 Algebra lineal.

Curso 2010-11
1. M etodo de Gram-Schmidt cl asico
Vamos a implementar en MATLAB el algoritmo de Gram-Schmidt cl asico tal y como se ha visto en clase, con la u nica salvedad de ir normalizando los vectores ortogonales seg un se van obteniendo para minimizar en lo posible las operaciones. M as concretamente, dada una matriz A = [a1 . . . an ] con columnas linealmente independientes, encontraremos una base ortonormal de dicho espacio columna, que almacenaremos por columnas en la matriz Q = [q1 . . . qn ]. Los coecientes necesarios para realizar dicha ortonormalizaci on se almacenar an en la matriz R, de manera que r11 = a1 , y para k = 2, . . . , n, qk = q k /rkk , donde rjk =< ak , qj >, j = 1, . . . , k 1, rkk = q k . Ejercicio 1. Implementa con dos bucles FOR dicho programa, que denominaremos function [q r]=gramsc(a). Ejercicio 2. Ejecuta el programa anterior con la matriz
.

q1 = a1 /r11 ,

con

q k = ak

k 1 j =1

rjk qj ,

A=

2 3 1 1 2 1 2 2

1 1 4 1

Escribe en la ventana de comandos >> q r >> q q eye(3) para comprobar que el algoritmo est a bien implementado. 1

Notemos que, para la implementaci on, no es necesario introducir una nueva variable Q sino que se puede aprovechar Q para ir metiendo los valores . Por otro lado, se puede realizar la implementaci que corresponder an a Q on con s olo un bucle FOR para k, realizando el resto de operaciones de forma matricial, con la facilidad que ofrece MATLAB de referirse a distintas las o columnas de la matriz con :. Por ejemplo, la matriz formada por las primeras k 1 columnas de A ser a A(:, 1 : k 1). El algoritmo quedar a as escrito: function [q,r]=gramscb(a) [m n]=size(a); r=zeros(n); q=zeros(m,n); r(1,1)=norm(a(:,1)); q(:,1)=a(:,1)/r(1,1); for k=2:n r(1:k-1,k)=q(:,1:k-1)*a(:,k); q(:,k)=a(:,k)-q(:,1:k-1)*r(1:k-1,k); r(k,k)=norm(q(:,k)); q(:,k)=q(:,k)/r(k,k); end Ejercicio 3. Vuelve a repetir el ejercicio 2 con este programa.

2. M etodo de Gram-Schmidt modicado


En el algoritmo de Gram-Schmidt modicado se hacen en otro orden las operaciones para obtener las columnas ortonormales, de manera que si la aritm etica fuera exacta, los dos algoritmos dar an el mismo resultado. Con este algoritmo, vamos haciendo paso a paso todos los vectores que vamos obteniendo (y que engendran el espacio columna de A), primero ortogonales al primer vector de la base ortonormal, luego al segundo, etc. Escribiremos pues un programa function [q r]=gramsm(a) que implemente lo siguiente: Para j = 1, . . . , n, rjj = aj , Para k = j + 1, . . . , n, rjk =< ak , aj >, ak := ak rjk aj . 2 aj := aj /rjj ,

Notemos que ahora estar amos sobreescribiendo sobre A las columnas que vamos haciendo ortonormales, con lo cual al nal Q ser a la A del programa. De nuevo, en el programa bastar a utilizar un u nico bucle FOR, correspondiente ahora al ndice j . El programa queda como sigue: function [q,r]=gramsm(a) [m n]=size(a); for j=1:n r(j,j)=norm(a(:,j)); a(:,j)=a(:,j)/r(j,j); r(j,j+1:n)=a(:,j)*a(:,j+1:n); a(:,j+1:n)=a(:,j+1:n)-a(:,j)*r(j,j+1:n); end q=a; Ejercicio 4. Realiza las mismas comprobaciones que en el ejercicio 3 con el nuevo algoritmo. Despu es haz las mismas comprobaciones con uno y otro algoritmo utilizando la matriz

A=

1 0 0

1 0 0

1 0 0

= 109 .

Como ver as, el algoritmo modicado es m as estable cuando las columnas de A est an cerca de ser linealmente dependientes.

Vous aimerez peut-être aussi