Sunteți pe pagina 1din 17

...

Métodos numéricos
Derivación e Integración
Autor:
Paúl Medina, Ph.D.

Índice
1. Descomposición en valores singulares DVS 1
1.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2. Valores singulares de una matriz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2.1. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3. Pseudo-inversa de una matriz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3.1. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3.2. Sistemas lineales mal condicionados . . . . . . . . . . . . . . . . . . . . . . . 5
1.4. Aplicaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.4.1. Resolución de sistemas de ecuaciones mal condicionados . . . . . . . . . . . 8
1.4.2. Compresión de imágenes digitales . . . . . . . . . . . . . . . . . . . . . . . . 11
1.5. Bibliografı́a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1. Descomposición en valores singulares DVS
1.1. Introducción
A lo largo del curso se han estudiado diversas factorizaciones de matrices reales; por ejemplo,
que toda matriz simétrica A puede ser factorizada como A = PDPT , donde P es una matriz
ortogonal y D es una matriz diagonal que contiene los autovalores de A. Si A no es simétrica, una
factorización de este tipo no es posible, pero todavı́a es posible factorizar una matriz cuadrada A
como A = PDP−1 , donde D adquiere una forma lo más simple posible y P es una matriz invertible.
Cabe recalcar que para una clase importante de matrices (las matrices diagonalizables), D es una
matriz diagonal que contiene los autovalores de A. Estas dos propiedades sugieren pensar en la
factorización más general posible para toda matriz A (sea simétrica o no, sea cuadrada o no).
Efectivamente, se puede demostrar que todas las matrices admiten una factorización de la forma

A = UΣVT , (1)

donde U y V son matrices ortogonales y Σ es una matriz diagonal o ’prácticamente diagonal’.

1.2. Valores singulares de una matriz


Teorema 1. Para cualquier matriz Am×n , la matriz (AT A)n×n es simétrica y por lo tanto puede
ser diagonalizada ortogonalmente. Los autovalores de (AT A)n×n son todos reales y no negativos, es
decir, mayores o iguales a 0.

Definición 1 (Valores singulares). Para una matriz Am×n , los valores singulares de A son las
raı́ces cuadradas de los autovalores de (AT A)n×n y se denotan mediante σ1 , σ2 , . . . , σn . Es decir, si
λi es un autovalor de (AT A)n×n entonces
p
σi = λi .

Normalmente los valores singulares de Am×n se ordenan de la siguiente forma:

σ1 ≥ σ2 ≥ . . . ≥ σn .

Teorema 2 (Descomposición en valores singulares). Sea Am×n con valores singulares σ1 ≥ σ2 ≥


. . . ≥ σr , σr 6= 0 y σr+1 = σr+2 = . . . = σn = 0. Consideremos, sin pérdida de generalidad, el
caso m > n. Entonces, existe una matriz Um×m ortogonal, una matriz Vn×n ortogonal y una matriz
Σm×n , tal que
A = UΣVT ,

1
donde · ¸
Dr×r Or×(n−r)
Σ= ,
O(m−r)×r O(m−r)×(n−r)
   
σ1 . . . 0 011 . . . 01
 .. . . ..  y O  . .. . 
Dr×r = . . .  p×q =  .. . .. 
0 ... σr 0p1 . . . 0pq
para todo r, p, q ∈ N. Las columnas de la matriz V, vi , se denominan vectores singulares por la
derecha de A, y corresponden a los autovectores normalizados de la matriz simétrica (AT A)n×n .
Las columnas de la matriz U, ui , se denominan vectores singulares por la izquierda de A, y se
pueden calcular mediante la igualdad ui = σ1i Avi para todo σi 6= 0.

1.2.1. Ejemplo
Encontrar la descomposición en valores singulares (DVS) de la siguiente matriz.
· ¸
1 1 0
A=
0 0 1
1. Calculemos los valores singulares. Por la definción 1 para encontrar los valores singulares de
la matriz A, debemos determinar los autovalores de la la matriz AT A.
 
