Sei sulla pagina 1di 4

Métodos Numéricos

Reporte No 5
Método de las Potencias

Marcos Ibarra

Núcleo de Investigación y Desarrollo Tecnológico–FPUNA


Universidad Nacional de Asunción–San Lorenzo
ibarrag84@gmail.com

Mayo 2019

Intrucciones:

Escribir el código de una rutina (Python o Matlab) que reciba los siguientes datos:
una matriz cuadrada Ak×k

dos parámetros enteros: s, y f ,


dos parámetros reales: e > 0, y u,
y que realice las siguientes funciones:

Si s = 0, los valores de u y f no importan y la rutina ejecuta el método de las potencias (directo), con
parámetro de tolerancia e
Si s = 1, la rutina ejecutará el método de iteración (inversa) desplazada con parámetro de desplazamiento u,
y tolerancia e, de acuerdo con la siguiente especificación; el sistema lineal implicado en la rutina será resuelto
usando:
• Factorización LU si f = 0.
• Factorización QR si f = 1.

Algoritmo de implementación hecho en Python

1 ”””
C r e a t e d on Tue May 14 1 7 : 1 4 : 3 7 2019
3
@author : Marcos I b a r r a
5 ”””
im po rt numpy a s np
7 im po rt time
im po rt s c i p y . l i n a l g a s l a
9

11
d e f r e p o r t e 5 (A, s , f , e , u ) :
13 #t 0 = time . time ( )
x=( l e n (A) , 1 )
15 z=np . o n e s ( x )
w=np . z e r o s ( x )
17 n=0
############ Caso s=0 ######################
19 i f s ==0:
w h i l e np . l i n a l g . norm ( z−w)>e :
21 n=n+1
w=z
23 z=np . dot (A, w)
f o r i i n r a n g e ( l e n (A) ) :
25 i f abs ( z [ i ] )==max( abs ( z ) ) :
break
27 z=z / z [ i ]
############ Caso s !=0 y f =0 ###############
29 i f s !=0 and f ==0:

1
w h i l e np . l i n a l g . norm ( z−w)>e :
31 n=n+1
w=z
33 p , l , v=l a . l u (A) # F a c t o r i z a c i ó n LU
A=np . dot ( v , l )
35 z=np . dot ( l a . i n v (A−u∗np . e y e ( l e n (A) ) ) ,w)
f o r i i n r a n g e ( l e n (A) ) :
37 i f abs ( z [ i ] )==max( abs ( z ) ) :
break
39 z=z / z [ i ]
############# Caso s !=0 y f =1 ##############
41 i f s !=0 and f ==1:
w h i l e np . l i n a l g . norm ( z−w)>e :
43 n=n+1
w=z
45 q , r=l a . q r (A) # F a c t o r i z a c i ó n QR
A=np . dot ( r , q )
47 z=np . dot ( l a . i n v (A−u∗np . e y e ( l e n (A) ) ) ,w)
f o r i i n r a n g e ( l e n (A) ) :
49 i f abs ( z [ i ] )==max( abs ( z ) ) :
break
51 z=z / z [ i ]
############## C á l c u l o d e l A u t o v a l o r #####################
53 a u t o v a l o r=f l o a t ( ( np . dot ( np . dot ( np . m a t r i x . t r a n s p o s e ( z ) ,A) , z ) ) / ( np . dot ( np . m a t r i x . t r a n s p o s e ( z ) , z )
))
############## I m p r i m i r r e s u l t a d o s ############
55 p r i n t ( ’ a u t o v a l o r= ’ , a u t o v a l o r )
p r i n t ( ’ a u t o v e c t o r= ’ , z )
57 p r i n t ( ’ n ◦ de i n t e r a c i o n e s= ’ , n )
################## E j e c u c i ó n d e l a l g o r i t m o ##################
59 t 0 = time . time ( )
r e p o r t e 5 (A, s , f , e , u ) # I n g r e s a r d a t o s
61 p r i n t ( ’ Tiempo de e j e c u s i ó n= ’ , time . time ( )−t 0 )

Un ejemplo:

Sea la matriz  
1 2 3
A = 2 2 3
3 3 3
Encontremos el autovalor dominante de la matriz A, ejecutando reporte5(A,s,f,e,u) con s = 0 y error e = 10−15 .
Obtendremos:

