Sie sind auf Seite 1von 97

Universidad Politcnica de MadridEscuela Tcnica Superior de Ingenieros Industriales

Grado en Ingeniera en Tecnologas Industriales. Curso 2015-2016-3


Matemticas de EspecialidadIngeniera Elctrica

Valores y vectores propios


Valores singulares

Jos Luis de la Fuente OConnor


jldelafuente@etsii.upm.es
joseluis.delafuente@upm.es
Clase_valvec_2016.pdf

1/97

ndice

2/97

Cuestiones tericas de valores y vectores propios

Localizacin de valores propios

Obtencin numrica de valores y vectores propios












Mtodo de Jacobi
Mtodo de la iteracin de potencia
Mtodo de la iteracin inversa
Iteracin mediante cociente de Rayleigh
Deflacin
Iteracin simultnea
Iteracin QR
Subespacios de Krylov
Comparacin de los mtodos

Clculo de valores singulares

3/97

Los valores y vectores propios adquieren una relevancia destacada para analizar
asuntos con oscilacin y resonancia. Su conocimiento es bsico en:


Sistemas elctricos de corriente alterna.

Modos de vibracin natural de estructuras.

Instrumentos musicales.

Mecnica cuntica.

Lasers.

Resonancia Magntica Nuclear (NMR).

:::

4/97

Su clculo e interpretacin es esencial para el anlisis de sistemas de generacin,


transporte y demanda de energa elctrica.
Frequency range 1

Frequency range 2

electromagnetic

Phenomena

electromechanical

SVC

Frequency
Interconnected
System

1 MHz

1 kHz

1 Hz

1 s

1 ms

1s

1 s
M
Turbine Syngovernor chronous
Torsion maschine
AVR

On-load Current
Breaker
tap
transformer Arc
changer Saturation restriking
Protective
system

External system
Line
Cable
HVDC
FACTS

Converter
VAR-Load
VAR-Admittance
Motor
Load torque

100 s

Travelling Transient
wave
phenomena,
phenomena Switching
overvoltages

10 ms

1 mHz

1 min

1s

Short-circuit Transient
phenomena stability
SSRphenomena

Harmonics,
Transformer-saturation

1h

100 s
Control
phenomena
with steam
generators

Processtimes
Calculation
time steps

5/97
From the time domain subprogram of

NETOMAC

NETOMAC
eigenvalue
calculation mode

Systems working point at t0, t>t0

Augmented state equations:

Linear
model
of a
dynamic
power
system

Axx

Axz

bx

Azx

Azz

bz

Sparsitybased
storage
and
matrix
computation

State equation:
A

(Dimentioned maximum
800 dynamic order)

Eigensystem
solution

Network in RST
Admittances by differential
equations non-linearities

Single line network


Complex admittances
only fundamental frequency

Time range
Instantaneous values
ns...s...ms...s

Time range
Quasi steady-state values
s...min

Electromagnetic and
electromechanical
phenomena, complete
solution

Electromechanical
phenomena,
fundamental
frequency

only
Loadflow

Power method
of implicit
inverse iteration

QR transformation

Simulation Models for System Components, Machines, Controllers and Control Units

Loadflow
Initial conditions

Possible ways of simulation

Eigenvalues and associated eigenvectors

Loadflow
Operating point

Overview
of
modes

System components
Linearization
Coupling

Activities of
different modes
on one device

Activities of
one mode on
different devices

Loadflow for special


requirements, e.g.
homogeneous multiconductor system

Transfer function
based dominant
pole method

U1

U2

Frequency range
all system-variables

Eigenvalue analysis

Small-signal
characteristics
Network, machines
and control

Systemoscillation
and -damping,
Netreduction,
Controller layout

Eigenvalue
analysis
&
transfer
function
analysis

Legend:
R: Right eigenvector (observability information)
L: Left eigenvector (controllability information)
P: Participation factors
U: Transfer function residues
U1: Mode activities in unit impulse response
U2: Mode activities in unit step response

y(t):
Unit impulse/step
response

G(jw):
Frequency
response

SIGMA
OMEGA
(rad/sec)

SIGMA
OMEGA
(RAD/SEC)
(HZ)
-0,087
4,566

COMPLEX S-PLANE

ZETA
(%)

17 out of 206 solved modes are selected


all the selected modes are inside the displayed range

FREQ
(Hz)

ELECTRIC MACHINES

14

-4,053

12,991

-29,8

2,060

NORMALIZED
RIGHT
EIGENVECTOR
(MODE
SHAPE)
NORMALIZED
RIGHT
EIGENVECTOR
(MODE
SHAPE)

NORMALIZED RIGHT EIGENVECTOR (MODE SHAPE)

MODE DISTRIBUTION ON COMPLEX S-PLANE


SELECTED MODES
MACHINE SWING MODES

Hz

13

SYNCHRONOUS MACHINES
18 items
COMPONENT NAME

ZETA

SIGMA
OMEGA
SIGMA
OMEGA
(RAD/SEC)
(RAD/SEC)
(HZ)
(HZ)
-0,087
4,566
-0,087
4,566

FACO
(%)
-1,9

ZETA
ZETA

FREQUENCY RESPONSE OF TRANSFER FUNCTION

FACO
FACO
(%)
(%)
0(s)=

-1,217

11,754

-10,3

1,071

-2,520

11,450

-21,5

1,022

12

-0,053

10,022

-0,5

1,595

-1,110

9,072

-11,2

1,571

COMPONENT
NAME
COMPONENT
NAME

-13,6

1,494

-12,6

1,490

-1,992

9,233

-21,1

1,469

-1,285

9,388

-1,104

-0,900

9,359

9,146

-9,0

1,456

10

10

1 1 DACOLOUA
2X150
MVA
DACOLOUA
2X150
MVA

2 2 MILLOA
2x2x
1818
MVA
MILLOA
MVA

-2,079

8,942

LOSQUI 2X 18+14+Adong

TEHUSEQUEL+JALA+BANELVOL

FALALFAL 2X95 MVA

TOLIZASAV, ZALSAV 10+3X32

PELRA 5X76 MVA

NASVENTA AT 18 KV

1
1,407

-1,207

8,700

-14,5

-0,550

8,440

NASVENTA AT 19.2 KV

10

1,399

-6,6

1,343

13

-1,137

7,062

-14,3

1,251

-0,503

7,033

-7,1

1,119

6,310

-6,1

1,004

5,718

-4,9

0,910

17

-0,007

4,566

-1,09

0,727

0,19
0,19

CAREN 2X58.8 MVA

0,45
0,45

NASVENTA
8 8 NASVENTA
ATAT
1818
KVKV

16

0,43
0,43

NASVENTA
19.2
9 9 NASVENTA
ATAT
19.2
KVKV

0,18
0,18

CAREN
2X58.8
MVA
1010CAREN
2X58.8
MVA
8

11

ENCHEPHEHU 2X283 MVA

ENCHEPHEHU
2X283
MVA
1111ENCHEPHEHU
2X283
MVA

0,06
0,06

BUNCOL
2X240
MVA
1212BUNCOL
2X240
MVA

0,05
0,05

13

CURAMACHI 2X53 MVA

CURAMACHI
2X53
MVA
1313CURAMACHI
2X53
MVA

0,04
0,04

14

COANTU 2X160 MVA

12

2
-0,383

-0,200

0,16
0,16

0,15
0,15

PELRA
5X76
MVA
7 7 PELRA
5X76
MVA
17

BUNCOL 2X240 MVA

0,5

15

0,14
0,14

5 5 FALALFAL
2X95
MVA
FALALFAL
2X95
MVA

6 6 TOLIZASAV,
ZALSAV
10+3X32
TOLIZASAV,
ZALSAV
10+3X32

18

14

16

COANTU
2X160
MVA
1414COANTU
2X160
MVA

0,06
0,06

15

ROTOREL 4X105 MVA

ROTOREL
4X105
MVA
1515ROTOREL
4X105
MVA

0,06
0,06

16

NICOREA 5X21.5 MVA

NICOREA
5X21.5
MVA
1616NICOREA
5X21.5
MVA

0,22
0,22

MAGNITUDE SCALE : 6.31 (x18-4)

-6

-5

-4

-3

-2

-1

17

QUEPAN 500 MVA

QUEPAN
500
MVA
1717QUEPAN
500
MVA

18

TILLARNUCA 2X68 MVA

TILLARNUCA
2X68
MVA
1818TILLARNUCA
2X68
MVA

0,37
0,37

0,56
0,56

1
0 0

12

0,91 Hz

0,37
0,37

3 3 LOSQUI
2X2X
18+14+Adong
LOSQUI
18+14+Adong

4 4 TEHUSEQUEL+JALA+BANELVOL
TEHUSEQUEL+JALA+BANELVOL

6
-22,9

11

pusMVA

1,00
1,00

0,63
0,63

12

ROTOR SPEED

NASVENTA AT 18 KV

MECHANICAL TORQUE

NYQUIST DIAGRAMM

DACOLOUA 2X150 MVA

MILLOA 2x 18 MVA

0,63
0,63

1,5
6

NASVENTA AT 16 KV
PV

V(s)

SYNCHRONOUS
MACHINES
SYNCHRONOUS
MACHINES
1818
items
items

11

Y(s)

-1,9
-1,9

ELECTRIC
MACHINES
ELECTRIC
MACHINES

MODE OBSERVABILITY OF DEVIATION VARIABLES


MOTOR SPEED
PY
ParLub the dynamic system and
observe the mode different devices.

2
2

Mode distribution
(Eigenvalues)

Phasor-Diagram

0,10,1

0,20,2

0,30,3

Bar diagram

0,40,4

0,50,5

0,60,6

0,70,7

0,80,8

0,90,9

1 1

Nyquist-Diagram

6/97

Caso histrico


Hundimiento del Puente Tacoma 1, Washington, EE.UU.

Hundimiento del Puente Tacoma 2, Washington, EE.UU.

Hoy

Aspectos tericos y algunas propiedades de


los valores y vectores propios

7/97

En general, los vectores propios de un operador matemtico1 lineal T son los


vectores no nulos que cuando son transformados por el operador dan lugar a un
mltiplo escalar de s mismos2: T .v/ D v. Ese escalar, , se denomina valor
propio.

La formulacin de su clculo en el caso habitual de que ese operador lo


caracterice una matriz,
Dada una matriz A 2 Cnn, calcular un escalar  y un x 0 tales que
Ax D x:
El escalar  es un valor propio de A y x su correspondiente vector propio.
1

Transformacin lineal u aplicacin lineal de un espacio vectorial V en si mismo. Ej. la ecuacin de Schrdinger
E D E E.
2
No cambian su direccin.

Para que exista una solucin distinta de la trivial x D 0 el valor propio  deber
ser raz del polinomio caracterstico de grado n asociado a A, es decir,

8/97

Lo que es igual a n


g1n

det.A

I/ D 0:

C g 2 n

   C . 1/ngn D 0:

Igual que cualquier matriz tiene asociado un polinomio caracterstico, cualquier


polinomio tiene asociado una matriz compaera. La matriz compaera de un
polinomio mnico p.t / D c0 C c1t C    C cn 1t n 1 C t n es
20 0 : : : 0 c 3
C.p/ D

610
4:
::

0
1
::
:

:::
:::
::
:

0
0
::
:

0 0 ::: 1

c1
c2
::
:

cn

7
5

El polinomio mnimo q.t / de la matriz A es el polinomio mnico nico de grado


mnimo tal que q.A/ D 0.

9/97

Los vectores propios de A pertenecen al subespacio nulo de Ax I,


ker.Ax I/, y no estn unvocamente determinados: Si v es un vector
propio, v tambin lo es.

Siempre existen n valores propios de A 2 Cnn, reales o complejos. No siempre


existen n vectores propios.

La multiplicidad algebraica del valor propio  de A es la multiplicidad de la raz


correspondiente del polinomio caracterstico asociado a A.

La multiplicidad geomtrica de  es el nmero de vectores propios linealmente


independientes que se corresponden con .
Teorema La multiplicidad geomtrica de un valor propio es menor o igual que su
multiplicidad algebraica.

Por ejemplo, si A D I,  D 1 es un valor propio con multiplicidad algebraica y


geomtrica n. El polinomio caracterstico de A es p.z/ D .z 1/n y e i 2 Cn,
i D 1; : : : ; n, sus vectores propios.

Si el valor propio  tiene una multiplicidad geomtrica menor que la algebraica,


se dice defectuoso. Se dice que una matriz es defectuosa si tiene al menos un
valor propio defectuoso. La matriz
#
"
210
A D 021
002

10/97

tiene un valor propio de multiplicidad algebraica 3 y multiplicidad geomtrica 1.


>> A=[2 1 0;0 2 1;0 0 2];
>> [V D]=eig(A)
V =
1.0000
-1.0000
1.0000
0
0.0000
-0.0000
0
0
0.0000
D =
2
0
0
0
2
0
0
0
2

Si una matriz A 2 Cnn no es defectuosa dispone de n vectores propios


linealmente independientes.

Si V 2 Cnn tiene como vectores columna los n vectores propios de A y


D D diag.1; : : : ; n/, entonces Avi D i vi , i D 1; : : : ; n, es equivalente a
AV D V D. Si A no es defectuosa,
A D V DV

