Está en la página 1de 15

Computación Científica

Rubén Agapito

Verano 2017
b
Índice general

i
ii
Prefacio

Los contenidos de estos apuntes de clase están bajo constante supervisión. Si existe alguna sugeren-
cia o error, por favor mandar un correo electrónico al autor: ruben.agapito@pucp.edu.pe

Rubén Agapito
San Miguel, febrero de 2017
Lima, Perú.

iii
iv Prefacio
Problemas de Algebra Lineal
1
Sección 1.1

Entrada de Matrices Especiales

1.1.1 Entradas de Matrices Numéricas


I. Matrices de ceros, unos y matriz identidad
Se utiliza el comando zeros() para crear una matriz de ceros, ones() para crear una matriz de unos
y eye() para crear una matriz identidad, según la siguiente sintaxis:

A = zeros(n), B = ones(n), C = eye(n) % matrices cuadradas n x n


A = zeros(m,n), B = ones(m,n); C = eye(m,n) % matrices m x n
A = zeros(size(B)) % con el mismo tamaño de B

Ejemplo 1

Genere una matriz de ceros A de tamaño 3 × 8, y una matriz identidad extendida B del mismo
tamaño de A.

Las funciones zeros() y ones() también pueden ser usados para definir arreglos multidimensio-
nales. Por ejemplo, zeros(3,4,5) nos da un arreglo de ceros de tamaño 3 × 4 × 5.

II. Matrices Aleatorias de Números Reales