1 1 0
AT A =  1 1 0 
0 0 1

Los autovalores de AT A son

λ1 = 2, λ 2 = 1 y λ3 = 0

y sus autovectores correspondientes son


     
1 0 −1
 1 ,  0 ,  1 .
0 1 0

(¡Verificar!)

2
2. Determinemos la matriz V. Las columnas de la matriz V son los autovectores normalizados
de los autovalores de la matriz AT A.
La matriz V es  
√1 0 − √12
2
V= √1
2
0 √12 
0 1 0

(¡Verificar!)

3. Determinemos la matriz U. Sea vi la columna i de la matriz V y σi el valor singular corre-


spondiente. La columna ui de la matriz U es
1
ui = Avi .
σi
· ¸
1 0
U=
0 1
(¡Verificar!)

4. La factorización de la matriz A será


 
· ¸ · ¸· √ ¸ √1 √1 0
1 1 0 1 0 2 2
2 0 0 
A= = 0 0 1 
0 0 1 0 1 0 1 0
− √12 √1
2
0

(¡Verificar!)

1.3. Pseudo-inversa de una matriz


Hemos estudiado durante el curso que no toda matriz A tiene una matriz inversa. De hecho,
esta propiedad sólo es aplicable (aunque no a todas) a las matrices cuadradas. También hemos
introducido el concepto de matriz pseudo-inversa A† = (AT A)−1 AT para resolver problemas de
mı́nimos cuadrados en donde se tenı́a un sistema de ecuaciones lineales con más ecuaciones que
incógnitas. Es evidente que la fórmula A† = (AT A)−1 AT es sólo válida si la matriz AT A es in-
vertible. Extendemos aquı́ el concepto de matriz pseudo-inversa de cualquier matriz gracias a la
descomposición en valores singulares.
Definición 2 (Pseudo-inversa). Sea Am×n una matriz m × n cuya descomposición en valores
singulares es
A = UΣVT ,

3
y que tiene r valores singulares distintos de cero (σ1 ≥ σ2 ≥ . . . ≥ σr , σr 6= 0 y σr+1 = σr+2 = . . . =
σn = 0). La pseudo-inversa de A es la matriz n × m, A† , definida por

A† = V Σ† UT ,

donde · ¸
−1
† Dr×r Or×(m−r)
Σ = ,
O(n−r)×r O(n−r)×(m−r)
y    
1
σ1
... 0 011 . . . 01s
 ..  ;  
−1
Dr×r =  ... ..
. .  Op×s =  ... . . . ...  .
1
0 ... σr
0p1 . . . 0ps

1.3.1. Ejemplo
Encontrar la pseudo-inversa de la matriz
· ¸
1 1 0
A=
0 0 1

1. En primer lugar, debemos determinar la descomposición en valores singulares de la matriz A.


Por el ejemplo anterior sabemos que
 
· ¸ · ¸· √ ¸ √1 √1 0
1 1 0 1 0 2 2
2 0 0 
A= = 0 0 1 .
0 0 1 0 1 0 1 0
− √12 √1
2
0

donde
 
· ¸ · √ ¸ √1 √1 0
1 0 2 2
2 0 0
U= , Σ= y VT =  0 0 1 
0 1 0 1 0
− √12 √1
2
0

2. Calculemos Σ† . Por la definición de Σ† sabemos que


· −1
¸
† Dr×r Or×(m−r)
Σ = ,
O(n−r)×r O(n−r)×(m−r)

4
donde    
1
σ1
... 0 011 . . . 01s
 ..  y O  .. . . . 
−1
Dr×r =  ... ..
. .  p×s =  . . ..  .
1
0 ... σr
0p1 . . . 0ps
Puesto que Σ de A es · √ ¸
2 0 0
Σ2×3 = ,
0 1 0
donde · √ ¸ · ¸
2 0 0
D2×2 = y O2×1 = .
0 1 0
Utilizando la definición de Σ† tendremos que
 
√1 0
2
Σ†3×2 =  0 1 
0 0