que es la descomposicin en valores propios de A: o A diagonalizada por V .


Definicin Una matriz A se dice diagonalizable por semejanza si es semejante a una
matriz diagonal.

Teorema Una matriz A 2 Cnn es diagonalizable si y slo si tiene n vectores propios


linealmente independientes.

11/97

12/97

Definicin Dos matrices A; B 2 Cnn se dicen semejantes si existe una matriz inver-

tible P tal que A D P 1 BP.

Teorema Dos matrices semejantes tienen el mismo polinomio caracterstico y, por


consiguiente, los mismos valores propios.

Definicin El espectro .A/ de A es el conjunto de sus valores propios:


.A/ D f 2 C W det.A

I/ D 0g:

Definicin El radio espectral, .A/, de la matriz A es el valor mximo de los mdulos


de sus valores propios: .A/ D max.i 2.A / ji j:
Es el radio del menor crculo del plano complejo centrado en el origen que contiene todos
sus valores propios.

1:1

1:3

1:7

2:5

4:1

7:3

13:7

26:5
13/97

Al aplicrsele
a cualquier
vector
la transformacin que
representa A, ese vector
4
7KHYHFWRUV
[
[
[
DUHVKRZQLQ)LJ
7KHRWKHUYHFWRUVDUHJURZLQJ
A
;
:
:
:
;
A
3
tiende
a orientarse+RZHYHU
hacia la OLQHVHJPHQWVDUHGUDZQVKRZLQJWKHGLUHFWLRQVRIWKRVH
direccin del vector propio dominante de A.
WRRORQJWRGLVSOD\

YHFWRUV ,QIDFW WKHGLUHFWLRQVRIWKHYHFWRUVDUHZKDWZHUHDOO\ZDQWWRVHH QRWWKHYHF


 1;8 0;8 
WRUVWKHPVHOYHV 7KHOLQHVVHHPWREHDSSURDFKLQJWKHOLQHUHSUHVHQWLQJWKHHLJHQVSDFH
 Ejemplo Estudiemos la matriz A D 0;2 1;2 cuyos valores propios son
VSDQQHGE\ Y1  0RUHSUHFLVHO\ WKHDQJOHEHWZHHQWKHOLQH VXEVSDFH GHWHUPLQHGE\
4
A1k [DDQGWKHOLQH HLJHQVSDFH GHWHUPLQHGE\
2 y 2 D 1. El vector propio correspondiente
a

es
Si se multiplica
1
k!
1 .1
 Y1 JRHVWR]HURDV

A y sus potencias por el vector x D

0;5
1

el resultado es el de la figura.

x2

A4 x
Ax
x

A3x

A2 x
1

Espacio de

v1

v1
1

10

x1

'*(63&  'LUHFWLRQVGHWHUPLQHGE\ [ A[ A2 [; : : : ; A7 [


Si ese vector est en la direccin de alguno de los vectores propios de A, se expande o contrae por un factor
que determina el correspondiente valor propio
3

!k

14/97

Otros ejemplos
 Ejemplo del apndice "Definiciones, : : :


 
 
10
1
0
Si A D
, 1 D 1; x 1 D
; 2 D 2 y x 2 D
:
02
0
1



 
 
1;5 0;5
1
1
Si A D
, 1 D 2; x 1 D
; 2 D 1 y x 2 D
:
0;5 1;5
1
1
Si A D


 
01
1
, 1 D i; x 1 D
; 2 D
10
i

 
p
i
i y x2 D
, donde i D
1.
1

15/97

Teorema La suma de los valores propios de A es igual a su traza:


1 C 2 C    C n D

n
X

ai i .

i D1

Teorema El producto de los valores propios de A es igual a su determinante.

Teorema Los valores propios de una matriz triangular son los coeficientes de su diagonal
principal.

Teorema Una matriz es singular si y slo si tiene un valor propio igual a 0.

Teorema Si los valores propios de una matriz A son i , 1  i  n, los de A

son i

; 1  i  n. Sus vectores propios son idnticos.

16/97

Teorema Los valores propios de las potencias de A son las potencias de los de A; los
vectores propios son los mismos.

I Demostracin. Si consideramos la definicin,


Ax D xI A 2 x D Ax D 2 xI    A n x D n x
S 1 AS D I S 1 AS S 1 AS D 2 ) S 1 A 2 S D 2 :
Las potencias negativas tambin:
Ax D xI A 1 Ax D A 1 x ) A 1 x D  1 x:

Corolario Los valores propios de A

son los recprocos de los de A.

17/97

Los valores propios de multiplicidad m > 1 tienen un subespacio propio


asociado de dimensin  m. Ese subespacio es invariante por lo que:



Todos los vectores de un subespacio propio son vectores propios.

Los subespacios propios correspondientes a valores propios distintos slo


tienen en comn el vector nulo.

El problema de calcular los valores y vectores propios es en general un


problema no lineal en los valores propios  y lineal en los vectores x.

El clculo de los valores propios por las races del polinomio caracterstico
no es aconsejable por:



El trabajo de determinar los coeficientes y races del polinomio.


La sensibilidad a errores de redondeo de los coeficientes del polinomio
(recordemos los polinomios de Wilkinson).

 
1
Ejemplo Consideremos la matriz A D
; donde  es cualquier nmero
1
p
menor que maq:
K .



Los valores propios exactos de A son 1 C  y 1 .


El clculo mediante el polinomio caracterstico hara
det.A

I/ D 2

2 C .1

 2 / D 2

2 C 1I

las races seran (valores propios calculados) 1 y 1.

18/97

Valores propios de matrices destacadas

19/97

Ortogonales

Recordemos que estas matrices son aquellas que tienen


como inversa su traspuesta: QQT D I.


Ejemplo

Todos los valores propios de una matriz ortogonal tienen mdulo unidad.

p

  
  p
2=2
2=2
01
1 0
p
p
:
;
;
10
0 1
2=2 2=2

Hermticas

Son aquellas matrices iguales a su traspuesta conjugada:


A D AH :
Son una generalizacin de las matrices simtricas al campo complejo.


Ejemplo La matriz

1
1

1Ci
:
i 2

20/97

Si A es hermtica, el producto x Ax es un nmero real.


 Los valores propios de una matriz hermtica, en consecuencia, son
nmeros reales. En efecto
H

Ax D xI

x Ax D x

x D  jjxjj2

En una matriz hermtica los vectores propios correspondientes a dos


valores propios distintos son ortogonales entre s.
En efecto,
)

H
H H
x 2 A x 1 D 1 x 2 x 1
Ax 1 D 1x 1
H
.

/x
1
2
2 x 1 D 0:
H
H H
Ax 2 D 2x 2
x A x 1 D 2 x x 1
2

Como los valores propios 1 y 2 son distintos,


xH
2 x 1 D 0:

Si los vectores propios se normalizan, x H x D 1, la matriz de vectores


propios se convierte en una matriz ortogonal.

21/97

Unitarias

Son matrices cuya inversa es su compleja conjugada:


U H U D U U H D I:

Ejemplo La matriz

p
 p

i p2=2 p2=2
:
2=2 i 2=2
 Las matrices unitarias son una extensin de las matrices ortogonales al
campo complejo. Todos los valores propios tienen mdulo unidad.
 Una matriz unitaria no modifica ni los ngulos ni las normas:

.U x/H .U y/ D x H U H U y D x H y
si y D x; jjU xjj2 D jjxjj2:

Normales 2Son 3las matrices que cumplen que AAH D AH A:




120
Ejemplo 40 1 25 ;
201


i 0
:
0 3 5i

22/97

Triangularizacin de Schur

Issai Schur, Alemania, 1875-1941.

Teorema Triangularizacin de Schur Para cualquier A 2 Cnn existe una matriz unitaria
U tal que

U H AU D T ,
donde T es una matriz triangular superior. Los valores propios de A son entonces los
coeficientes de la diagonal principal de T .

Teorema Para cualquier matriz hermtica A 2 Cnn existe una matriz unitaria U tal
que

donde D es una matriz diagonal.

U H AU D D,

1. Los valores propios de A son nmeros reales.


2. Se pueden obtener vectores propios de A que sean ortonormales.

23/97

Corolario Si A 2 Rnn es simtrica, existe una matriz ortogonal Q tal que


matriz sta diagonal.

QT AQ D D,

Teorema Los valores propios de una matriz hermtica definida positiva son todos positivos.
Recprocamente, si todos los valores propios de una matriz son positivos, debe ser definida
positiva.

24/97

Teorema Forma cannica de Jordan Para una matriz A 2 Cnn existe una matriz T

regular tal que

6
AT D J D 6
4

J1


0

:::

0


Jn

7
7;
5

2
3
i 1
6 i 1  0 7
Ji D 6
 7
4
5
0  1
i
es una matriz de Jordan y los i son los valores propios de A.
donde

Por Marie Ennemond Camille Jordan, Francia, 1838-1922.

25/97

Tabla que resume las posibles transformaciones por semejanza.


A

Valores propios distintos


Simtrica real
Hermtica compleja
Normal
Real cualquiera
Cualquiera
Cualquiera

Regular
Ortogonal
Unitaria
Unitaria
Ortogonal
Unitaria
Regular

BDT

AT

Diagonal
Diagonal real
Diagonal real
Diagonal
Triangular en bloques (real)
Triangular superior (Schur)
Casi diagonal (Jordan)

26/97

Localizacin de valores propios




Si no se necesita calcular el valor numrico exacto de los valores propios, sino


conocer grosso modo dnde se encuentran en el plano complejo, existen varias
formas de hacerlo.

La ms simple surge de tomar normas en la expresin Av D v:


jjjjvjj D jjvjj D jjAvjj  jjAjjjjvjj ) jj  jjAjj;
para cualquier norma matricial inducida por una norma vectorial. Por
consiguiente:


Los valores propios de una matriz se localizan en el plano complejo, dentro


del circulo centrado en el origen de radio jjAjj.

27/97

Semyon Aranovich Gersgorin,


Rusia, 1901-1933.

Teorema Gersgorin Los valores propios de una matriz A 2 Cnn se encuentran en

la unin de los n discos de Gerschgorin, cada uno de los cuales est centrado en akk ,
k D 1; : : : ; n, y tiene de radio
n
X
jakj j
rk D
j D1

j k

I Demostracin. Sea  un valor propio de A y x su vector propio asociado. De Ax D x y .I


A/x D 0 se tiene que
n
X
. akk /xk D
akj xj ;
k D 1; : : : ; n;
j D1

j k

donde xk es el componente k-simo del vector x.


Si xi es el coeficiente de x ms grande en valor absoluto, como jxj j=jxi j  1 para j i, se tiene que
j

ai i j 

n
X
j D1

j i

Luego  est contenido en el disco f W j

jxj j X

jaij j:
jxi j
n

jaij j

ai i j  ri g.

j D1

j i

28/97

El siguiente programa de Matlab calcula los crculos o discos de Gerschgorin y


los dibuja.
function C = Gershgoring(A)
%
% Se dibujan los crculos de Gerschgorin de la matriz A.
[m n] = size(A);
d = diag(A); cx = real(d); cy = imag(d);
B = A - diag(d);
r = sum(abs(B));
% Suma filas de A sin diagonal
C = [cx cy r(:)];
t = 0:pi/100:2*pi; c = cos(t); s = sin(t);
[v d] = eig(A);
% eig calcula los valores propios de A
d = diag(d);
% En d valores propios
u1 = real(d); v1 = imag(d);
hold on, grid on, axis equal
xlabel(Re), ylabel(Im)
h1_line = plot(u1,v1,or);
set(h1_line,LineWidth,1.5)
for i=1:n
% Se dibujan los crculos de Gerscgorin
x = zeros(1,length(t)); y = zeros(1,length(t));
x = cx(i)+r(i)*c; y = cy(i)+r(i)*s;
h2_line = plot(x,y);
set(h2_line,LineWidth,1.2)
end
hold off
title(Crculos de Gerschgorin y valores propios de la matriz)
end

Ejemplo Calcular los discos de Gerschgorin de la matriz


2
3
123
A D 43 4 95 :
111

29/97

Los radios de los discos son r1 D 5


r2 D 12
r3 D 2:

Los valores propios son: 7;3067; 0;6533 C 0;3473i y


Con el programa anterior, se obtiene lo siguiente.
Crculos de Gershgorin y valores propios de la matriz
10

Im

10
10

5
Re

10

15

0;6533

0;3473i .

30/97

Los grficos de los discos de Gerschgorin de otras matrices curiosas se pueden


ver en esta otra grfica.
gersh(gallery(lesp,12))

gersh(gallery(hanowa,10))

20
5
10

10
5
20
40

30

20

10

gersh(gallery(ipjfact,6,1))

gersh(gallery(smoke,16,1))

0.5
2
1
0

0
1
2

0.5
0.2

0.2

0.4

0.6

0.8

31/97

ndice


Introduccin terica

Localizacin de valores propios

Obtencin numrica

Mtodo de Jacobi

Mtodo de la iteracin de potencia

Mtodo de la iteracin inversa

Iteracin mediante cociente de Rayleigh

Deflacin

Iteracin simultnea

Iteracin QR

Subespacios de Krylov

Clculo de valores singulares

32/97

Obtencin numrica
Mtodo de Jacobi

Carl Gustav Jacobi, Alemania


(Prusia), 1804-1851.

Es un mtodo formulado en 1846 para el clculo de los valores y vectores


propios de una matriz simtrica o compleja hermtica.

Utiliza transformaciones por semejanza basadas en rotaciones, idnticas a las de


Givens, para hacer cero pares de elementos simtricamente dispuestos respecto
a la diagonal principal.

Partiendo de A 0 D A, cada iteracin conforma una transformacin

33/97

A kC1 D J Tk A k J k ;
h i
c s
donde cada matriz J k D s c se calcula de tal manera que
h ih
i h i h c 2a 2csa C s2a
i
apq .c 2 s 2 / C cs.app aqq /
pp
pq
qq
c s
app apq
c s
s c
apq aqq
s c D a .c 2 s 2 / C cs.a
a / c 2 a C 2csa C s 2 a
pq

pp

qq

qq

pq

pp

sea diagonal.


Para lograrlo, apq .c 2

s 2/ C cs.app
D

aqq / ha de ser cero. Haciendo

aqq app
2apq

y t D s=c

se obtiene la ecuacin de segundo grado


t 2 C 2 t
en la tangente del ngulo de rotacin, t,

1D0

De las dos posibles races,


tD

34/97

1 C  2;

se escoge
p la ms pequea para que j j  =4. Luego se obtienen
c D 1= 1 C t 2 y s D c  t .
function J=Jac_Rot(A,b,d)
% Clculo de la rotacin de Jacobi para anular un coef. de A de coordenadas (b,d)
if A(b,d)~=0
tau=(A(d,d)-A(b,b))/2/A(b,d);
if tau>=0
t=1/(tau+sqrt(1+tau^2));
else t=-1/(-tau+sqrt(1+tau^2)); end
c=1/sqrt(1+t^2);
s=c*t;
else
c=1; s=0;
end
J=[c s; -s c];
% Igual que Givens
end

En Matlab:

Mediante unos barridos que apliquen sistemticamente estas transformaciones


a todos los coeficientes que no estn en la diagonal principal de la matriz que
tengan un valor mayor que una tolerancia se conseguir ir convirtiendo la matriz
en una diagonal.

35/97

La convergencia del proceso es cuadrtica.

v
u n n
uX X
u
 El proceso termina cuando off .A/ D u
aij2
t
i D1 j D1
j i

102
021
211

> t ol  kAkF .

i
. Apliqumosle el mtodo de Jacobi.

Ejemplo Sea A 0 D

Anulemos para empezar los coeficientes .1; 3/ y .3; 1/. Con ese fin, definamos
la rotacin
2
3
y hagamos

0;707 0
J0 D 4 0 1
0;707 0
2

0;707
0 5
0;707

3
3 0;707 0
A 1 D J T0 A 0 J 0 D 40;707 2 0;7075 :
0 0;707
1

36/97

A continuacin, anulemos .1; 2/ y .2; 1/ mediante la rotacin


2

y hagamos

0;888
J 1 D 40;460
0

3
0;460 0
0;888 05
0
1

2
3
3;366 0 0;325
A 2 D J T1 A 1 J 1 D 4 0 1;634 0;6285 :
0;325 0;628
1

Luego anulamos el .3; 2/ y el .2; 3/ usando la rotacin


2

y haciendo

1 0
J 2 D 40 0;975
0 0;226

3
0
0;2265
0;975

3
3;366 0;0735 0;317
0 5:
A 3 D J T2 A 2 J 2 D 40;0735 1;780
0;317
0
1;145
2

37/97

Comenzando un nuevo barrido, hagamos cero los coeficientes .1; 3/ y .3; 1/.
Usaremos la rotacin
2
3
y luego

0;998 0
J3 D 4 0 1
0;070 0
2

0;070
0 5
0;998

3
3;388 0;0733
0
A 4 D J T3 A 3 J 3 D 40;0733 1;780 0;0051 5 :
0 0;0051 1;167

El proceso continuara hasta llegar a conseguir una aproximacin a los valores


propios deseados.

38/97

El programa para poder calcular una rotacin de Jacobi 2  2 y aplicarla luego a


la matriz original completa, pre y post multiplicndola, es este.
function J=jacrot(A,i,j)
% Transf. de Jacobi del coeficiente (i,j) y (j,i) de A
n=length(A);
J1=Jac_Rot(A,i,j); J=eye(n);
% Calcula qu rotacin 2x2 elemental aplicar
J([i j],[i j])=J1([1 2],[1 2]);
% Se adapta a la propia A
end
function J=Jac_Rot(A,b,d)
% Clculo de rotacin de Jacobi 2x2 en la matriz A.
if A(b,d)~=0
tau=(A(d,d)-A(b,b))/2/A(b,d);
if tau>=0
t=1/(tau+sqrt(1+tau^2));
else t=-1/(-tau+sqrt(1+tau^2)); end
c=1/sqrt(1+t^2);
s=c*t;
else
c=1; s=0;
end
J=[c s; -s c];
% Igual que Givens
end

Ejemplo con Matlab

>> A=rand(4);
>> A=A+A
A =
1.7818
1.1086
1.3615
0.3352
1.1086
0.5150
1.0842
0.5054
1.3615
1.0842
1.8585
0.9660
0.3352
0.5054
0.9660
0.9466
>> % Anulemos el coeficiente (1,2)
>> J=jacrot(A,1,2); A=J*A*J
A =
2.4252
0.0000
1.7218
0.5436
0.0000
-0.1284
0.2544
0.2688
1.7218
0.2544
1.8585
0.9660
0.5436
0.2688
0.9660
0.9466
>> % Ahora el (1,3)
>> J=jacrot(A,1,3); A=J*A*J
A =
3.8868
0.1646
0.0000
1.0396
0.1646
-0.1284
0.1939
0.2688
0.0000
0.1939
0.3969
0.3847
1.0396
0.2688
0.3847
0.9466
>> % El (1,2) se ha hecho distinto de cero; el (1,4)
>> J=jacrot(A,1,4); A=J*A*J
A =
4.2172
0.2383
0.1165
0
0.2383
-0.1284
0.1939
0.2063
0.1165
0.1939
0.3969
0.3666
-0.0000
0.2063
0.3666
0.6161

39/97

>> % Ahora el (2,3)


>> J=jacrot(A,2,3); A=J*A*J
A =
4.2172
0.1899
0.1852
0
0.1899
-0.1922
-0.0000
0.0814
0.1852
-0.0000
0.4607
0.4127
-0.0000
0.0814
0.4127
0.6161
>> % El (2,4)
>> J=jacrot(A,2,4); A=J*A*J
A =
4.2172
0.1890
0.1852
0.0188
0.1890
-0.2003
-0.0409
-0.0000
0.1852
-0.0409
0.4607
0.4107
0.0188
0.0000
0.4107
0.6243
>> % El (3,4)
>> J=jacrot(A,3,4); A=J*A*J
A =
4.2172
0.1890
0.1312
0.1320
0.1890
-0.2003
-0.0316
-0.0260
0.1312
-0.0316
0.1237
0.0000
0.1320
-0.0260
-0.0000
0.9612
>> % Despus de un barrido el valor de off(A) se ha reducido
>> off(A)
ans =
0.2845
>> % Desde
>> of1
of1 =
3.1996
>> % Otro barrido
>> J=jacrot(A,1,2); A=J*A*J
A =
4.3202
-0.0000
0.1580
0.0270
-0.0000
-1.3369
-0.0502
0.0230
0.1580
-0.0502
-0.5132
0
0.0270
0.0230
-0.0000
-0.7836

40/97

>> J=jacrot(A,1,3); A=J*A*J


A =
4.3254
-0.0016
-0.0000
-0.0016
-1.3369
-0.0501
-0.0000
-0.0501
-0.5183
0.0270
0.0230
-0.0009
>> J=jacrot(A,1,4); A=J*A*J
A =
4.3255
-0.0015
-0.0000
-0.0015
-1.3369
-0.0501
-0.0000
-0.0501
-0.5183
0.0000
0.0230
-0.0009
>> J=jacrot(A,2,3); A=J*A*J
A =
4.3255
-0.0015
0.0001
-0.0015
-1.3400
0.0000
0.0001
-0.0000
-0.5153
0.0000
0.0229
-0.0023
>> J=jacrot(A,2,4); A=J*A*J
A =
4.3255
-0.0015
0.0001
-0.0015
-1.3409
0.0001
0.0001
0.0001
-0.5153
-0.0001
-0.0000
-0.0023
>> J=jacrot(A,3,4); A=J*A*J
A =
4.3255
-0.0015
0.0001
-0.0015
-1.3409
0.0001
0.0001
0.0001
-0.5152
-0.0001
0.0000
-0.0000
>> eig(A)
% Casi ha convergido
ans =
4.3255
-1.3409
-0.5152
-0.7829

0.0270
0.0230
-0.0009
-0.7836

-0.0000
0.0230
-0.0009
-0.7838

-0.0000
0.0229
-0.0023
-0.7838

-0.0001
0
-0.0023
-0.7828

-0.0001
0.0000
0
-0.7829
en dos barridos

41/97

Programa completo de Matlab para realizar el proceso.


function [V D it]=Jacobi_val_12_2(A)
% Clculo por Jacobi de valores y vectores propios de una MATRIZ SIMTRICA A
tol=sqrt(eps)*norm(A,fro); D=A; n=length(A); V=eye(n);
[m1 p]=max(triu(abs(D),1)); % En (p,q) elemento mayor valor no en diagonal
[~, q]=max(m1);
%
Posicin fila mximo valor no cero en L(A)
p=p(q); it=0;
%
Posicin columna mximo anterior
while off(D)>tol
% Procesos iterativo; necesita rutina off
J=Jac_Rot(D,p,q);
% Se hacen cero Dpq y Dqp (p debe ser < q)
D([p q],:)=J*D([p q],:);
D(:,[p q])=D(:,[p q])*J;
V(:,[p q])=V(:,[p q])*J;
[m1 p]=max(triu(abs(D),1));
[~, q]=max(m1);
p=p(q);
it=it+1;
end
[D I]=sort(diag(D)); V=V(:,I);
end
function a=off(A)
% Calcula off de la matriz cuadrada A: raiz cuadrada de la suma
%
de los cuadrados de los coeficientes de A no en la
%
diagonal principal; tambin sqrt(sum(sum(triu(a.^2,1)))).
n=length(A); a=0;
for k=1:n-1
a=a+sum(A(k,k+1:n).^2);
end
a=sqrt(a);
end

Para el ejemplo hecho a mano, se obtiene este resultado.


>> A=[1 0 2;0 2 1;2 1 1];
>> [v d it]=Jacobi_val_12_2(A)
v =
0.6611
-0.4973
0.5618
0.2261
0.8460
0.4828
-0.7154
-0.1922
0.6718
d =
-1.1642
1.7729
3.3914
it =
8

>> [V D]=eig(A)
V =
-0.6611
-0.4973
-0.2261
0.8460
0.7154
-0.1922
D =
-1.1642
0
0
1.7729
0
0

-0.5618
-0.4828
-0.6718

42/97

La aproximacin que hicimos iterando un


par de barridos era bastante buena.

0
0
3.3914

Para la matriz de la sesin interactiva anterior.


>> [v d it]=Jacobi_val_12_2(A)
v =
-0.3673
0.3703
-0.6272
0.9032
0.1289
-0.0831
-0.1590
-0.7022
0.2688
-0.1549
0.5944
0.7263
d =
-0.2134
0.1238
0.9569
4.2346
it =
16
>> A*v-v*diag(d)
ans =
1.0e-010 *
-0.0096
0.3780
0.0061
-0.0034
0.2318
0.0042
0.0183
0.4117
0.0067
-0.0155
0.2006
0.0032

0.5785
0.4009
0.6399
0.3086

0.2292
0.0812
-0.4444
0.3862

>> [v d]=eig(A)
v =
0.3673
-0.3703
-0.9032
-0.1289
0.1590
0.7022
0.1549
-0.5944
d =
-0.2134
0
0
0.1238
0
0
0
0
>> A*v-v*d
ans =
1.0e-014 *
-0.0222
-0.0444
-0.0056
0.0097
-0.0479
0.0180
-0.0069
-0.0083

0.6272
0.0831
-0.2688
-0.7263

0.5785
0.4009
0.6399
0.3086

0
0
0.9569
0

0
0
0
4.2346

-0.0333
-0.0305
-0.0444
-0.0111

-0.0444
-0.0444
-0.1332
0

Mtodo de la iteracin de la potencia

43/97

Su objetivo es calcular el valor propio dominante y su vector propio asociado.

Se basa en que al aplicarle a cualquier vector la transformacin que representa


una matriz A, ese vector tiende a orientarse hacia la direccin del vector propio
dominante de A. Recordad.

Partiendo de un x 0 de mdulo unidad, opera mediante una iteracin de punto


fijo de frmula de recurrencia
yk 1
:
y k 1 D Ax k 1; donde x k D
jjy k 1jj1

La magnitud jjy k 1jj1 converge al valor propio dominante, 1, y el vector x i lo


hace al vector propio dominante, v1.

Su convergencia est ligada a j2=1j: a menor valor de ella mejor convergencia.

Ejemplo Partiendo de x T0 D 0; 1 calculemos el valor propio dominante de




1;5 0;5
:
0;5 1;5
Utilicemos una pequea sesin de Matlab como esta

Los resultados (vector propio y valor propio) son estos.


k
0
1
2
3
4
5
6
7
8
9
10

x Tk
0,0
0,333
0,600
0,778
0,882
0,939
0,969
0,984
0,992
0,996
0,998

1,0
1,0
1,0
1,0
1,0
1,0
1,0
1,0
1,0
1,0
1,0

jjx k jj1
1,5000
1,6667
1,8000
1,8889
1,9412
1,9697
1,9846
1,9922
1,9961
1,9981

>> x=[0;1];
>> A=[1.5 0.5;0.5 1.5];
>> for i=1:10
v=A*x
m=max(abs(v))
x=v/m
end

44/97

Geometric Interpretation
45/97

of power iteration
El comportamientoBehavior
de las iteraciones
es el dedepicted
la figurageometrically:

1.0

0.5

0.0

x.0
x..1 x.2 x..3 ...x 4...
.......
...
.....
.......
..... ....... ....... .......
...
.
... .................... v 1
...
.
.
v 2 .....
.
....
.
. . ..
...
...
... .... .... ....
....
...
... ..... ....................
...
.
.
.
.
..
...
....
... ... .............
...
...
.... ..... ........................
...
...
.... .... ....................
...
...
.... .... .....................
...
...
.. .. ...........
... .... .......................
... ............
... ..........
....
1.0

Initial vector

El punto inicial

0.0

0.5

"

"

0.5

"

0
1
1
x0 =
=1
+1
1
1
1

1.0


 in two eigenvectors
 
contains equalcomponents
0
1
1
(shownxby D
dashed arrows)
D1
C1
0
1

Repeated multiplication by A causes compo-

es una combinacinnent
lineal
de eigenvector
los dos vectores
propios vto1 larger
y v2 .
in first
(corresponding
eigenvalue, 2) to dominate, and hence sequence
of vectors converges to that eigenvector

La multiplicacin sucesiva por A causa que el coeficiente


35 en el primer vector
propio sea el que domine, por lo que la sucesin converge a ese vector propio.

46/97

El mtodo puede fallar por diversas razones:


1. Porque haya ms de un valor propio con el mismo mdulo, en cuyo caso las
iteraciones puede que converjan a una combinacin lineal de los
correspondientes vectores propios.


Este caso es bastante habitual pues esos dos valores propios pueden ser
un par complejo conjugado.

2. El vector de partida puede que tenga coeficiente cero en el valor propio


dominante.


El error de redondeo en la prctica puede que introduzca un pequeo


valor, por lo que este peligro rara vez ocurre.

3. Para una matriz real y un punto de partida tambin real, puede que nunca
se converja a un vector complejo.

Un programa de Matlab para el mtodo de la potencia.


function [lambda,V,cnt]= potencia(A,x,tol,max1)
% Mtodo de la potencia para la obtencin de un valor
%
y un vector propios de A
if nargin<4 max1=100; end, if nargin<3 tol=eps; end
if nargin<2 n=length(A); x=rand(n,1); end
lambda=0;cnt=0;err=1;
while cnt<=max1 & err>tol
y=A*x;
c1=norm(y,inf);
y=y/c1;
dc=abs(lambda-c1); dv=norm(x-y); err=max(dc,dv);
x=y; lambda=c1;
cnt=cnt+1;
end
V=x/norm(x);
end

>> [l,v,cnt]=potencia(b,[0;1])
l =
2.00000000000000
v =
0.70710678118655
0.70710678118655
cnt =
53

47/97

48/97

Mejora del mtodo: desplazamiento




Mediante un desplazamiento  ,
A

 I;

es posible hacer que


2 

 2 ;



1
1
y que, por lo tanto, la velocidad de convergencia aumente.
La solucin del problema original resultar de aadir  al valor obtenido.


En el ejemplo que estamos utilizando, si se hace  D 1, la relacin anterior se


hace cero y el mtodo converge en una iteracin.
(Desafortunadamente, no siempre se puede escoger un desplazamiento tan
bueno.)

49/97

Mtodo de la iteracin inversa




Si en vez del valor propio de mayor magnitud, se necesita el ms pequeo, se


puede hacer uso de la propiedad de que los valores propios de A 1 son los
recprocos de A.

El esquema iterativo sera el que sigue.


Dado un punto de partida x 0
for k D 1, 2, : : :
Resolver Ay k D x k
yk
xk D
jjy k jj1
end

Para resolver el sistema se factorizara A una sola vez.

50/97

Ejemplo (continuacin)


Aplicando el mtodo de la iteracin inversa a la matriz




1;5 0;5
;
0;5 1;5
se obtienen los resultados de la tabla.
k
0
1
2
3
4
5
6

x Tk
0,000
-0,333
-0,600
-0,778
-0,882
-0,939
-0,969

1,0
1,0
1,0
1,0
1,0
1,0
1,0

jjy k jj1
0,750
0,833
0,900
0,944
0,971
0,985

Converge al valor propio 1 y vector propio 1; 1T .

En Matlab la iteracin sera as.


function [lambda,V,cnt]= ItInversa_2(A,x,tol,max1)
% Mtodo de la potencia inversa para la obtencin
%
de un valor y vector propio de A
if nargin<4 max1=110; end, if nargin<3 tol=eps; end
if nargin<2 n=length(A); x=rand(n,1); end
lambda=0;cnt=0;err=1;[l,u,p]=lu(A);
while cnt<=max1 & err>tol
z=l\(p*x);y=u\z;
c1=norm(y,inf);
y=y/c1;
dc=abs(lambda-c1); dv=norm(x-y); err=max(dc,dv);
x=y; lambda=c1;
cnt=cnt+1;
end
V=x/norm(x);
end

>> A=[1.5 0.5;0.5 1.5];


>> [lambda,V,cnt]=ItInversa(A,[0;1])
lambda =
1.0000
V =
-0.7071
0.7071
cnt =
55

51/97

52/97

Mejora del mtodo: desplazamiento




El desplazamiento es particularmente til en el caso de la iteracin inversa.

Si  es el valor propio de A ms prximo a , el valor propio de menor


magnitud de A  I ser  .


Con una eleccin apropiada de  se puede calcular cualquier valor propio de


A que est prximo a esa .
Si el desplazamiento est prximo a un valor propio, la convergencia es muy
rpida.

Iteracin mediante cociente de Rayleigh

John William Strutt, Lord Rayleigh, Reino Unido, 1842-1919.

T
Definicin El cociente de Rayleigh de un vector x 2 R es el escalar r.x/ D xx TAx
x .

Dada una matriz A 2 Rnn y uno de sus vectores propios, x, la mejor


estimacin del correspondiente valor propio  se puede considerar un problema
de mnimos cuadrados n  1 como este: x  Ax.

De sus ecuaciones normales, x Tx D x TAx, la solucin que se obtiene es


x TAx
D T :
x x

53/97

54/97

El cociente de Rayleigh puede utilizarse como desplazamiento para acelerar la


convergencia de los mtodos iterativos que hemos visto. El algoritmo de la
iteracin inversa quedara as.
Dado un punto de partida x 0
for k D 1, 2, : : :

x Tk 1 Ax k 1
k D T
xk 1xk 1

Resolver .A k I/y k D x k
yk
xk D
jjy k jj2
end

El cociente de Rayleigh tambin se puede aplicar a vectores complejos


H
hacindolo xx HAx
x .

Ejemplo (continuacin)


El mtodo de la iteracin de potencia con cociente de Rayleigh aplicado al


problema que estudiamos da este resultado:
k
0
1
2
3
4
5
6

55/97

x Tk
0,000
0,333
0,600
0,778
0,882
0,939
0,969

jjy k jj1

x Tk Ax k =x Tk x k

0,150
1,667
1,800
1,889
1,941
1,970

1,500
1,800
1,941
1,985
1,996
1,999

1,0
1,0
1,0
1,0
1,0
1,0
1,0

Utilizando un punto de partida aleatorio con el mismo problema ocurrira lo que


sigue.
k
0
1
2

x Tk
0,807
0,924
1,000

k
0,397
1,000
1,000

1,896
1,998
2,000

56/97

En Matlab:
function [lambda,V,cnt]= ItInvRayleigh_2(A,x,max1)
% Mtodo de la iteracin inversa con cociente de Rayleigh
if nargin<2, n=length(A); max1=10; x=ones(n,1); end
lambda=0; cnt=0; err=1; n=length(A);
if norm(x)>1 x=x/norm(x); end
tol=n*norm(A,1)*eps;
sigma=x*A*x;
while err>tol
y=(A-sigma*eye(n))x;
x=y/norm(y);
sigma=x*A*x;
err=norm(A*x-sigma*x,1);
cnt=cnt+1;
end
lambda=sigma;
V=x;
end

>> A=[1.5 0.5;0.5 1.5];


>> [lambda,V,cnt]=ItInvRayleigh_2(A)
lambda =
2.0000
V =
0.7071
0.7071
cnt =
1

57/97

Deflacin


Idea: Calculados un valor y un vector propios, obtener otros por deflacin: Como
cuando una vez conocida una de las races, x1, de un polinomio de grado n ste
se divide por x x1 obtenindose otro de grado n 1.

Si x es el vector propio asociado al valor propio dominante de A, 1, y H es


una matriz de Householder, tal que H x D e 1, la transformacin de semejanza
que define consigue transformar A as

T
 b
A 1 D H AH 1 D 1
;
0 A2
donde A 2 es una matriz de orden n
los restantes de A.

1 cuyos valores propios son 2; : : : ; n,

Luego, trabajando con A 2 y calculado 2, si y 2 es un vector propio asociado, el


vector
 
bT y 2
1
x2 D H
;
; donde D
y2
2 1

58/97

es el vector propio correspondiente a 2 en la matriz original A, supuesto


1 2 .
Este mtodo funciona bien para calcular algunos valores y vectores propios.

En Matlab:

function [l2 v2 B] = defl_1(A, v1)


% B resulta de A por deflacin de vec. propio v1.
%
Calcula el valor propio l2 y vec. propio v2.
n = length(A);
v1 = Housv(v1);
C = Houspre(v1,A);
B = zeros(n,n);
for i=1:n
B(:,i)=Housmvp(v1,C(i,:));
end
+
l1 = B(1,1);
b = B(1,2:n);
B = B(2:n,2:n);
[l2 y] = ItInvRayleigh_2(B);
if l1~=l2
a = b*y/(l2-l1);
v2 = Housmvp(v1,[a;y]);
else
v2 = v1;
end
end

function u = Housv(x)
% Transformacin de Householder del vector x.
m = max(abs(x));
u = x/m;
if u(1) == 0, su = 1; else su = sign(u(1)); end
u(1) = u(1)+su*norm(u);
u
= u/norm(u);
u
= u(:);
end
function P = Houspre(u, A)
% Producto P = H*A, donde H is una transformacin de Householder
%
definida por el vector u.
n = length(A);
v = u/norm(u); v = v(:);
P = zeros(n,n);
for j=1:n
aj = A(:,j);
P(:,j)=aj-2*(v*aj)*v;
end
end
function p = Housmvp(u, x)
% Producto p = H*x, donde H es la transformacin de Householder
%
definida por u.
u = u(:); x = x(:);
v = u/norm(u);
p = x - 2*(v*x)*v;
end

59/97

Utilicmoslo:
>> A=ones(5)+diag(ones(5,1))
A =
2
1
1
1
1
1
2
1
1
1
1
1
2
1
1
1
1
1
2
1
1
1
1
1
2
>> [lambda,V]= ItInvRayleigh_2(A)
lambda =
6
V =
0.44721359549990
0.44721359550002
0.44721359549982
0.44721359550001
0.44721359550003
>> [l2,v2]=defl_1(A,V)
l2 =
1
v2 =
-0.89442719099992
0.22360679774998
0.22360679774998
0.22360679774998
0.22360679774998

% Generamos una matriz dada

% Cal. valor y vector propio dominantes

% Defl para obtener otro par val. A

>> [norm(A*V-lambda*V);norm(A*v2-l2*v2)]
% Comprobar resultados
ans =
1.0e-015 *
0.4441
0.6497
>> format short
>> [l,v]=eig(A)
% Comprobar con rutina Matlab eig
l =
0.8333
-0.1667
-0.1667
0.2236
0.4472
-0.1667
0.8333
-0.1667
0.2236
0.4472
-0.1667
-0.1667
0.8333
0.2236
0.4472
-0.5000
-0.5000
-0.5000
0.2236
0.4472
0
0
0
-0.8944
0.4472
v =
1
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
6

60/97

Iteracin simultnea o de subespacio




Para obtener varios valores/vectores propios, apliquemos la iteracin de la


potencia a los p vectores linealmente independientes que forman X 0; es decir:
X 0 D matriz n  p de rango p
for k D 1, 2, : : :
X k D AX k 1
end



La Im A x 1 A x 2 : : : A xp converge al subespacio invariante de los


vectores propios de A correspondientes a sus p mayores valores propios:
j1j >    jp j > jpC1j  jpC2j:

La velocidad de convergencia es O.pC1=p /.

61/97

Para optimizar prestaciones y conseguir una buena ortogonalidad se usa la


factorizacin QR de X k , ortonormalizando as las columnas de X k . Se
obtendra una Q como base de Im.X k /.
X 0 D matriz n  p de rango p
for k D 1, 2, : : :
Qk R k D X k 1
X k D AQk
end

Las iteraciones convergen a una matriz triangular, si slo hay valores propios
reales, o a una triangular en bloques 22 en la diagonal principal cuando haya
valores propios complejos conjugados.

62/97

Sesin en Matlab para matriz simtrica

>> A=randn(5); A=A*A


A =
2.8486
-2.5688
0.1741
3.5081
-0.1959
-2.5688
2.8789
-0.3177
-4.0552
-2.2033
0.1741
-0.3177
2.3957
1.4227
-2.3486
3.5081
-4.0552
1.4227
6.2012
2.7463
-0.1959
-2.2033
-2.3486
2.7463
19.4886
>> A0=A;
>> % Hagamos ahora 10 iteraciones de la iteracin ortogonal
>> for i=1:10, [Q R]=qr(A); A=R*Q; end
>> A
A =
20.8010
-0.0997
0.0000
0.0000
0.0000
-0.0997
10.6605
0.0000
0.0000
0.0000
0.0000
0.0000
2.2265
0.0000
0.0000
0.0000
-0.0000
0.0000
0.1085
0.0000
-0.0000
-0.0000
0.0000
0.0000
0.0165

>> % Otras 5 iteraciones ms


>> for i=1:5, [Q R]=qr(A); A=R*Q; end
>> A
A =
20.8020
-0.0035
0.0000
0.0000
0.0000
-0.0035
10.6595
0.0000
0.0000
0.0000
0.0000
0.0000
2.2265
0.0000
0.0000
0.0000
-0.0000
0.0000
0.1085
0.0000
-0.0000
-0.0000
0.0000
0.0000
0.0165
>> % Mejora; hagamos 10 ms
>> for i=1:10, [Q R]=qr(A); A=R*Q; end
>> A
A =
20.8020
-0.0000
0.0000
0.0000
0.0000
-0.0000
10.6595
-0.0000
0.0000
0.0000
0.0000
0.0000
2.2265
0.0000
0.0000
0.0000
-0.0000
0.0000
0.1085
-0.0000
-0.0000
-0.0000
0.0000
0.0000
0.0165
>> % Comparemos todos con los de la matriz original
>> eig(A0)
ans =
0.0165
0.1085
2.2265
10.6595
20.8020

IterSimul obtiene los r valores propios mximos de A simtrica.

function [i r1]=IterSimul(A,r)
% Mximos valores propios de A (simtrica); itera. simultnea
%
ortogonal
n=length(A); if nargin<2, r=5; end
tol=sqrt(eps); B=A; i=0; itmax=400;
Q=eye(n,r); R=eye(r); vprn=1; err=1;
while i<itmax && err>tol
vpr=vprn;
Z=A*Q;
[Q,R]=qr(Z,0);
% QR reducida de n x r
vprn=min(diag(R));
i=i+1;
err=abs((vprn-vpr)/vprn);
end
format long
r1=diag(R);
% fprintf(%i Valores propios mximos:\n,r);
disp(Valores calculados con eig());
disp(-sort(eig(-B)));
end

>> A=rand(20); A=A*A;


>> [i r]=IterSimul(A,6)
Valores calculados con eig()
1.0e+002 *
1.006294230413485
0.052804894629075
0.039516583781399
0.032191801462925
0.031157323965477
0.026806664806072
0.022597606348368
0.019827755676060
0.013685589405813
0.012217263560720
0.009791335827920
0.005048187809920
0.004282145342196
0.003460064312945
0.002436587767534
0.001713272489506
0.001168137691697
0.000605614254568
0.000238729619383
0.000012007660353
i =
44
r =
1.0e+002 *
1.006294230413484
0.052804894629054
0.039516583695056
0.032053644988988
0.031291616159557
0.026806665421155

63/97

Iteracin QR

64/97

G. GOLUB AND F. UHLIG

family until his death. At first, Kantorovichs group developed analytic computational tools in Prorab
for algebraic and trigonometric polynomials, for integer arithmetic and series, etc. When Vera joined,
her task was to select and classify matrix operations that are useful in numerical linear algebra. Linear
algebra subroutines were included in Prorab much later. This experience brought Vera close to numerical
algebra and computation. In 1972 she obtained her secondary doctorate (Habilitation). More extended
biographies of Veras life, achievements and long and productive career are available in Golub et al.
(1990) and Konkova et al. (2003), for example.

Propuesta por John G.F. Francis y Vera Kublanovskaya.


Downloaded from http://imajna.oxfordjournals.org at Universit di Bologna - Sistema Bibliotecario d'Ateneo on March 30, 2010

474

John G.F. Francis, Reino Unido 1934 y Vera


Kublanovskaya, Rusia 1920-2012
Vera Kublanovskaya in August 2008

In the Russian literature the QR algorithm was initially called the method of one-sided rotations. Vera
Kublanovskaya started to develop her version of the QR algorithm in 1958 after reading Rutishausers
LR algorithm paper (Rutishauser, 1958). She represented a matrix A = L Q as the product of a lower
triangular matrix L and an orthogonal matrix Q that she suggested to compute as the product of
elementary rotations or reflections. Her eigenvalue algorithm factors A = A1 = L 1 Q 1 , reverse
order multiplies A2 = Q 1 L 1 and then factors A2 again as A2 = L 2 Q 2 , etc. In 1959 she performed
numerical experiments with her LQ decomposition-based algorithm on an electromechanic Mercedes
calculator in low dimensions by hand since linear algebra computer codes had not been developed yet
in Prorab. Veras hand computations indicated that her explicit factorizationreverse-order multiply
algorithm is convergent. However, D. K. Faddeev feared that the obtained results may only have been
accidental. Veras QR-like algorithm was briefly mentioned in 1960 in the first edition of a monograph

Generalizando la iteracin simultnea (ortogonal) se pueden calcular todos los


valores propios de A, as como los correspondientes vectores propios.
A 0 D AI U 0 D I
for k D 1, 2, : : :
Qk 1 R k 1 D A k 1 , obtener factorizacin QR
A k D R k 1 Qk 1 ;
U k D U k 1 Qk 1
end

Las A k convergern a una matriz triangular, si todos los valores propios son
reales, o con bloques 22 en la diagonal, si hay valores propios complejos.
U k converger a los vectores propios.

65/97

Las matrices A k son ortogonalmente semejantes a las anteriores del proceso y a


A:
A 1 D R 0Q0 D QT0 A 0Q0 pues R 0 D QT0 A 0

A 2 D R 1Q1 D QT1 A 1Q1 D QT1 QT0 A 0Q0 Q1 D
.Q0Q1/T A 0 .Q0Q1/

Es decir, todas las A k tendrn los valores propios de A D A 0.




Las columnas de Qk forman una base ortonormal del subespacio Im.A k /.

Si A es simtrica, las iteraciones conservan la simetra y las A k convergern a


una matriz triangular y simtrica: diagonal.

Trabajemos un poco a mano con el algoritmo.

66/97

D = diag([4 3 2 1]);
rand(seed,0); format short e
S=rand(4); S = (S - .5)*2; % Se perturba un poco
A = S*D/S
% A_0 = A = S*D*S^{-1}
for i=1:6
[Q R] = qr(A); A = R*Q
% Iteracin QR
end
A =

4.1475e+00
-4.9214e-03
6.2706e-01
1.5691e-01
=
3.9304e+00
4.0097e-02
3.5144e-01
-2.7163e-02
=
3.9287e+00
-1.6308e-02
2.1041e-01
5.9415e-03
=
3.9514e+00
-5.7605e-02
1.1812e-01
-1.4093e-03
=
3.9696e+00
-7.1970e-02
6.3115e-02
3.4472e-04
=
3.9817e+00
-6.9838e-02
3.2744e-02
-8.5395e-05

-7.7246e-01
3.2731e+00
-1.9699e-01
-4.1310e-01

-7.3819e-01
-1.8990e-01
2.2190e+00
-6.3508e-01

-4.1172e+00
1.9440e+00
-6.0845e-01
3.6039e-01

-2.7682e-01
3.0595e+00
-3.8535e-02
8.4395e-02

1.5214e-01
-6.9040e-01
2.3156e+00
1.9457e-01

4.4847e+00
-2.1283e+00
-4.8346e-01
6.9447e-01

-1.6932e-01
3.0078e+00
-3.4259e-02
-2.3299e-02

4.1119e-01
-8.8862e-01
2.2044e+00
-8.1008e-02

-4.4113e+00
2.1571e+00
1.0227e+00
8.5905e-01

-1.3627e-01
2.9981e+00
-2.7149e-02
7.1443e-03

4.9740e-01
-9.6432e-01
2.1181e+00
3.8096e-02

4.3484e+00
-2.1072e+00
-1.3251e+00
9.3241e-01

-1.1610e-01
2.9977e+00
-1.8643e-02
-2.2854e-03

5.3907e-01
-9.8790e-01
2.0658e+00
-1.8738e-02

-4.3288e+00
2.0192e+00
1.4919e+00
9.6688e-01

-9.8200e-02
2.9984e+00
-1.2095e-02
7.4567e-04

5.6721e-01
-9.9032e-01
2.0362e+00
9.3684e-03

4.3356e+00
-1.9242e+00
-1.5816e+00
9.8360e-01

Alguna conclusin en trminos de convergencia; trabajo?

67/97

Iteracin QR con desplazamiento




La velocidad de convergencia se puede aumentar con desplazamientos:


Qk 1 R k

D Ak

k 1I

A k D R k 1 Qk
El desplazamiento k


C k 1I:

debe ser una buena aproximacin de un valor propio.

Desplazamientos ms usados:



Rayleigh. El valor de ann de A k 1: buena aproximacin a priori de n.


Wilkinson. Del bloque diagonal inferior 22 de A k 1 (si no es diagonal), el
valor propio de esa submatriz que est ms cerca de ann.

68/97

Este script de Matlab es el mtodo de la iteracin QR con desplazamiento


de Rayleigh para matrices con valores propios reales: simtricas, hermticas, etc.
function [lambda itt]= IteracionQR(A,tol)
% Mtodo de la iteracin QR con desplazamiento
%
para matrices con valores propios reales
if nargin<2, tol=eps*norm(A); end
lambda=0; n=length(A); it=0;
for k=n:-1:2
% Hasta aislar  k en a(k,k)
while norm(A(k,1:k-1),inf) > tol
sigma=A(k,k);
[Q,R]=qr(A(1:k,1:k)-sigma*eye(k,k));
A(1:k,1:k)=R*Q+sigma*eye(k,k);
it=it+1;
end
end
lambda=sort(diag(A)); if nargout==2, itt=it; end
end

69/97

Ejemplos

>> ab=ones(5)+eye(5)
ab =
2
1
1
1
1
1
2
1
1
1
1
1
2
1
1
1
1
1
2
1
1
1
1
1
2
>> [lambda it]=IteracionQR(ab)
lambda =
1.0000
1.0000
1.0000
1.0000
6.0000
it =
4

>> a=rand(20);
>> [lambda it]=IteracionQR(a*a)
lambda =
0.0010
0.0175
0.1107
0.1496
0.2232
0.4124
0.7861
0.8132
0.9430
1.2765
1.4153
1.7930
1.9123
2.2906
2.6955
2.9732
3.7114
4.9037
5.3983
100.1106
it =
48

>> eig(a*a)
ans =
0.0010
0.0175
0.1107
0.1496
0.2232
0.4124
0.7861
0.8132
0.9430
1.2765
1.4153
1.7930
1.9123
2.2906
2.6955
2.9732
3.7114
4.9037
5.3983
100.1106

Sesin en Matlab para matriz sin estructura especial

>> A=randn(5)
A =
0.1303
1.0169
-0.2750
0.7688
-0.3857
0.5583
0.2378
-0.2941
-0.5498
-0.1324
0.3125
0.8049
0.2869
-1.1517
-0.0024
-1.7196
-0.3503
0.4211
0.9847
-0.6632
>> A=hess(A)
% VEREMOS por qu
A =
0.1303
-0.1471
1.0342
-0.5765
0.8100
0.6165
-0.1303
0.5381
0
-1.0393
0.3560
0.3942
0
0
1.3485
-1.9025
0
0
0
0.4372
>> A0=A;

0.2815
1.2163
-0.2401
-0.4955
-1.3721

>> % Otras 10 iteraciones ms


>> for i=1:10, [Q R]=qr(A); A=R*Q; end
>> A
A =
-1.6585
-0.7415
0.3436
-0.8538
0.1202
-2.0481
-0.4571
-0.6504
0
-0.0322
0.6956
-0.7333
0
0
1.0035
1.0146
0
0
0
0.0000

-0.5971
0.9983
0.6386
-0.0670
-1.2908

>> % Mejora; hagamos 50 ms


>> for i=1:50, [Q R]=qr(A); A=R*Q; end
>> A
A =
-1.7423
-0.7746
-0.7995
-0.5685
0.0805
-1.9665
-0.6724
0.2789
0
-0.0000
1.0634
-0.8844
0
0
0.8436
0.6489
0
0
0
0.0000

>> % Hagamos ahora 10 iteraciones de la iteracin QR


>> for i=1:10, [Q R]=qr(A); A=R*Q; end
>> A
A =
-1.9640
-1.2063
-0.1339
0.3196
-0.3104
0.1231
0.3343
-0.7129
1.0207
-0.4763
0
-1.5358
-0.9798
-0.1630
-0.8736
0
0
1.1031
0.6130
0.2523
0
0
0
0.0000
-0.0941

0.1063
-1.0568
-0.1472
-0.0113
-0.0941

>> % Intentemos unas 50 ltimas


>> for i=1:50, [Q R]=qr(A); A=R*Q; end
>> A
A =
-1.8704
-0.7919
-0.1944
1.0214
0.0632
-1.8384
0.5215
0.3733
0
-0.0000
0.7034
-0.7224
0
0
1.0056
1.0089
0
0
0
0.0000

70/97

-0.2176
-1.0411
0.1361
0.0134
-0.0941

>> % Hay dos bloques 2x2 en la diagonal


>> % El ltimo parece claro que es -0.0941

-0.0297
-1.0632
-0.0561
0.1247
-0.0941

>> % Mejora, aunque no suficientemente; otras 50


>> for i=1:50, [Q R]=qr(A); A=R*Q; end
>> A
A =
-1.8095
-0.7895
-0.9613
0.3250
-0.1298
0.0657
-1.8993
-0.1186
0.6697
-1.0556
0
-0.0000
0.7945
-1.0629
0.0612
0
0
0.6651
0.9179
0.1223
0
0
0
0.0000
-0.0941

>> % Calculemos los valores propios de esos bloques


>> eig(A(1:2,1:2))
ans =
-1.8544 + 0.2232i
-1.8544 - 0.2232i
>> eig(A(3:4,3:4))
ans =
0.8562 + 0.8385i
0.8562 - 0.8385i
>> % Comparemos todos con los de la matriz original
>> eig(A0)
ans =
0.8562 + 0.8385i
0.8562 - 0.8385i
-0.0941
-1.8544 + 0.2232i
-1.8544 - 0.2232i

Iteracin QR con doble desplazamiento

71/97

Si hay valores propios complejos, se incorpora el doble desplazamiento para


tratar los bloques 22 irreducibles de la diagonal principal.

Se usan los dos valores propios,  y N , de la submatriz 22 del bloque inferior,
Qk 1 R k

D Ak

k 1 I

A k D R k 1 Qk

Qk R k D A k

C k 1 I

N k 1 I

A kC1 D R k Qk C N k 1 I

haciendo as un paso doble con desplazamiento en dos etapas.




Este doble paso se puede simplificar si M D .A k

k 1 I/ .A k

D .Qk 1 Qk / .R k R k 1 /
D A 2k

sA k

s es la traza del bloque diagonal inferior 22 de A k

C tI;

N k 1 I/ donde

y t su determinante.

72/97

Si se factorizase la matriz as, M D QR, mediante una sencilla manipulacin


algebraica, resulta que
A kC1 D QT M Q;

por lo que tericamente, en lo que se denomina doble desplazamiento implcito,


se evitara un paso.

Calcular M requiere O.n3/ operaciones y su factorizacin ulterior QR es


bastante inestable.

Con los aos, los diferentes enfoques de atacar esta variante han convergido en
una estrategia de doble desplazamiento implcito tipo Francis, formulada en
1961 por John G.F. Francis.

Dado ese coste en clculos, O.n3/, y su complejidad, perece obligado hacer


algo para preparar el problema antes de abordarlo con este mtodo.

Algoritmo QR: Transformaciones preliminares


Definicin Una matriz de Hessenberg es una matriz triangular excepto por una subdiagonal adyacente a la diagonal principal.

@
@
@

@
@
@
@

Cualquier matriz se puede reducir a la forma de Hessenberg mediante


transformaciones de Householder o Givens.

Si la matriz original es simtrica, al reducirla a la forma de Hessenberg se


obtendr una tridiagonal.

73/97

74/97

Si se parte de una matriz con la forma de Hessenberg, el algoritmo QR ms


actual necesita un nmero de operaciones O.n2/, implementndose en dos fases:
Matriz

1 fase

Simtrica a tridiagonal
General

2 fase
a diagonal

a Hessenberg a triangular

El trabajo necesario total de todo el proceso QR, preliminar ms iterativo, es el


que sigue.
Matriz simtrica

Matriz general

4 3
n para valores propios slo 10n3 para valores propios slo
3
9n3 valores y vectores propios 25n3 valores y vectores propios

75/97

Un conjunto de rutinas sencillas para reducir cualquier matriz, mediante


transformaciones de Householder, a la forma de Hessenberg seria este.
function [A V] = Hessred(A)
% Reduccin de A a Hessenberg con Householder
% En V vectores de transf. sucesivas de Householder
[m,n] =size(A);
if A == triu(A,-1), V = eye(m); return, end
V = [];
for k=1:m-2
x = A(k+1:m,k); v = Housv(x);
A(k+1:m,k:m)=A(k+1:m,k:m)-2*v*(v*A(k+1:m,k:m));
A(1:m,k+1:m)=A(1:m,k+1:m)-2*(A(1:m,k+1:m)*v)*v;
v = [zeros(k,1);v]; V = [V v];
end
end
function u = Housv(x)
% Transf. Householder del x; vector en u.
m = max(abs(x));u = x/m;
if u(1) == 0, su = 1; else su = sign(u(1)); end
u(1) = u(1)+su*norm(u);
u = u/norm(u); u = u(:);
end

76/97

Consideraciones finales en torno al algoritmo o mtodo QR:





Para matrices muy grandes, el algoritmo es costossimo.


Si slo se necesitan unos pocos valores y vectores propios, especialmente
para n grandes, el mtodo no saca partido de ello.
Requiere mucha memoria de ordenador, aunque la matriz sea grande y
dispersa.
Las transformaciones por semejanza introducen muchos elementos no nulos
por lo que se destruye una posible estructura de dispersidad.

77/97

Este es un programa del algoritmo QR para matrices simtricas con reduccin


inicial a forma Hessenberg y desplazamiento sencillo de Wilkinson. Se prueba
con una matriz 20  20, simtrica, generada aleatoriamente.
function [D itt]=It_QR_3(A)
% Iteracin QR con despla. de Wilkinson para una matriz simtrica
n=length(A); tol=off(A)*1.e-8; k=n; D=zeros(n,1); it=0;
A=Hessred(A);
% Reducir a Hessenberg
while k>1
while abs(A(k,k-1))>tol
%Calcular desplazamiento Wilkinson
s=eig2x2(A(k-1:k,k-1:k));
[i j]=min(abs(A(k,k)*[1 1]-s));
% Mejor desp. Wilkinson
[Q R]=qr(A(1:k,1:k)-s(j)*eye(k));
A(1:k,1:k)=R*Q+s(j)*eye(k); it=it+1;
end
k=k-1;
end
D=sort(diag(A),ascend); if nargout==2, itt=it; end
end
function [L]=eig2x2(a)
tra=a(2,2)+a(1,1);
sqtd=sqrt(tra*tra-4*(a(2,2)*a(1,1)-a(1,2)*a(2,1)));
L(1)=(tra+sqtd)/2;
L(2)=(tra-sqtd)/2;
L=L(:);
end

>> A=rand(20);
>> A=(A+A)/2;
>> [D it]=It_QR_3(A)
D =
10.5361
1.5883
1.5200
1.1285
1.0568
0.9498
0.6448
0.5156
0.2413
0.1139
-0.0201
-0.1461
-0.4263
-0.6220
-0.6692
-0.8182
-0.8895
-1.0250
-1.2618
-1.2714
it =
36

>> eig(A)
ans =
-1.2714
-1.2618
-1.0250
-0.8895
-0.8182
-0.6692
-0.6220
-0.4263
-0.1461
-0.0201
0.1139
0.2413
0.5156
0.6448
0.9498
1.0568
1.1285
1.5200
1.5883
10.5361

function [T it itd t] = qrstep_Francis_Bindel(H)


% Computes eigenvalues of A using a implicit double-shift QR method
% as Cornells Bindel notes (CS 620).
%
% Output: TT, vector containing eigenvalues; it, simple iterations;
%
itd, double iterations.
global itr itc
n = length(H); T=zeros(n,1);
tol = norm(H,fro)*1e-8;
H=hess(H);
% Reduce A to Hessenberg form
itr=0; itc=0; t=cputime;
while n > 2
if abs(H(n,n-1)) < tol*(abs(H(n-1,n-1))+abs(H(n,n)))
H(n,n-1) = 0; T(n)=H(n,n);
% Deflate 1x1 block
n = n-1;
elseif abs(H(n-1,n-2)) < tol*(abs(H(n-2,n-2))+abs(H(n-1,n-1)))
H(n-1,n-2) = 0; T(n-1:n)=eig2x2(H(n-1:n,n-1:n)); % Deflate 2x2 block
n = n-2;
else
H(1:n,1:n) = qrstep(H(1:n,1:n)); % Main body
end
end
T(1:2)=eig2x2(H(1:2,1:2)); T=sort(T,descend); t=cputime-t; it=itr; itd=itc;
end
function [NH] = qrstep(H)
% Compute double-shift poly and initial column of H^2 + b*H + c*I
[b c] = qrpoly(H);
C1
= H(1:3,1:2)*H(1:2,1);
C1(1:2) = C1(1:2) + b*H(1:2,1);
C1(1)
= C1(1) + c;
% Apply a similarity associated with the first step of QR on C
v = Housv(C1);
H(1:3,:) = H(1:3,:)-2*v*(v*H(1:3,:));
H(:,1:3) = H(:,1:3)-(H(:,1:3)*(2*v))*v;
% Do "bulge chasing" to return to Hessenberg form
n = length(H);
for j=1:n-2
k = min(j+3,n);
v = Housv(H(j+1:k,j)); % Find W=I-2vv to put zeros below H(j+1,j), H=WHW
H(j+1:k,:) = H(j+1:k,:)-2*v*(v*H(j+1:k,:));
H(:,j+1:k) = H(:,j+1:k)-(H(:,j+1:k)*(2*v))*v;
H(k,j) = 0;
end
NH=triu(H,-1);
end

78/97

function [b c] = qrpoly(H)
% Compute b and c of z^2+b*z+c = (z-sigma)(z-conj(sigma))
% where sigma is the Wilkinson double shift: eigenvalue of
% the 2x2 trailing submatrix closest to H(n,n)
global itr itc
HH
= H(end-1:end,end-1:end);
traHH = HH(1,1)+HH(2,2);
detHH = HH(1,1)*HH(2,2)-HH(1,2)*HH(2,1);
if traHH^2 > 4*detHH % Real eigenvalues
% Use as double shift the eigenvalue closer to H(n,n)
lambdaHH(1) = (traHH + sqrt(traHH^2-4*detHH))/2;
lambdaHH(2) = (traHH - sqrt(traHH^2-4*detHH))/2;
if abs(lambdaHH(1)-H(end,end))<abs(lambdaHH(2)-H(end,end))
lambdaHH(2) = lambdaHH(1);
else
lambdaHH(1) = lambdaHH(2);
end
% z^2+bz+c=(z-lambda_1)(z-lambda_1)|(z-lambda_2)(z-lambda_2)
b = -lambdaHH(1)-lambdaHH(2);
c = lambdaHH(1)*lambdaHH(2);
itr=itr+1;
else
% In the complex case, we want the char poly for HH
b = -traHH;
c = detHH;
itc = itc+1;
end
end

Algoritmo QR para matrices generales, con reduccin


inicial a Hessenberg, y doble desplazamiento implcito
tipo Francis.

79/97

 Los resultados

para una matriz


25  25 y otra de
1000  1000 son
estos.

>> [T it itd t]=qrstep_Francis_Bindel(A)


T =
-6.0770
5.2804
5.0190
3.2085 + 3.6195i
3.2085 - 3.6195i
0.0031 + 4.4372i
0.0031 - 4.4372i
-4.2104 + 0.7456i
-4.2104 - 0.7456i
-1.3585 + 3.9497i
-1.3585 - 3.9497i
1.2975 + 3.8800i
1.2975 - 3.8800i
-2.4416 + 2.7407i
-2.4416 - 2.7407i
2.8787 + 0.7120i
2.8787 - 0.7120i
-1.0840 + 1.8066i
-1.0840 - 1.8066i
-1.2594 + 0.9430i
-1.2594 - 0.9430i
-0.3809 + 0.9062i
-0.3809 - 0.9062i
0.6323
-0.1911
it =
7
itd =
27
t =
0.0624

>> sort(eig(A),descend)
ans =
-6.0770
5.2804
5.0190
3.2085 + 3.6195i
3.2085 - 3.6195i
0.0031 + 4.4372i
0.0031 - 4.4372i
-4.2104 + 0.7456i
-4.2104 - 0.7456i
-1.3585 + 3.9497i
-1.3585 - 3.9497i
1.2975 + 3.8800i
1.2975 - 3.8800i
-2.4416 + 2.7407i
-2.4416 - 2.7407i
2.8787 + 0.7120i
2.8787 - 0.7120i
-1.0840 + 1.8066i
-1.0840 - 1.8066i
-1.2594 + 0.9430i
-1.2594 - 0.9430i
-0.3809 + 0.9062i
-0.3809 - 0.9062i
0.6323
-0.1911

>> A=rand(1000);
>> A = (A - .5)*2;
>> [T it itd t]=qrstep_Francis_Bindel(A)
T =
7.123846740573868 +17.026981501328613i
7.123846740573868 -17.026981501328613i
16.624570346272108 + 7.937272245254786i
16.624570346272108 - 7.937272245254786i
-16.089705600685924 + 8.930438288025009i
-16.089705600685924 - 8.930438288025009i
-10.166595375856957 +15.258792634828080i
-10.166595375856957 -15.258792634828080i
17.167325994176007 + 6.377944580510263i
17.167325994176007 - 6.377944580510263i
18.249349262178139 + 0.000000000000000i
7.805032835495162 +16.405785237414399i
7.805032835495162 -16.405785237414399i
-8.822496260367785 +15.869321050483862i
-8.822496260367785 -15.869321050483862i
16.001083815170652 + 8.555659101012008i
16.001083815170652 - 8.555659101012008i
-3.803035356678313 +17.729394693350987i
-3.803035356678313 -17.729394693350987i
4.837154691757405 +17.460853314474601i
4.837154691757405 -17.460853314474601i
-17.976118771479754 + 2.032262837884847i
-17.976118771479754 - 2.032262837884847i
.
.
.
-1.748103565292426 - 1.443294519531504i
-2.229777171574543 + 0.000000000000000i
2.124127007088685 + 0.000000000000000i
-2.000980926645378 + 0.000000000000000i
-0.267964043130730 + 1.702030627215852i
-0.267964043130730 - 1.702030627215852i
1.251743319582046 + 0.303853777326017i
1.251743319582046 - 0.303853777326017i
-0.989726686530990 + 0.000000000000000i
0.222221915982704 + 0.687550759680182i
0.222221915982704 - 0.687550759680182i
it =
93
itd =
1116
t =
41.563322418069106
>> tic, [V S U]=eig(A); toc
Elapsed time is 1.323848 seconds.

80/97

Subespacios de Krylov

Alekxey Krylov, Rusia 1863-1945.

Recordamos que, para A 2 Cnn y 0 b 2 Cn1, al subespacio


Kj D Genfb; Ab : : : A j 1bg
se le denomina subespacio de Krylov.

Estos subespacios son la base de unos mtodos iterativos para el clculo de los
valores propios de A. Su ventaja esencial es que en ellos slo se llevan a cabo
multiplicaciones de matrices por vectores, lo cual es particularmente interesante
para matrices grandes y dispersas.

81/97

Si A tiene n valores propios distintos, 1; : : : ; n, con vectores propios


asociados x 1; : : : ; x n ortonormales (base ortonormal de Rn), cualquier vector
de Rn se puede escribir como combinacin lineal de esos vectores propios; en
particular, uno b D b1x 1 C b2x 2 C    C bnx n.

La matriz de Krylov, K

La matriz C n D K n 1AK n es tipo Hessenberg, es decir,

nj

D b Ab : : : A

j 1


b , se puede escribir entonces

2
1 1
61 
6 2
K n D c1 x 1 c2 x 2    cn x n 6 :: ::
4: :
1 n

3
j 1
   1
j 1
   2 7
7
:
: : : ::: 7
5
j 1
   n

@
@

@
@
@

82/97

La matriz de Krylov K n suele estar mal condicionada. Para obtener una buena
base de Im.K n/ se utiliza la factorizacin QnR n D K n de tal forma que
H
1
C n D K n 1 AK n D R 1 QH
n AQn R n ! Qn AQn D R n C n R n  H (matriz de Hessenberg):

Si se igualan las columnas k de la expresin anterior escrita AQn D QnH se


tiene que
Aq k D h1k q 1 C    C hkk q k C hkC1;k q kC1
expresin que relaciona el vector q kC1 y q 1; : : : ; q k .

Si se premultiplica por qjH , teniendo en cuenta la ortonormalidad,


hj k D qjH Aq k ;

j D 1; : : : ; k:

Estas expresiones dan lugar a la ya estudiada iteracin de Arnoldi que produce


una matriz unitaria Qn y una Hessenberg H n columna a columna.
 Ortogonalizacin

de A
por Iteracin de Arnoldi

Dado x 0 cualquiera

q 1 D x 0 = kx 0 k2
for k D 1; 2; : : :
uk D Aq k
for j D 1 to k
hj k D qjH uk
uk D uk hj k qj

Segn progresa el algoritmo, en la iteracin k , si Qk D


q 1 ; : : : ; q k , la matriz H k D QH
k AQk es Hessenberg y
sus valores propios, denominados valores de Ritz

Walther Ritz, Suiza, 1878-1909,

end

hkC1;k D kuk k2
if hkC1;k D 0 stop
q kC1 D uk = hkC1;k

son muy buenas aproximaciones de los valores propios de A .


Si y es un vector propio de H k , Qk y es un aproximacin de
un vector propio de A .

end

Si se requieren con precisin los valores propios de H k se pueden calcular por


otro mtodo por ejemplo la iteracin QR, siendo una tarea menor si k  n.

83/97

El coste en clculos de la iteracin de Arnoldi es elevado: cada nuevo q k se


debe ortogonalizar respecto a todos los vectores columna de Qk , por lo que se
reinicializa peridicamente desde un nuevo vector escogido adecuadamente.

Si A es simtrica o hermtica se utiliza la iteracin de Lanczos que consigue una


matriz tridiagonal.
 Ortogonalizacin

de A
por Iteracin de Lanczos

q 0 D 0; 0 D 0 y x 0 cualquiera
q 1 D x 0 = kx 0 k2
for k D 1; 2; : : :
uk D Aq k
k D q H
k uk
uk D uk k 1 q k 1 k q k
k D kuk k2
if k D 0 stop
q kC1 D uk =k

Cornelius Lanczos, Hungra,


1893-1974.

end

Si k D 0 los valores de Ritz son los valores propios exactos de A.

84/97

85/97

function [U H flag] = arnoldi_W(A,ns,x)


% Realiza ns iteraciones de Arnoldi con reortogonalizavin en A partiendo de x
%
% Si flag == 0, las columans de U are ortonormales, H(ns+1,ns) Hessenberg matrix y
%
A*U(:,1:ns) = U(:,1:ns+1)*H.
%
% Si flag == j > 0, se ha obtenido subespacio invariante en j iter. y
%
A*U(:,1:j) = U(:,1:j)*H(1:j,1:j).
%
flag = 0;
H = zeros(ns+1,ns); n
= size(A,1);
U = zeros(n,ns+1); U(:,1) = x/norm(x); delta = zeros(ns+1,1);
for jj = 1:ns
U(:,jj+1)
= A*U(:,jj);
% slo se usa A aqu
H(1:jj,jj) = U(:,1:jj)*U(:,jj+1);
U(:,jj+1)
= U(:,jj+1) - U(:,1:jj)*H(1:jj,jj); % ortogonaliza
delta(1:jj) = U(:,1:jj)*U(:,jj+1);
U(:,jj+1)
= U(:,jj+1) - U(:,1:jj)*delta(1:jj); % reortogonaliza
H(1:jj,jj) = H(1:jj,jj) + delta(1:jj);
H(jj+1,jj) = norm(U(:,jj+1));
if H(jj+1,jj) == 0, flag = jj; return, end
U(:,jj+1)
= U(:,jj+1)/H(jj+1,jj);
end
% arngo.m: script que demuestra las prestaciones de
end
load west0479, A = west0479;
% Matriz dispersa 479x479
n = size(A,1); ns = 30;
% 30 iteraciones de Arnoldi
randn(state,321)
% mismo vector aleatorio cada vez
x = randn(n,1); tic
% vector de partida aleatorioa
[U,H,flag] = arnoldi_W(A,ns,x);
if flag == 0
residual = norm(A*U(:,1:ns)-U*H)
orthocheck = norm(eye(ns+1)-U*U)
ritz = eig(H(1:ns,1:ns),nobalance), toc, tic
lam = eig(full(A));
% clculo de todos los val. propios de A
toc, figure(1)
plot(real(lam),imag(lam),r+,real(ritz),imag(ritz),bo)
end

arnoldi_W

86/97

El resultado del ejemplo arngo.m, con 30 iteraciones de Arnoldi, es este. Las


crucecitas rojas son los valores propios autnticos; los crculos azules los valores
de Ritz que los aproximan.
2000
1500
1000
500
0
500
1000
1500
2000
150

100

50

50

100

150

87/97

Comparacin de los mtodos


Clculo de todos los valores propios y vectores propios
Matrices generales reales o complejas. Reduccin preliminar a forma de
Hessenberg seguida de iteracin QR.
Matrices reales simtricas o complejas hermticas. Reduccin
preliminar a matriz tridiagonal seguida de iteracin QR.
Clculo de algunos valores y vectores propios
Matrices simtricas de tamao moderado. Reduccin preliminar a
matriz tridiagonal seguida de iteracin inversa.
Matrices de gran tamao. Mtodo con iteracin de Arnoldi para matrices
generales.
Lanczos para matrices simtricas o complejas hermticas.

88/97

ndice


Introduccin terica

Localizacin de valores propios

Obtencin numrica

Clculo de valores singulares

89/97

Clculo de los valores singulares




El clculo de los valores singulares de una matriz A, recordemos,


races cuadradas no negativas de los valores propios de A T A
se puede llevar a cabo, en principio, utilizando alguno de los mtodos expuestos,
aplicndolo a la matriz simtrica A T A.

Existen no obstante algoritmos ms especializados basados en iteraciones QR


de la matriz A, o en el de Jacobi.

90/97

Algoritmo de Golub y Reinsch.


Gene Howard Golub,
EE.UU. 1932-2007.

Primera fase: Bidiagonalizacin

Consiste en reducir con transformaciones de Householder la matriz A 2 Cmn a


una triangular superior bidiagonal. Es decir, hacer
 
donde

QB A B D B D

B1
,
0

3 9
d1 f2
>
>
6 d2 f3 0
7 >
=
6
7 >
6
::: ::: 7
n
6
7
BD6
>
7
:
>
: : fn 7 >
6 0
;
6
7 >
4
dn 5
m
0

QB D Qn    Q1 2 Rmm y B D 1    n

2 Rnn.

El esquema operativo que se seguira con una matriz A 64 es este:


 0 0
 0 0

 0 0

 0 0
 0 0
 Q 0 
 0 Q 0  0 Q 0  0
   Q 0 
0
0
1 0    1 0 
2 0 0  2 0 0 
3 0 0 
4 0 0 
 
0 0 0
0 0 0
0 0 
0 
0 
0 0 

0000
0 0 0
0 0 
0 
0 
0 0 

0000
0 0 0
0 0 
0 
0 
0 0 

Esta rutina de Matlab consigue el resultado.


function [Q1 A P1]= bidiag(A)
% Se bidiagonaliza A por Householder.
[m,n] = size(A); Q1=eye(m); P1=eye(n);
for k = 1:min(m,n)
% Introduce ceros debajo de la diagonal en la columna k.
u = A(:,k); u(1:k-1) = 0; sigma = norm(u);
if sigma ~= 0
if u(k) ~= 0, sigma = sign(u(k))*sigma; end
u(k) = u(k) + sigma; rho = 1/(sigma*u(k));
v = rho*(u*A); q1=rho*(u*Q1);
A = A - u*v; Q1 = Q1 - u*q1;
A(k+1:m,k) = 0;
end
% Introduce zeros a la derecha de la supradiagonal en la fila k.
u = A(k,:); u(1:k) = 0; sigma = norm(u);
if sigma ~= 0
if u(k+1) ~= 0, sigma = sign(u(k+1))*sigma; end
u(k+1) = u(k+1) + sigma; rho = 1/(sigma*u(k+1));
v = rho*(A*u); p1=rho*(P1*u);
A = A - v*u; P1 = P1 - p1*u;
A(k,k+2:n) = 0;
end
end
end

91/97

Algoritmo de Golub y Reinsch. Segunda fase




92/97

Ya A bidiagonal, se diagonalizarla mediante un algoritmo iterativo haciendo


B kC1 D U Tk B k V k ;

k D 1; 2; : : : ;

con U k y V k ortogonales, y tal que lKmk!1 B k D D diag.1; : : : ; n/.

Clculo prctico de la SVD (3)




La descomposicin en valores singulares


ser
U D
QB diag.Ude
y V D(3)
B V k .
k ; I la
m n/
culo
prctico
SVD

kD:::;2;1

D de una matriz bidiagonal B, de tamao nn:

kD1;2:::

0
0

0
T=BTB.

En la figura se esquematiza cmo se hace.


4

0 0 0

0 0 BG +
12
0 0 0

0 0
0
0 0 0
0

40
0
0
BG 24

0 0 0 0

0 0 G B 0
21
0 0 0

0 0
0
0 0 0
0

0 0 0

0 0 G B 0
43
0 0 0

0 +
0
0 0 0
0

+ 0 0

0 0 BG 0
13
0 0 0

0 0
0
0 0 0
0

0 0 0

0 0 BG 0
35
0 + 0

0 0
0
0 0 0
0

0 0 0

0 0 G B 0
32
+ 0 0

0 0
0
0 0 0
0

0 0 0

0 0 G B 0
54
0 0 0

0 0
0
0 0 +
0

, donde

SVD de unaA
matriz
V TB, de tamao nn:
D Ubidiagonal
0
Se puede aplicar el mtodo QR con desplazamiento a la matriz T=BTB.
Tambin se pueden aplicar una serie (tericamente infinita) de rotacion
Givens a B para hacerla diagonal:
ETSII-UPM

0

Se puede aplicar el mtodo QR con desplazamiento a la matriz
0 0
de
Tambin se pueden aplicar una serie (tericamente infinita) de rotaciones
0 0 0
Givens a B para hacerla diagonal:
0 0 0

0 0

0 0 BG +
12
0 0


0
0
0

0 0 0

+ 0 BG 0
24
0 0 0

0 0
0
0 0 0
0

0 0 0 0

0 0 G B 0
21
0 0 0

0 0
0
0 0 0
0

0 0 0

0 0 G B 0
43
0 0 0

0 +
0
0 0 0
0

+ 0 0

0 0 BG 0
13
0 0 0

0 0
0
0 0 0
0

0 0 0

0 0 BG 0
35
0 + 0

0 0
0
0 0 0
0

0 0 0

0 0 G B 0
32
+ 0 0

0 0
0
0
0 0 0

0 0 0

0 0 G B 0
54
0 0 0

0 0
0
0 0 +
0

0 0
0 0

0 0 0
0 0
0 0

0 0
0 0 0

0 0 0
0 0 Se comprueba que los elementos de la supra-diagonal tienden a cero
0 0 n-1 hasta el primero) y los de la diagonal a los valores singulares.

0 0 La convergencia puede ser acelerada utilizando desplazamiento.


0 0 0

Recordemos las ideas el algoritmo de Jacobi para el clculo de los valores propios de matrices simtricas,
pues se hace algo parecido.

(d

93/97

Cdigo de Matlab:

function [S U V it t t1 F]=svd_GolRein_1(A)
% Se calcula al descomposicin en valores singulares, [U S V]=U*S*V=A,
%
de una matriz cualquiera m x n.
% Sigue casi exactamente el "paper" de Golub y Reinsch, "Singular Value
% Decomposition and Least Squares Solutions", Numeri. Math., 14, 1970.
c=1; s=1;
% Comienzo iteracin QR
[m n]=size(A); tol=norm(A,fro)*sqrt(eps); itr=0; tic;
for
i=l+1:k
if n>m, A=A; [m n]=size(A); itr=1; end % Necesario m>=n
g=e(i); y=q(i); h=s*g; g=c*g;
% Bidiagonaliza A por Householder: U*B_n*V = A
e(i-1)=sqrt(f*f+h*h); z=e(i-1); c=f/z; s=h/z;
[U B_n V] = bidiag_Hansen(A); t1=toc; tic;
f=x*c+g*s; g=-x*s+g*c; h=y*s; y=y*c;
q=B_n(:,1); e=[0; B_n(1:n-1,2)]; U1=eye(m); V1=eye(n);
V1(:,[i-1 i])=V1(:,[i-1 i])*[c -s;s c];
k=n; it=0;
q(i-1)=sqrt(f*f+h*h); z=q(i-1); c=f/z; s=h/z;
while k>0
% Bucle principal proceso itera.
f=c*g+s*y; x=-s*g+c*y;
caso=1;
U1(:,[i-1 i])=U1(:,[i-1 i])*[c -s;s c];
for l=k:-1:1
end
if abs(e(l)) <=tol, e(l)=0;
caso=0; break, end
e(l)=0; e(k)=f; q(k)=x;
if abs(q(l-1))<=tol, q(l-1)=0;
break, end
it=it+1;
end
end
if caso
c=0; s=1; l1=l-1; % Cancelacin columna l-1: Givens U=U*U1; V=V1*V;
S=zeros(m,n);
% Valores singulares en S y salida resul.
for i=l:k
for
i=1:n
f=s*e(i); e(i)=c*e(i);
ssn=q(i); S(i,i)=abs(ssn); if ssn<0, V(i,:)=-V(i,:); end,
if abs(f)<=tol, break, end
end
g=q(i); h=sqrt(f*f+g*g); c=g/h; s=-f/h; q(i)=h;
[q ix]=sort(diag(S),descend);
U1(:,[l1 i])=U1(:,[l1 i])*[c -s;s c];
for i=1:n, S(i,i)=q(i); end
% Valores sing. en S de + a end
ix1=1:m;
P1=eye(m);
ix1(1:n)=ix;
P1=P1(:,ix1);
U=U*P1; V=V(ix,:);
end
F=max(max(U*S*V-A)); t=toc;
% Chequeo precisin resultados
z=q(k);
% Comprobar convergencia
if itr==1, S=S; Te=U; U=V; V=Te; end % Si m<n, trasponer resultados
if l==k
if nargout==1, S=diag(S); end
if z<0, q(k)=-z; V1(:,k)=-V1(:,k); end
end
k=k-1; continue
end
x=q(l); y=q(k-1); g=e(k-1); h=e(k); % Clculo desplazami. con 2x2
f=((y-z)*(y+z)+(g-h)*(g+h))/(2*h*y); g=sqrt(f*f+1);
f=((x-z)*(x+z)+h*(y/(f+(sign(f)+(f==0))*g)-h))/x;

94/97

Utilicemos el algoritmo en una pequea sesin de Matlab.


>> A=[1 2 3;3 4 5;6 7 8];
>> [S U V]=svd_GolRein_1(A)
S =
14.5576
0
0
0
1.0372
0
0
0
0.0000
U =
-0.2500
-0.8371
-0.4867
-0.4852
-0.3267
0.8111
-0.8379
0.4389
-0.3244
V =
-0.4625
-0.5706
-0.6786
0.7870
0.0882
-0.6106
0.4082
-0.8165
0.4082
>> U*S*V
ans =
1.0000
2.0000
3.0000
3.0000
4.0000
5.0000
6.0000
7.0000
8.0000

>> A=rand(1000);
>> A = (A - .5)*2;

Tiempos

>> tic, [S U V]=svd_GolRein_1(A); toc


Elapsed time is 13.971564 seconds.
>> tic, [V S U]=svd(A); toc
Elapsed time is 0.315793 seconds.

>> A=[1 2 3;3 4 5;6 7 8];


>> [V S U]=svd(A)
V =
-0.2500
-0.8371
-0.4867
-0.4852
-0.3267
0.8111
-0.8379
0.4389
-0.3244
S =
14.5576
0
0
0
1.0372
0
0
0
0.0000
U =
-0.4625
0.7870
0.4082
-0.5706
0.0882
-0.8165
-0.6786
-0.6106
0.4082
>> V*S*U
ans =
1.0000
2.0000
3.0000
3.0000
4.0000
5.0000
6.0000
7.0000
8.0000

95/97

1 0 0 0 2
Para una matriz complicada como M D 00 00 30 00 00 :
04000

>> M=[1 0 0 0 2;0 0 3 0 0;0 0 0 0 0;0 4 0 0 0]


M =
1
0
0
0
2
0
0
3
0
0
0
0
0
0
0
0
4
0
0
0
>> [S U V]=svd_GolRein_1(M)
S =
4.0000
0
0
0
0
0
3.0000
0
0
0
0
0
2.2361
0
0
0
0
0
0
0
U =
0
0
-1
0
0
-1
0
0
0
0
0
1
1
0
0
0
V =
0
1.0000
0
0
0
0
0
-1.0000
0
0
-0.4472
0
0
0
-0.8944
0
0
0
1.0000
0
0
0
0
0
1.0000

>> [U S V]=svd(M)
U =
0
0
1
0
1
0
0
0
0
1
0
0
S =
4.0000
0
0
3.0000
0
0
0
0
V =
0
0
1.0000
0
0
1.0000
0
0
0
0

0
0
-1
0
0
0
2.2361
0

0
0
0
0

0
0
0
0

0.4472
0
0
0
0.8944

0
0
0
1.0000
0

-0.8944
0
0
0
0.4472

96/97

Algoritmo de Jacobi


Las races cuadradas no negativas de los valores propios de AA T son los valores
singulares de A. Utilicemos Jacobi para calcular aquellos valores propios.
>> A=[1 2 3;3 4 5;6 7 8];
>> [V D it]=Jacobi_val_12(A*A)
V =
0.7870
0.4082
-0.4625
0.0882
-0.8165
-0.5706
-0.6106
0.4082
-0.6786
D =
0.0000
1.0759
211.9241
it =
6
>> sqrt(D)
ans =
0.0000
1.0372
14.5576

>> A=[1 2 3;3 4 5;6 7 8];


>> [V S U]=svd(A)
V =
-0.2500
-0.8371
-0.4867
-0.4852
-0.3267
0.8111
-0.8379
0.4389
-0.3244
S =
14.5576
0
0
0
1.0372
0
0
0
0.0000
U =
-0.4625
0.7870
0.4082
-0.5706
0.0882
-0.8165
-0.6786
-0.6106
0.4082
>> V*S*U
ans =
1.0000
2.0000
3.0000
3.0000
4.0000
5.0000
6.0000
7.0000
8.0000

Con la matriz M :

>> [V D it]=Jacobi_val_12(M*M)
V =
0.4472
0
0
0 -0.8944
0 1.0000
0
0
0
0
0 1.0000
0
0
0
0
0 1.0000
0
0.8944
0
0
0 0.4472
D =
0
0
5
9
16
it =
1
>> sqrt(D)
ans =
0
0
2.2361
3.0000
4.0000

Algo ms sofisticado, aunque en lo esencial igual:


function [U S V] = svd_J(A,tol)
% SVDJ Singular value decomposition using Jacobi algorithm.
if nargin == 1, tol = eps; end
% Tolerancia por defecto
[M,N] = size(A); K = min(M,N);
% K es el nmero de valores singulares
On = 0;
for c=A, On=On + sum(abs(c).^2); end
On=On./N;
% Suma coef.^2/N
Previous_Off = Inf; V = eye(N);
while true
R = 0;
% Contar las rotaciones
for r = 1:N - 1
for c = r + 1:N
% Calculate the three elements of the implicit matrix B that are
% needed to calculate a Jacobi rotation. Since B is Hermitian, the
% fourth element (b_cr) is not needed.
b_rr = sum(abs(A(:,r)).^2);
% Real value.
b_cc = sum(abs(A(:,c)).^2);
% Real value.
b_rc = A(:,r) * A(:,c);
% Same type as A.
% Calculate a Jacobi rotation (four elements of G). The two values
% that we calculate are a real value, C = cos(theta) and S, a value
% of the same type as A, such that |S| = sin(theta).
m = abs(b_rc);
if m ~= 0 % If the off-diagonal element is zero, we dont rotate.
tau = (b_cc - b_rr)/(2*m); % tau is real and will be zero if
% the two on-diagonal elements are
% equal. In this case G will be an
% identity matrix, and there is no
% point in further calculating it.
if tau ~= 0
R = R + 1; % Count the rotation we are about to perform.
t
= sign(tau)./(abs(tau) + sqrt(1+tau.^ 2));
C
= 1./sqrt(1 + t.^ 2);
S
= (b_rc.* t.* C)./ m;
% Initialize the rotation matrix, which is the same size as the
% implicit matrix B.
% We have to create an identity matrix here of the same type as A,
% that is, quaternion if A is a quaternion, double if A is double.
% To do this we use a function handle (q.v.) constructed from the
% class type of A. This was done before the loop, since the type
% of A is invariant.
G = eye(N); G(r,r) = C; G(c,c) = C; G(r,c) = S; G(c,r) =-conj(S);
A = A * G;
V = V * G;
end
end
end
end

97/97

if R == 0, error(No rotations performed during sweep.), end


% Calculate the sum of the off-diagonal elements of the matrix B.
B = A * A;
Off = sum(sum(abs(triu(B,1))))/(N.^2); % Normalise by the matrix size!
if (Off/On) < tol, break; end
% Off-diagonal sum is small enough to stop.
if Previous_Off < Off
warning(QTFM:information, ...
Terminating sweeps: off diagonal sum increased on last sweep.)
break;
end
Previous_Off = Off;
end
% Extract and sort the singular values. The vector T may be longer than the
% number of singular values (K) in cases where A is not square.
[T,IX] = sort(sqrt(abs(diag(B))),descend);
if nargout == 0 || nargout == 1 % .. only the singular values are needed.
U = T(1:K);
end
if nargout == 3 % .. the singular vectors and singular values are needed.
A = A(:, IX); % Map the columns of A and V into the same order as the
V = V(:, IX); % singular values, using the sort indices in IX.
% Construct the left singular vectors. These are in A but we need
% to divide each column by the corresponding singular value. This
% calculation is done by replicating T to make a matrix which can
% then be divided into A element-by-element (vectorized division).
U = A./ repmat(T,M,1);
S = diag(T); % Construct a diagonal matrix of singular values from
% the vector T, because when there are three output
% parameters, S is required to be a matrix.
end
end

Das könnte Ihnen auch gefallen