Si todos los elementos en una matriz satisfacen una distribución uniforme en el intervalo ]0, 1[,
podemos construir este tipo de matriz con la siguiente sintaxis

A = rand(n) % genera una matriz aleatoria n x n, distribuida uniformemente


A = rand(m,n) % genera una matriz aleatoria m x n

La función rand() también puede usarse para definir arreglos aleatorios multidimensionales. La
sentencia B = rand(size(A)) puede usarse para declarar una matriz aleatoria B del mismo tamaño
de A.
Si deseamos una distribución uniforme de números aleatorios en el intervalo ]a, b[, primero ge-
neramos una matriz aleatoria en ]0, 1[ y luego en el intervalo pedido:

1
2 Problemas de Algebra Lineal

V = rand (m ,n ) ;
V1 = a + (b - a ) * V % matriz seudoaleatoria pedida

La función randn() se usa para definir matrices aleatorias con distribución normal estándar (me-
dia cero y varianza uno). En caso deseemos una matriz aleatoria con media µ y varianza σ2 , esto es,
una distribución N(µ, σ2 ), hacemos algo similar al caso anterior

V = randn (m , n ) ; % matriz m x n con distribuci ó n normal N (0 ,1)


V1 = µ + σ * V % matriz pedida con distribuci ó n N ( mu , sigma ^2)

III. Matrices Diagonales


La descripción matemática de una matriz diagonal es
 
α1
α2
 
diag(α1 , α2 , . . . , αn ) = 
 
,
..
.
 
 
αn

donde todos los elementos que no están en la diagonal principal son cero. En M ATLAB, la función
diag() es usada para tratar con problemas que estén relacionados a construir (o extraer) matrices
diagonales. La sintaxis es

A = diag(v) % construir una matriz a partir de un vector fila o columna v


v = diag(A,k) % extraer la diagonal k-ésima de una matriz dada A
A = diag(v,k) % construir una matriz con diagonal k-ésima v

Ejemplo 2

Ilustramos el uso de la función diag()

v = [1 2 3]; A = diag ( v ) , v1 = diag ( A )


B = diag (v ,2) , C = diag (v , -1)

La siguiente sentencia construye una matriz tridiagonal

A = diag ([1 2 3 4]) + diag ([2 3 4] ,1) + diag ([5 4 3] , -1)

Supongamos que tenemos matrices de diferentes tamaños A 1 , A 2 , . . . , A n . El comando blkdiag()


es usado para generar una matriz diagonal por bloques

A = blkdiag( A 1 , A 2 ,..., A n )

IV. Matrices de Hankel


Una matriz de Hankel es un arreglo rectangular donde todos los elementos en cada anti-diagonal
son los mismos. En M ATLAB la matriz de Hankel basada en dos vectores c y r puede ser construida
por H = hankel(c,r). El vector c es asignado a la primera columna de H y el vector r a la última fila,
teniendo en cuenta que la última entrada de c coincida con la primera entrada de r.
1.1. ENTRADA DE MATRICES ESPECIALES 3

Si solo un vector c es especificado, el comando H = hankel(c) nos da una matriz triangular de


Hankel anti-supeior.

Ejemplo 3

Construya en M ATLAB las siguientes matrices de Hankel


   
1 2 3 4 5 6 7 1 2 3
H1 = 2 3 4 5 6 7 8 , H2 = 2 3 0 .
   
3 4 5 6 7 8 9 3 0 0

V. Matrices de Hilbert y sus inversas

Una matriz de Hilbert es un caso particular de una matriz de Hankel cuadrada, en donde la entrada
(i, j) está definida por A(i, j) = 1/(i + j − 1). La sintaxis para generarla en M ATLAB es A = hilb(n).
Se sabe que matrices de Hilbert grandes son mal condicionadas. Por ende, problemas de redondeo
pueden ocurrir al invertir tal matriz. Felizmente, en M ATLAB existe la función invhilb() que nos
permite calcular exactamente la inversa de una matriz de Hilbert de tamaño n × n, H=invhilb(n).
Como las matrices de Hilbert están muy cercanas a matrices singulares, debemos ser muy cuida-
dosos al manipular estas matrices. Se sugiere que se use cálculo simbólico para tal fin. Si un método
numérico es utilizado, no debemos olvidarnos de validar los resultados.

VI. Matrices de Vandermonde

Para un vector fila c = [c 1 , c 2 , . . . , c n ], una matriz de Vandermonde n × n es tal que su entrada (i, j)
n− j
satisface V (i, j) = c i , i, j = 1, 2, . . . , n

c 1n−1 c 1n−2
 
··· c1 1
 
 c n−1 c 2n−2 ··· c2 1
 2 
 . .. .. .. .. 
 ..
V = . . . .

 n−1
c nn−2 
 c n−1 −1 ··· c n−1 1
 
c nn−1 c nn−2 ··· cn 1

La sintaxis V=vander(c) construye una matriz de Vandermonde a partir de un vector fila c.

Ejemplo 4

Construya la siguiente matriz de Vandermonde


 
1 1 1 1 1

 16 8 4 2 1 

A= 81 27 9 3 1 .
 
 
 256 64 16 4 1 
625 125 25 5 1
4 Problemas de Algebra Lineal

Sección 1.2

El Método de Factorización LU

Sea A ∈ Rn×n . Asumamos que existen dos matrices L y U, triangular inferior y triangular superior,
respectivamente, tales que
A = LU.
Llamaremos a esta descomposición una factorización LU de A. Si A es no singular, entonces L y U
también lo deben ser. Más aún, sus elementos en la diagonal principal deben ser diferentes de cero.
Para resolver A~x = ~
b, si tenemos una descomposición LU de A, basta ahora resolver dos sistemas
triangulares
L~y = ~
b, U~x = ~y.
Ambos sistemas son fáciles de resolver. El primero necesita un algoritmo de sustitución hacia ade-
lante
1
y1 = b1 ,
l 11
à !
1 iX−1
yi = bi − l i j yj , i = 2, . . . , n.
l ii j =1

El número total de operaciones (entre sumas, productos y divisiones) es n2 . El segundo sistema es


resuelto por un algoritmo de sustitución hacia atrás

1
xn = yn ,
u nn
à !
1 Xn
xi = yi − ui j x j , i = n − 1, . . . , 1.
u ii j = i +1

Este algoritmo también requiere n2 operaciones punto flotante.


Se obtiene una única descomposición LU si obligamos a que todos los elementos en la diagonal
de L sean 1.
Observar que por medio de una factorización LU, uno puede calcular el determinante de A, con
un costo computacional de O (n3 ), dado que
n
Y
det(A) = det(L) det(U) = u kk .
k=1

La siguiente función implementa la factorización LU (sin pivoteo)

Programa 1.1: Función lugauss.m


1 function A = lugauss ( A )
2 %LUGAUSS factorizacion LU sin pivoteo
3 % A = LUGAUSS ( A ) almacena una matriz triangular superior
4 % en la parte triangular superior de A y una matriz
5 % triangular inferior en la parte estrictamente inferior
6 % de A ( los elementos en la diagonal de L son 1) .
7 [n , m ]= size (A ) ;
8 if n ~= m
9 error ( 'A no es una matriz cuadrada ')
10 else
1.2. EL MÉTODO DE FACTORIZACIÓN LU 5

11 for k = 1: n -1
12 for i = k +1: n
13 A (i , k ) = A (i , k ) / A (k , k ) ;
14 if A (k , k ) == 0
15 error ( ' elemento diagonal nulo ')
16 end
17 j = k +1: n ;
18 A (i , j ) = A (i , j ) - A (i , k ) * A (k , j ) ;
19 end
20 end
21 end
22 end

Después de ejecutado el programa, los dos factores pueden ser obtenidos, si fuese necesario, así

>> L = eye(n) + tril(A,-1)


>> U = triu(A)

donde n está relacionado al tamaño de A.

Ejemplo 5

Resuelva el sistema lineal A~x = ~


b, donde
   
−0.370 0.050 0.050 0.070 −2
 0.050 −0.116 0 0.050 0
~
 
A= , b=
   
 0.050 0 −0.116 0.050 0

 
0.070 0.050 0.050 −0.202 0

Use factorización LU y luego aplique sustitución adelante y hacia atrás.


Solución. El siguiente código usa la función lugauss.

clc
A = [ -0.37 0.05 0.05 0.07;
0.05 -0.116 0 0.05;
0.05 0 -0.116 0.05;
0.07 0.05 0.05 -0.202];
b = [ -2 0 0 0] ';
%z = A \ b
y = zeros ( size ( b ) ) ; x = y ; %inicializaciones
A = lugauss ( A ) ; % factorizacion LU sin pivoteo
% sustitucion hacia adelante
y (1) = b (1) ;
for i = 2:4
y ( i ) = b ( i ) -A (i ,1: i -1) * y (1: i -1) ;
end
% sustitucion hacia atras
x (4) = y (4) / A (4 ,4) ;
for i = 3: -1:1
x ( i ) = ( y ( i ) -A (i , i +1:4) * x ( i +1:4) ) / A (i , i ) ;
end
x
6 Problemas de Algebra Lineal

Obtenemos la solución x = [8.1172, 5.9893, 5.9893, 5.7779]T , la cual es la misma si usamos el ope-
rador backslash: A\b.

Ejemplo 6

Deseamos resolver A~x = ~


b, donde
   
1 1−ε 3 5− e
A = 2

2 2 ,
 ~
b =  6 ,
 
con ε ∈ R.
3 6 4 13

Muestre en M ATLAB que la solución exacta es ~x = [1, 1, 1]T (independientemente del valor de ε).
Si ε = 1, obtenga la factorización LU de A. Si ε = 0, ¿es posible, a pesar del hecho que A sea no
singular, encontrar una factorización LU (sin pivoteo parcial) de A?
Solución. Digitamos

syms e
A = [1 1 - e 3; 2 2 2; 3 6 4];
b = [5 - e ; 6; 13];
% solucion exacta
x = A\b
C = lugauss ( A ) % factorizaci ó n LU

Se obtiene la factorización

>> L = eye(3) + tril(C,-1)


L =

[ 1, 0, 0]
[ 2, 1, 0]
[ 3, (3*e + 3)/(2*e), 1]

>> U = triu(C)
U =

[ 1, 1 - e, 3]
[ 0, 2*e, -4]
[ 0, 0, (2*(3*e + 3))/e - 5]

Apreciamos que si ε = 0, no hay factorización LU (sin pivoteo) para A.

P ROPOSICIÓN 1.1. Para una matriz dada A ∈ Rn×n , su factorización LU existe y es única ⇔
las submatrices principales A i de A de orden i = 1, . . . , n − 1 (esto es, aquellas que se obtienen al
restringir A a sus primeras i filas y columnas) son nosingulares. Este resultado también es válido
para cualquier A ∈ C n×n .

En el ejemplo anterior, observar que cuando ε = 0, la segunda submatriz principal A 2 de la matriz


A es singular.
Podemos identificar algunos tipos especiales de matrices para los que las hipótesis de la proposi-
ción anterior se cumplen. En particular, mencionamos:
1.2. EL MÉTODO DE FACTORIZACIÓN LU 7

1. Matrices estrictamente diagonalmente dominantes. Una matriz es diagonalmente domi-


nante por filas si
n ¯
X ¯
|a ii | ≥ ¯a i j ¯, i = 1, . . . , n.
j =1
j 6= i

Diagonalmente dominante por columnas si


n ¯
X ¯
|a ii | ≥ ¯a i j ¯ j = 1, . . . , n.
i =1
i 6= j

Si reemplazamos en las desigualdades anteriores ≥ por >, decimos que la matriz A es estricta-
mente diagonalmente dominante (por filas o por columnas, respectivamente). Esta definición
también es válida para cualquier matriz A ∈ Cn×n .

2. Matrices simétricas reales y positivo definidas.

3. Matrices positivo definidas complejas.


8 Problemas de Algebra Lineal
Bibliografía

[1] D Xue, Y Chen, Scientific Computing with MATLAB, CRC Press, Taylor & Francis Group, Flori-
da, 2da Ed, 2016. Disponible en biblioteca.

También podría gustarte