autovalor= 7.516538485191787
autovector= [[0.7058062 ] [0.79970663] [1.]]
n◦ de interaciones= 20
Tiempo de ejecusión= 0.006070613861083984

Experimentos: (En cada caso usar tolerancia e = 10−5 )


1. Para k = 10, 100, 1000, construya matrices aleatorias Zk y ejecute la rutina para las matrices Ak = ZkT Zk ,
para hallar su autovalor más cercano a u = 500. Construya una tabla comparando el tiempo de convergencia
entre los métodos usando QR y LU , e informando el número de iteraciones en cada caso, ası́ como el autovalor
encontrado.

Solución

######## Datos ###################


2 Z=np . random . rand ( k , k ) # k =10 ,100 ,1000
A=np . dot ( np . m a t r i x . t r a n s p o s e ( Z ) , Z )
4 ######## Ejecutamos ##############
r e p o r t e 5 (A, 1 , f , 1 0 ∗ ∗ ( −5) , 5 0 0 ) # f =0 ,1

2
Para k = 10

Método LU
Método QR
autovalor= 20.765451564049005
autovalor= 26.583061329594717
n◦ de interaciones= 211
n◦ de interaciones= 184
Tiempo de ejecusión= 0.1406567096710205
Tiempo de ejecusión= 0.18754148483276367

Para k = 100

Método LU Método QR
autovalor= 529.6202455169814 autovalor= 34.23826220460333
n◦ de interaciones= 589 n◦ de interaciones= 800
Tiempo de ejecusión= 5.417999029159546 Tiempo de ejecusión= 17.30072283744812

Para k = 1000

Método LU Método QR
Imposible para mi máquina (sobrecalentamiento) Imposible para mi máquina (sobrecalentamiento)
2. Considere la matriz  
226 −171 90 −13 66
−171 162 −15 −13 −57
 
 90
A= −15 284 32 8 
 −13 −13 32 55 −16
66 −57 8 −16 128

y ejecute la rutina para encontrar su mayor autovalor, su menor autovalor, y su autovalor más cercano a
u = 100. Utilice la factorizacion QR o LU en función de cuál de los dos genero menor tiempo de convergencia
en el experimento anterior, si acaso hubo diferencia apreciable.

Solución

Por el método directo (s=0), obtenemos:

autovalor= 437.20353442621666 (Mayor)


n◦ de interaciones= 22
Tiempo de ejecusión= 0.004999399185180664

Por los métodos LU y QR con u = 100

Método LU
Método QR
autovalor= 71.26717708422018
autovalor= 101.30224993708954
n◦ de interaciones= 66
n◦ de interaciones= 24
Tiempo de ejecusión= 0.04599952697753906
Tiempo de ejecusión= 0.01718759536743164
Para obtener el menor autovalor, podemos observar la diagonal principal de la matriz A en la última iteración
del QR:
 
437.203534e + 02 1.71761116e − 04 −1.26657645e − 14 −3.45675414e − 14 −4.65880902e − 15
 1.71761116e − 04 2.57362224e + 02 2.10369763e − 08 2.80257674e − 14 −3.40346409e − 14
 
−2.90905649e − 14 2.10369533e − 08 1.01302250e + 02 5.02994126e − 04 −6.43869095e − 15
 
−7.23771749e − 19 5.97082193e − 14 5.02994126e − 04 5.87062854e + 01 3.08895451e − 17 
9.02130832e − 70 −1.17823846e − 64 2.26365349e − 56 −1.26233687e − 49 4.25706035e − 01

El menor autovalor es 0.425706035.

3. Elabore una conclusión sobre a partir de los experimentos.

3
a) En el experimento 1,
Para k = 10, en el método QR, el autovalor es mas cercano, el número de interaciones es menor, pero
el tiempo de ejecusión es mayor al de LU. Esto se ve reflejado en el resultado para k = 100, donde el
tiempo de ejecusión y el número de iteraciones del metodo QR es mucho mayor al de LU y donde además
el método LU dio un autovalor mucho mas cercano que el de QR.
Para valores de k pequeños, el método QR (aunque mas costoso) da mejores resultados que el de LU.
Para valores de k muy grandes no es aconsejable aplicar QR.
b) En el experimento 2, se verifica lo anterior.
El método QR dá mejores resultados que el de LU para matrices no muy grandes.

Potrebbero piacerti anche