3. Calculemos A† . Por la definición sabemos que

A† = V Σ† UT .

Entonces
  1   1 
√1 0 − √12 √ 0 · ¸ 0
2 2 1 0 2
A† =  √1 0 √12   0 1  =  12 0  .
2 0 1
0 1 0 0 0 0 1

1.3.2. Sistemas lineales mal condicionados


Introduzcamos ahora algunas generalizaciones que nos serán de utilidad a lo largo de la
práctica cuando abordemos sistemas lineales mal condicionados.

Definición 3 (Matriz mal condicionada). Una matriz A está mal condicionada si pequeños cambios
en sus elementos pueden producir cambios grandes en las soluciones del sistema lineal Ax = b. Si
pequeños cambios de los elementos de A producen únicamente cambios pequeños en las soluciones
de Ax = b, entonces se dice que A está bien condicionada.

5
Ejemplo
Consideremos las matrices B y d tales que
   
100 50 33,3333 25 20 16,6667 1
 50 33,3333 25 20 16,6667 14,2857   1 
   
 33,3333 25 20 16,6667 14,2857 12,5   1 
B= 
 y d= 
 25 20 16,6667 14,2857 12,5 11,1111 


 1 

 20 16,6667 14,2857 12,5 11,1111 10   1 
16,6667 14,2857 12,5 11,1111 10 9,0909 1

La solución exacta del sistema de ecuaciones lineales Bx = d es:


 
0,1024
 −2,4155 
 
 13,2492 
x= 
 −26,8697  .
 
 21,5704 
−5,3864

Ahora supongamos que perturbamos ligeramente uno de los coeficientes de la matriz B. Por ejemplo,
consideremos B̃ tal que B̃(i, j) = B(i, j) ∀i, j salvo B̃(6, 4) = 11,1110, en lugar de 11,1111. La
solución del sistema B̃ x̃ = d es ahora
 
0,0700
 −1,6081 
 
 8,3197 
x̃ =  
 −15,0451  .
 
 9,3534 
−0,8313

Es decir, un cambio de alrededor de una cienmilésima en un coeficiente ha dado lugar a cambios muy
significativos en el vector solución. Es importante observar que las perturbaciones de los coeficientes
de un sistema lineal no ocurren de forma “intencionada”, como en el anterior ejemplo donde hemos
introducido nosotros dichas perturbaciones. Las fuentes más comunes de estas perturbaciones son
el truncamiento y redondeo de los resultados parciales que tiene lugar de forma inevitable durante
los cálculos. Recordad que los ordenadores trabajan con aritmética finita, lo que significa que la
representación de prácticamente cualquier número real lleva asociado un error. Aunque bien es
verdad que estos errores son muy pequeños, también lo es que éstos se van acumulando durante
los cálculos produciendo cambios que no son despreciables y pueden influir, como hemos visto, en
los resultados que muestra el ordenador. En consecuencia, es importante saber, si un sistema lineal

6
está mal condicionado y disponer de métodos para abordar los problemas que de ellos se derivan.
Como veremos, la descomposición en valores singulares es uno de ellos. Antes introduciremos al-
gunos conceptos.

Definición 4 (Rango numérico). Sea el número real δ > 0 una cota para los valores singulares de
una matriz Am×n , tal que
σ1 ≥ σ2 ≥ · · · ≥ σq > δ ≥ σq+1 ≥ · · · ≥ σr > 0, σr+1 = σr+2 = . . . = σn = 0 .
El número natural r coincide con el rango de la matriz A. Al número natural q para el cual
σq > δ
se le llama rango numérico de la matriz A.
Definición 5 (Matriz truncada). Sea Am×n una matriz m × n cuya descomposición en valores
singulares está dada por
A = UΣVT
y sea el número natural q su rango numérico. La matriz truncada de A se define como
At = U Σt VT ,
donde · ¸
Dq×q Oq×(n−q)
Σt = ,
O(m−q)×q O(m−q)×(n−q)
   
σ1 ... 0 011 . . . 01s
 .. .. .   . .. . 
