c=PyPBLAS.pvsyrk(alpha,a,beta,c[,uplo,trans])
La función "PyPBLAS.pvsyrk" implementa la siguiente operación entre matrices teniendo en cuenta que este tipo de matrices son simétricas:
PyPBLASpvsyrk
informará de ello y no podrá finalizar la
operación.
Esta rutina se provee para matrices simétricas con elementos de tipo real o
complejo. Un detalle importante en esta rutina es la suposición que las
matrices de entrada son simétricas, de este modo se realizan los cálculos
con la parte superior (o inferior) a la diagonal. El resultado válido en la
matriz devuelta por la función será el situado en la posición que le
indiquemos a través del parámetro uplo
.
Las características de cada uno de los parámetros son las siguientes:
Parametros de Entrada
uplo='U'
: (Valor por defecto).Se obtienen los resultados en la
diagonal principal y por encima de ella.
uplo='L'
: Se obtienen los resultados en la diagonal principal y por
debajo de ella.
a
:
trans='N'
: (Valor por defecto).No se realiza la transpuesta y la
operación que se lleva a cabo es :
.
trans='T'
: Se realiza la transpuesta y la operación que se lleva a
cabo es :
.
Parametros de Salida
A continuación mostramos un ejemplo en la utilización de esta rutina:
from PyACTS import * import PyACTS.PyPBLAS as PyPBLAS from RandomArray import * from Numeric import * #Dimension of Arrays n,k=6,6 #Initiliaze the Grid PyACTS.gridinit() if PyACTS.iread==1: print "Example of using PyPBLAS 3: PvSYRK" print "N=",n,";nprow x npcol:",PyACTS.nprow,"x",PyACTS.npcol print "Block's size:",PyACTS.mb,"*",PyACTS.nb a=ones([n,k]) print "a=",a c=reshape(range(n*n),[n,n]) print "c=",c alpha,beta=2.,3. print "alpha=",alpha,";","beta=",beta else: alpha,a,beta,c=None,None,None,None #We convert Numeric Array to PyACTS.Scalapack Array ACTS_lib=1 # 1=Scalapack alpha=Scal2PyACTS(alpha,ACTS_lib) beta=Scal2PyACTS(beta,ACTS_lib) a=Num2PyACTS(a,ACTS_lib) c=Num2PyACTS(c,ACTS_lib) #We call PBLAS routine c= PyPBLAS.pvsyrk(alpha,a,beta,c) c_num=PyACTS2Num(c) if PyACTS.iread==1: print "PvSYRK=",transpose(c_num) PyACTS.gridexit()
[vgaliano@localhost EXAMPLES]$ mpirun -np 4 mpipython exPypvsyrk.py Example of using PyPBLAS 3: PvSYRK N= 6 ;nprow x npcol: 2 x 2 Block's size: 2 * 2 a= [[1 1 1 1 1 1] [1 1 1 1 1 1] [1 1 1 1 1 1] [1 1 1 1 1 1] [1 1 1 1 1 1] [1 1 1 1 1 1]] c= [[ 0 1 2 3 4 5] [ 6 7 8 9 10 11] [12 13 14 15 16 17] [18 19 20 21 22 23] [24 25 26 27 28 29] [30 31 32 33 34 35]] alpha= 2.0 ; beta= 3.0 PvSYRK= [[ 12. 6. 12. 18. 24. 30.] [ 15. 33. 13. 19. 25. 31.] [ 18. 36. 54. 20. 26. 32.] [ 21. 39. 57. 75. 27. 33.] [ 24. 42. 60. 78. 96. 34.] [ 27. 45. 63. 81. 99. 117.]]
a
y c
lo son y el resultado de la
operación descrita ha de genera una matriz simétrica. Como por defecto
uplo='U'
, el resultado es una matriz simétrica con los valores
correctos situados en y por encima de la diagonal.
Si ejecutaramos c,descc=PyPBLAS.pvsyrk(alpha,a,beta,c,uplo='L')
,
podríamos comprobar que los valores correctos se obtienen en y por debajo de
la diagonal principal.
See Sobre este documento... para sugerencias en cambios.