8.4.9 pvher

a= PyPBLAS.pvher(alpha,x,a,[uplo='U'])

La función "PyPBLAS.pvher" implementa la siguiente operación entre vectores y matrices con elementos de tipo complejo:


\begin{displaymath}\alpha \cdot x \times x^{H} + A \to A \end{displaymath}

Se ha de tener en cuenta que $x^{H}$ será el vector transpuesto conjugado de x, mientras que $x^{T}$ se corresponde con la transpuesta de x. En el caso que las dimensiones de alguna de las entradas no sea correcta, la rutina PyPBLASpvher informará de ello y no podrá finalizar la operación.

Esta rutina se provee únicamente para matrices con elementos de tipo complejo. 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 PyPBLAS
from RandomArray import *
from Numeric import *
#Dimension of Arrays
n=6
#Initiliaze the Grid
PyACTS.gridinit()
if PyACTS.iread==1:
        print "Example of using PyPBLAS 2: PvHER"
        print "N=",n,";nprow x npcol:",PyACTS.nprow,"x",PyACTS.npcol
        print "Block's size:",PyACTS.mb,"*",PyACTS.nb
        alpha=5
        print "alpha=",alpha
        x=ones([n,1])+1.j*reshape(range(n),[n,1])
        print "x'=",transpose(x)
        a=identity(n,Complex)
        print "a=",a
else:
        alpha,a,x=None,None,None
#We convert Numeric Array to PyACTS.Scalapack Array
ACTS_lib=1 # 1=Scalapack
alpha=Scal2PyACTS(alpha,ACTS_lib)
x=Num2PyACTS(x,ACTS_lib)
a=Num2PyACTS(a,ACTS_lib)
#We call PBLAS routine
a= PyPBLAS.pvher(alpha,x,a)
a_num=PyACTS2Num(a)
if PyACTS.iread==1:
        print "PvHER=",transpose(a_num)
PyACTS.gridexit()
El resultado de este código es el siguiente:
[vgaliano@localhost EXAMPLES]$ mpirun -np 4 mpipython exPypvher.py
Example of using PyPBLAS 2: PvHER
N= 6 ;nprow x npcol: 2 x 2
Block's size: 2 * 2
alpha= 5
x'= [ [ 1.+0.j  1.+1.j  1.+2.j  1.+3.j  1.+4.j  1.+5.j]]
a= [[ 1.+0.j  0.+0.j  0.+0.j  0.+0.j  0.+0.j  0.+0.j]
 [ 0.+0.j  1.+0.j  0.+0.j  0.+0.j  0.+0.j  0.+0.j]
 [ 0.+0.j  0.+0.j  1.+0.j  0.+0.j  0.+0.j  0.+0.j]
 [ 0.+0.j  0.+0.j  0.+0.j  1.+0.j  0.+0.j  0.+0.j]
 [ 0.+0.j  0.+0.j  0.+0.j  0.+0.j  1.+0.j  0.+0.j]
 [ 0.+0.j  0.+0.j  0.+0.j  0.+0.j  0.+0.j  1.+0.j]]
PvHER= [[   6. +0.j    0. +0.j    0. +0.j    0. +0.j    0. +0.j    0. +0.j]
 [   5. -5.j   11. +0.j    0. +0.j    0. +0.j    0. +0.j    0. +0.j]
 [   5.-10.j   15. -5.j   26. +0.j    0. +0.j    0. +0.j    0. +0.j]
 [   5.-15.j   20.-10.j   35. -5.j   51. +0.j    0. +0.j    0. +0.j]
 [   5.-20.j   25.-15.j   45.-10.j   65. -5.j   86. +0.j    0. +0.j]
 [   5.-25.j   30.-20.j   55.-15.j   80.-10.j  105. -5.j  131. +0.j]]
Se ha de tener en cuenta que el parámetro por defecto para uplo='U', es decir, realizaremos los calculos unicamente que se encuentre en y por encima de la diagonal de la matriz resultante. Si quisieramos obtener la parte por debajo de la diagonal llamaríamos a la rutina del siguiente modo:
a= PyPBLAS.pvher(alpha,x,a,uplo='L')

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