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
Se asume que es una matriz simetrica y es una matriz simétrica positiva.
Las características de cada uno de los parámetros son las siguientes:
Parámetros de Entrada
a
: Matriz simétrica de dimensiones .
b
: Matriz simétrica de dimensiones .
ibtype
: Número entero que indica el tipo de problema a ser resuelto:
ibtype=1
:
ibtype=2
:
ibtype=3
:
range
: Indica qué valores únicos deberemos calcular::
range='A'
: Todos los valores únicos.
range='V'
: Todos los valores únicos en el intervalo [vl
,vu
].
range='I'
: Los valores únicos desde el il
-ésimo hasta el iu
-ésimo.
uplo
: Especifica la parte de la matriz simétrica que es utilizada para realizar el cálculo:
uplo='U'
: Únicamente la parte superior triangular de la matriz es utilizada para definir los elementos de la matriz.
uplo='L'
: Únicamente la parte inferior triangular de la matriz es utilizada para definir los elementos de la matriz.
vl
: Si range='V'
, el limite inferior para buscar los valores únicos. Por defecto este valor es 0.
vu
: Si range='V'
, el limite superior para buscar los valores únicos. Por defecto este valor es 0.
il
: Si range='I'
, el índice inferior(desde el más pequeño hasta el más grande) de los valores únicos devueltos por defecto, il>=1
.
iu
: Si range='I'
, el índice superior (desde el más pequeño hasta el más grande) de los valores únicos devueltos por defecto, iu<=n
.
abstol
: Real. Indica el valor absoluto de tolerancia para los valores únicos.
orfac
: Real. Indica qué vectores ortogonales deberían ser reortogonalizados.
Parámetros de Salida
m
: Número de valores únicos encontrados.
nz
: Número de vectores ortogonales computados.
w
: Vector de tipo Numeric de tamaño donde se devuelven los valores singulares de la matriz .
z
: Matriz de tipo PyACTS de tamaño donde se devuelven los vectores singulares de la matriz .
ifail
: Vector de tipo Numeric de tamaño . Si jobz='V'
, entonces los primeros m
elemementos de ifail=0
. Si (mod(info,2)<>0) entonces ifail
contiene los indices del vector que falló en la convergencia.
icluster
: Vector de tipo Numeric de tamaño
. Este vector contiene los indices de los vectores ortogonales correspondientes a un cluster de valores únicos que no puedieron ser ortogonalizados debido a insuficiente espacio de trabajo (ver lwork
, orfac
y info
).
gap
: Vector de tipo Numeric de tamaño . Este vector contiene el salto entre aquellos valores unicos que no pudieron ser ortogonalizados.
info
: Resultado global de la ejecución
= 0
: Ejecución con éxito
< 0
: Si el argumento i-esimo es una matriz y la entrada j-esima
tuvo un valor ilegal, entonces info=-(i*100+j)
. Si el argumento i-esimo es un
escalar y tuvo un valor ilegal, entonces info=-i
.
> 0
: Si mod(info,2)<>0
, entonces uno o mas vectores ortogonales fallaron en la convergencia.
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()
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.