9.5.2 pvsygvx

m,nz,w,z,ifail,iclustr,gap,info= PySLK.pvsyevx(a[,jobz,range,uplo,orfac,rcond,vl,vu,il,iu])

La rutina "pvsygvx" calcula todos los valores únicos y, opcionalmente los vectores ortogonales de un problema de valores únicos de la forma


\begin{displaymath}A \times X = \lambda \times B \times X \end{displaymath}

,

\begin{displaymath}A \times B \times X = \lambda \times X \end{displaymath}

o

\begin{displaymath}B \times A \times X = \lambda \times X \end{displaymath}

Se asume que $A$ es una matriz simetrica y $B$ es una matriz simétrica positiva.

Las características de cada uno de los parámetros son las siguientes:

A continuación mostramos un ejemplo en la utilización de esta rutina:

from PyACTS import *
import PyACTS.PyScaLAPACK as PySLK
from RandomArray import *
from Numeric import *
n=8
#Initiliaze the Grid
PyACTS.gridinit()
if PyACTS.iread==1:
        print "Ejemplo de Utilizacion ScaLAPACK: PvSYEVX"
        print "N=",n,";nprow x npcol:",PyACTS.nprow,"x",PyACTS.npcol
        print "Tam. Bloques:",PyACTS.mb,"*",PyACTS.nb
        a=8*identity(n,Float)
        print "a=",a
        b=0.5 * identity(n,Float)
        print "b=",b

else:
        a,b=None,None
#We convert Numeric Array to PyACTS.Scalapack Array
ACTS_lib=1 # 1=Scalapack
a=Num2PyACTS(a,ACTS_lib)
b=Num2PyACTS(b,ACTS_lib)
#We call PBLAS routine
m,nz,w,z,ifail,iclustr,gap,info= PySLK.pvsygvx(a,b,1)
z_num=PyACTS2Num(z)
if PyACTS.iread==1:
        print "Eigenvalues --> w'=",transpose(w)
        print "Info:",info
PyACTS.gridexit()
De esta rutina queremos destacar el hecho que w es una matriz de tipo Numeric y será conocida por todos los procesos que intervienen en la malla. Sin embargo, z es una matriz de tipo PyACTS, lo que implica que sus valores se encuentran distribuidos entre los distintos procesos que intervienen en la malla. En el caso que quisieramos obtener toda los valores en un único proceso, éste debería llamar a la función PyACTS2Num tal y como se indica en este ejemplo. El resultado de este código es el siguiente:
[vgaliano@localhost EXAMPLES]$ mpirun -np 4 mpipython exPyScapvsygvx.py
Ejemplo de Utilizacion ScaLAPACK: PvSYEVX
N= 8 ;nprow x npcol: 2 x 2
Tam. Bloques: 32 * 32
a= [[ 8.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  8.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  8.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  8.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  8.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  8.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  8.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  8.]]
b= [[ 0.5  0.   0.   0.   0.   0.   0.   0. ]
 [ 0.   0.5  0.   0.   0.   0.   0.   0. ]
 [ 0.   0.   0.5  0.   0.   0.   0.   0. ]
 [ 0.   0.   0.   0.5  0.   0.   0.   0. ]
 [ 0.   0.   0.   0.   0.5  0.   0.   0. ]
 [ 0.   0.   0.   0.   0.   0.5  0.   0. ]
 [ 0.   0.   0.   0.   0.   0.   0.5  0. ]
 [ 0.   0.   0.   0.   0.   0.   0.   0.5]]
Eigenvalues --> w'= [ 16.  16.  16.  16.  16.  16.  16.  16.]
Info: 0

See Sobre este documento... para sugerencias en cambios.