Sunteți pe pagina 1din 4

Universidad Nacional

Autónoma de Honduras
Valle de Sula

Álgebra Lineal Numérica

MM-423

Tarea de Laboratorio # 5

Walter Josué Fuentes

Catedrático:
Dr. Fredy Vides

2 de agosto de 2020
1. Ejercicio 9
Aplicar HouseFactor.m o una versión más eficiente desarrollada por usted, para desarrollar
un programa Octave que permita calcular la descomposición QR de una matriz X ∈ Rmxn con
columnas linealmente independientes.

Para la obtención de la factorización QR, se realizaron tres funciones en octave para generar
las matrices deseadas.

Hallamos un vector u que define la matriz Householder y un valor constante σ, esto con el
programa house1.m.
%=========================================================================
% Crea ceros en un vector usando una matriz Householder
% Define la matriz Householder H y un valor sigma tal que
% Hx = [ sigma , 0 , .... , 0] ’.
%==========================================================================

function [u , sigma ] = house1 ( x )


[m , n ] = size ( x ) ;
mm = max ( abs ( x ) ) ;
x = x / mm ;
s = sign ( x (1) ) ;
if s == 0
s = 1;
end ;
sigma = s * norm (x ,2) ;
u = x + sigma * eye (m ,1) ;
sigma = - mm * sigma ;
end

Suponemos que el valor de aii es igual a σ.


Hacemos uso luego del programa house2.m, para calcular el producto de AH:
%=========================================================================
% Calculo de AH , donde H es una matriz Householder generada por un vector
u.
%La matrix resultante A contiene el producto AH .
%==========================================================================

function A = house2 (A , u )
[ m1 , n ] = size ( A ) ;
beta = 2/( u ’* u ) ;
for i = 1 : m1
m = 0;
m = m + u (1: n ) * A (i ,1: n ) ;
m = beta * m ;
A (i ,1: n ) = A (i ,1: n ) - ( m * u (1: n ) ) ’;
end ;
end
El programa principal para la factorización QR se muestra a continuación, en el cual se
obtiene la matriz ortogonal Q y la matriz triangular superior R.
%===========================================================================

% Algortimo QR mediante matrices Householder


% Q es un matriz ortogonal
% R es una matriz triangular superior de la misma dimension que A
%============================================================================

function [Q ,R , t ] = QRhouse ( A )
tic () ;
[m , n ] = size ( A ) ;
S = min (n ,m -1) ;
Q = eye (m , m ) ;
for k = 1 : S
[x , sigma ] = house1 ( A ( k :m , k ) ) ;
Q (1: m , k : m ) = house2 ( Q (1: m , k : m ) ,x ) ;
A (k , k ) = sigma ;
n1 = size ( x ) ;
A ( k +1: m , k ) = x (2: n1 ) ;
v ( k ) = x (1) ;
beta = 2/( x ’* x ) ;
for j = k +1: n
r = 0;
r = r + x (1: m - k +1) ’ * A ( k :m , j ) ;
r = beta * r ;
A ( k :m , j ) = A ( k :m , j ) - r * x (1: m - k +1) ;
end ;
end ;
R = triu ( A ) ;
t = toc () ;
end
Al ejecutar el programa, la ventana de comandos muestra en pantalla:

Figura 1: Ejemplo de factorización QR, se verifica que A = QR

Se puede ver, que los eigenvalores de la matriz, coinciden con los obtenidos de la matriz obtenida
por el producto de RQ. Se muestra la diferencia entre los valores obtenidos con el comando eig()
para la matriz A y para la construcción de A, a través del producto RQ.

Figura 2: Eigenvalores obtenidos

S-ar putea să vă placă și