Dq×q = . . ..  y Op×s =  .. . ..  .
0 . . . σq 0p1 . . . 0ps
Definición 6 (Pseudo-Inversa truncada). Sea Am×n la matriz de la definición anterior cuyo rango
numérico es q. La matriz pseudo-inversa truncada de A se define como
A†t = V Σ†t UT ,
donde · ¸
−1
Dq×q Oq×(m−q)
Σ†t = ,
O(n−r)×q O(n−r)×(m−r)
y    
1
σ1
... 0 011 . . . 01s
 . ..   
−1
Dq×q =  .. ..
. .  ; Op×s =  ... . . . ...  .
1
0 ... σq 0p1 . . . 0ps

7
1.4. Aplicaciones
La descomposición en valores singulares de una matriz es una herramienta útil en muchas
aplicaciones, como por ejemplo: resolución de sistemas de ecuaciones mal condicionados, aproxi-
mación por mı́nimos cuadrados y compresión de imágenes digitales.

1.4.1. Resolución de sistemas de ecuaciones mal condicionados


Supongamos que deseamos resolver el sistema de ecuaciones
Ax = b
donde    
1 2 1 8
A =  10 18 12  y b =  78 
20 22 40 144
La solución exacta de este sistema de ecuaciones lineales es:
 
3
x= 2 .
1
Ahora supongamos que consideramos la matriz perturbada
 
1 2 1
à =  10 18 12  .
20 22 39
La solución exacta del sistema lineal perturbado Ãx = b es
 
0
x =  3 .
2
(¡Verificar!)
¿Por qué pasa esto? Esto ocurre porque la matriz A está mal condicionada y pequeños errores
en las entradas de la matriz A producen grandes errores en la solución final.
Veamos ahora cómo la descomposición en valores singulares de una matriz nos ayuda a tratar
este problema. Consideremos nuevamente nuestro sistema lineal Ax = b y busquemos una solución
del problema At x = b. Esta solución viene dada por:
x = A†t ∗ b
Utilizemos el programa Matlab para ver lo que ocurre.

8
1. Escribamos la matriz A
À A = [1 2 1; 10 18 12; 20 22 40]
A=
1 2 1
10 18 12
20 22 40
y escribamos la matriz b
À b = [8; 78; 144]
x=
8
78
144
2. Realicemos la descomposición en valores singulares de la matriz A. Para ello escribamos la
siguiente instrucción
À [U, D, V ] = svd(A)
U=
−0,0400 −0,1203 −0,9919
−0,4091 −0,9037 0,1261
−0,9116 0,4108 −0,0131
D=
54,5107 0 0
0 9,3049 0
0 0 0,0079
V =
−0,4103 −0,1011 0,9063
−0,5045 −0,8028 −0,3179
−0,7597 0,5877 −0,2783
Esto de acuerdo a la definición 2 significa que

A = U DV T

3. Consideremos la matriz D.
 
54,5107 0 0
D= 0 9,3049 0 
0 0 0,0079

9
Como podemos observar el valor singular 0,0079 es muy pequeño. Si consideramos δ = 0,01
de forma que
σ1 > δ ≥ σ2 ,
el rango de la matriz A serı́a q = 2 (ver definición 4). Ahora utilizando la definición 5 podemos
truncar la matriz A y tener que
   
−0,0400 −0,1203 −0,9919 54,5107 0 0 −0,4103 −0,5045 −0,7597
At =  −0,4091 −0,9037 0,1261   0 9,3049 0   −0,1011 −0,8028 0,5877  .
−0,9116 0,4108 −0,0131 0 0 0 0,9063 −0,3179 −0,2783
Para truncar la matriz A, basta con truncar la matriz D en su rango numérico para ello
escribimos la siguiente instrucción
À D(3, 3) = 0
D=
54,5107 0 0
0 9,3049 0
0 0 0
escribimos
À Dt = D
Dt =
54,5107 0 0
0 9,3049 0
0 0 0
Esto me indica que mi nueva matriz Dt esta truncada.
4. Calculemos A†t . De acuerdo a la definición 6 basta con invertir los valores de la diagonal de
la matriz truncada, para ello escribimos la siguientes instrucciones
À Dtin = Dt; Dtin(1, 1) = 1/Dtin(1, 1); Dtin(1, 1) = 1/Dtin(1, 1)
Dtin =
0,0183 0 0
0 0,1075 0
0 0 0
Finalmente calculamos la matriz pseudo-inversa truncada. Escribimos la siguiente instrucción
À Apit = V DtinU 0
Apit =
0,0016 0,0129 0,0024
0,0107 0,0818 −0,0270
−0,0070 −0,0514 0,0387

