w,z,info= PySLK.pvsyev(a,jobz,uplo)
La rutina pvsyev
resuelve todos los valores únicos y, opcionalmente,
los vectores únicos de una matriz simétrica de tipo real llamando a una
secuencia adecuada de las rutinas de PyScaLAPACK.
pvsyev
asume un sistema homogeneo y no realiza las comprobaciones de la consistencia
de los valores unicos y de los vectores unicos en los diferentes procesos. Por tanto, es posible que
un sistema heterogéneo pueda devolver resultados incorrectos sin mensajes de error.
Esta rutina se provee para matrices con elementos únicamente de tipo real.
Las características de cada uno de los parámetros son las siguientes:
Parámetros de Entrada
a
: Matriz simétrica de dimensiones .
jobz
: Indica si la rutina ha de calcular o no los vectores únicos.:
jobz='N'
: Calcula únicamente los valores únicos.
jobz='V'
: Calcula los valores únicos y los vectores únicos.
uplo
: Especifica la parte de la matriz 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.
Parámetros de Salida
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 .
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 info tiene un valor de 1 a n, entonces el i-esimo valor único no
converge despues de un total de 30*N iteraciones. Si info=n+1
, entonces se ha detectado
heterogeneidad en los valores únicos.
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: PvSYEV" 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 else: a=None #We convert Numeric Array to PyACTS.Scalapack Array ACTS_lib=1 # 1=Scalapack a=Num2PyACTS(a,ACTS_lib) #We call ScaLAPACK routine w,z,info= PySLK.pvsyev(a,jobz='V') z_num=PyACTS2Num(z) if PyACTS.iread==1: print "Eigenvalues --> w'=",transpose(w) print "Eigenvectors --> z=",z_num 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 exPyScapvsyev.py Ejemplo de Utilizacion ScaLAPACK: PvSYEV N= 8 ;nprow x npcol: 2 x 2 Tam. Bloques: 2 * 2 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.]] Eigenvalues --> w'= [ 8. 8. 8. 8. 8. 8. 8. 8.] Eigenvectors --> z= [[ 1. 0. 0. 0. 0. 0. 0. 0.] [ 0. 1. 0. 0. 0. 0. 0. 0.] [ 0. 0. 1. 0. 0. 0. 0. 0.] [ 0. 0. 0. 1. 0. 0. 0. 0.] [ 0. 0. 0. 0. 1. 0. 0. 0.] [ 0. 0. 0. 0. 0. 1. 0. 0.] [ 0. 0. 0. 0. 0. 0. 1. 0.] [ 0. 0. 0. 0. 0. 0. 0. 1.]] Info: 0
See Sobre este documento... para sugerencias en cambios.