10
5. Para “resolver” el sistema Ax = b, utilizando la descomposición en valores singulares (x =
A†t ∗ b), escribimos la siguiente instrucción
À x = Apit ∗ b
x=
1,3642
2,5738
1,5023

Ahora de manera similiar al ejemplo mostrado, “perturbemos” nuestra matriz A de manera que
 
1 2 1
A = Ã =  10 18 12  .
20 22 39

Resolvamos ahora el sistema Ãx = b. Para ello debes seguir las instrucciones antes indicadas.
Obtendrás
À x = Ainvt ∗ b
x=
1,3667
2,5320
1,5631
Como puedes observar, la descomposición en valores singulares nos ha ayudado a reducir el mal
condicionamiento de la matriz A. Lo que en realidad hemos hecho es reemplazar el sistema mal
condicionado Ax = b por uno “cercano”, At x = b que está bien condicionado.

1.4.2. Compresión de imágenes digitales


Supongamos que tenemos una imagen en tonos de gris con un tamaño de 340 × 280 pixeles.
Cada pixel tiene 256 tonos de gris, lo que puede representarse mediante un número entre 0 y 255.
Podemos almacenar esta información en una matriz A340×280 , pero transmitir y manipular estos
95200 números es muy costoso. Sin embargo, gracias a la descomposición en valores singulares
podemos transmitir solamente los datos correspondientes a los primeros 20 valores singulares de
A340×280 . De esta forma, en lugar de transmitir los 95200 números, sólo necesitamos enviar los 20
valores singulares de la matriz D, más los 20 vectores columna de la matriz U y los 20 vectores
columna de la matriz V , es decir, un total de

20 + 20(340) + 20(280) = 12420

números. Como se puede apreciar el ahorro es substancial.

11
Lectura y representación de imágenes en Matlab
Matlab implementa los comandos imread e imwrite para la lectura y escritura, respectiva-
mente, de ficheros gráficos. Para leer una imagen, almacenada en el fichero playa.jpg y asignarla
a una variable A podemos ejecutar el comando

À A = imread(’playa.jpg’,’jpg’);

El resultado será una matriz bidimensional de tipo uint81 , que podemos visualisar en Matlab por
medio de la instrucciones

À imagesc(A); colormap(gray);

Finalmente, para poder manipular la matriz A necesitamos convertirla en una matriz de formato
numérico. Esto lo realizamos por medio de la instrucción double

À A=double(A);

Una vez transformada la matriz A y después de realizar el tipo de operaciones necesarias para
comprimir la imagen (que esta matriz representa) querremos visualizar la imagen resultante. Para
ello, debemos convertir la matriz obtenida, A, en una matriz de formato uint8. Para convertir una
matriz a formato uint8 el proceso es el inverso. Escribir

À A=uint8(A);

y para visualizarla escribimos las instrucciones

À imagesc(A); colormap(gray);

En el caso de querer guardar la nueva imagen, basta ejecutar

À imwrite(A,’playa.mod.jpg’,’jpg’);

1
El tipo uint8 en Matlab es un arreglo numérico con valores entre 0 y 255 que no admite operaciones matemáticas.
La instrucción uint8 convierte cualquier arreglo numérico en un arreglo con valores entre 0 y 255

12
Ejemplo de compresión de imagenes en blanco y negro o escala de grises
La rutina o código en Matlab que se muestra a continuación permite comprimir una imagen
en blanco y negro (o escala de grises) utilizando la descomposición en valores singulares.
Consideremos la siguiente imagen:

Copia el código indicado en un m-file de Matlab y guardalo con el nombre compbyn.mat. A


continuación guarda la imagen mostrada con el nombre playa.jpg

Rutina
%Practica DVS
%Compresion de Imagenes en blanco y negro o escala de grises
%--------------------
clear all %borra todas las variables
%-------------------------
%Pantalla para presentar la imagen
figure(1)
%-------------------------
%Leemos la imagen guardada con el nombre ’playa.jpg’ y la asignamos a la variable A0
A0=imread(’playa.jpg’,’jpg’);
%--------------------------

13
%Visualizamos la imagen
imagesc(A0); colormap(gray);
%--------------------------
%Convertimos la imagen a formato numerico
A0=double(A0);
%--------------------------
%Calculamos el tamano de la matriz ma0=filas y na0=columnas
[ma0,na0]=size(A0);
%--------------------------
%Descomposicion en valores singulares de la matriz A0
[U0, S0, V0]=svd(A0);
%--------------------------
%Calculamos el tamano de la matrices U0, S0 y V0
[mu0, nu0]=size(U0); [ms0, ns0]=size(S0); [mv0, nv0]=size(V0);
%---------------------------
%Compresion
%---------------------------
%Pantalla para presentar la nueva imagen
figure(2)
%---------------------------
%bucle
for k=1:6 %k es el numero de imagenes a presentar
%r0 es el numero de valores singulares de A0
r0=2^k;
%factorizacion de la matriz A0, A0=USV’
imaA0=U0(:,1:r0)*S0(1:r0,1:r0)*V0(:,1:r0)’;
%tamano de la matriz (imagen) comprimida
comp=(mu0+nv0+1)*r0;
%tamano de la matriz (imagen) original
total=ma0*na0;
%muestra en la pantalla los valores de k, r0, total y comp
disp([ k r0 total comp])
%transformo la matriz de formato doble a uint8
imaA0=uint8(imaA0);
%ventana para la nueva imagen
subplot(2,3,k);
%instrucciones para visualizar la imagen
imagesc(imaA0); colormap(gray);

14
end
%fin del bucle
%fin del codigo

Ahora ejecuta el código. Para ejecutarlo tienes dos alternativas

1. desde el m-file a través de comando run (f5) o

2. desde la ventana de comandos escribiendo el nombre del archivo, es decir, compbyn.

Como podrás observar tienes dos ventanas. En la primera ventana (figure 1) se encuentra la
imagen original y en la segunda ventana (figure 2) las distintas compresiones realizadas.

50 50 50
100 100 100
150 150 150
200 200 200
250 250 250
300 300 300
350 350 350
400 400 400
450 450 450

200 400 600 800 200 400 600 800 200 400 600 800

50 50 50
100 100 100
150 150 150
200 200 200
250 250 250
300 300 300
350 350 350
400 400 400
450 450 450

200 400 600 800 200 400 600 800 200 400 600 800

Preguntas y tareas
1. ¿Con cúal de la imágenes comprimidas te quedarı́as? ¿Por qué?

2. ¿Cuántos valores singulares utiliza cada imagen comprimida?

3. En el código anterior, r0 representa el número de valores singulares, cambia dicha instrución


por r0 = 2 ∗ k, r0 = 3k y r0 = 3 ∗ k. ¿Con cuál de estas instrucciones te quedarı́as para
calcular r0? ¿Por qué?

4. Si aumentas el número de valores singulares, ¿mejora la compresión?

15
5. ¿Cuántos valores singulares tomarı́as para considerar que tienes una buena imagen y una
buena compresión?

1.5. Bibliografı́a
1. LAY D.C., Álgebra lineal y sus aplicaciones, Addison-Weslay, 2 Edición 1999.

2. POOLE D., Álgebra lineal, Una introducción moderna, Thomson. México 2004

16

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