9.9.2 pvormhr

c,info= PySLK.pvormhr(ACTS_a,ACTS_c,tau,ilo=1,ihi=-1,side='L',trans='N'])
La rutina "pvormhr" sobreeescribe en la matriz $M \times N$ por :

  side='L' side='R'
trans='N' $Q C$ $C Q$
trans='T' $Q^T C$ $C Q^T$

donde Q es una matriz real ortogonal distribuida de orden $n_q$, donde $n_q=m$ si side='L' y $n_q=n$ si side='R' . $Q$ está definida como el producto de de ihi-ilo elementos reflectores devueltos por pvgehrd.

Esta rutina se provee para matrices con elementos de tipo real y 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 PyACTS.PyScaLAPACK as PySLK
from RandomArray import *
from Numeric import *
n,nrhs=8,2
#Initiliaze the Grid
PyACTS.gridinit(nb=2)
if PyACTS.iread==1:
	print "Ejemplo de Utilizacion ScaLAPACK: PvORMHR"
	print "N=",n,";nprow x npcol:",PyACTS.nprow,"x",PyACTS.npcol
	print "Tam. Bloques:",PyACTS.mb,"*",PyACTS.nb
	a=8*identity(n,Float)+ones([n,n],Float)
	c=identity(n,Float)
	print "a=",a
else:
	a,c=None,None
#We convert Numeric Array to PyACTS.Scalapack Array
ACTS_lib=1 # 1=Scalapack
a=Num2PyACTS(a,ACTS_lib)
c=Num2PyACTS(c,ACTS_lib)
#We call ScaLAPACK routine
a,tau,info= PySLK.pvgehrd(a)
c,info= PySLK.pvormhr(a,c,tau,side='L',trans='N')
c=PyACTS2Num(c)
if PyACTS.iread==1:
	print " Q * sub( C )   =",c
	print "Info:",info
PyACTS.gridexit()
El resultado de este código es el siguiente:
vgaliano@nodo0:~mpirun -np 1 mpipython exPyScapvormhr.py 
Ejemplo de Utilizacion ScaLAPACK: PvORMHR
N= 8 ;nprow x npcol: 1 x 1
Tam. Bloques: 2 * 2
a= [[ 9.  1.  1.  1.  1.  1.  1.  1.]
 [ 1.  9.  1.  1.  1.  1.  1.  1.]
 [ 1.  1.  9.  1.  1.  1.  1.  1.]
 [ 1.  1.  1.  9.  1.  1.  1.  1.]
 [ 1.  1.  1.  1.  9.  1.  1.  1.]
 [ 1.  1.  1.  1.  1.  9.  1.  1.]
 [ 1.  1.  1.  1.  1.  1.  9.  1.]
 [ 1.  1.  1.  1.  1.  1.  1.  9.]]
 Q * sub( C )   = 
 [[  1.00000000e+00   0.00000000e+00   0.00000000e+00   0.00000000e+00
         0.00000000e+00   0.00000000e+00   0.00000000e+00   0.00000000e+00]
 [  0.00000000e+00  -3.77964473e-01   9.25820100e-01   2.86846478e-16
         0.00000000e+00  -3.82461971e-17   0.00000000e+00   0.00000000e+00]
 [  0.00000000e+00  -3.77964473e-01  -1.54303350e-01   9.12870929e-01
         4.29954161e-16  -2.05924331e-16   7.81734838e-17   3.90867419e-17]
 [  0.00000000e+00  -3.77964473e-01  -1.54303350e-01  -1.82574186e-01
         8.94427191e-01   1.54898152e-16  -4.30229898e-17   1.42614004e-17]
 [  0.00000000e+00  -3.77964473e-01  -1.54303350e-01  -1.82574186e-01
        -2.23606798e-01   8.66025404e-01   2.10531269e-16   5.38700218e-17]
 [  0.00000000e+00  -3.77964473e-01  -1.54303350e-01  -1.82574186e-01
        -2.23606798e-01  -2.88675135e-01   8.16496581e-01  -8.49078562e-17]
 [  0.00000000e+00  -3.77964473e-01  -1.54303350e-01  -1.82574186e-01
        -2.23606798e-01  -2.88675135e-01  -4.08248290e-01  -7.07106781e-01]
 [  0.00000000e+00  -3.77964473e-01  -1.54303350e-01  -1.82574186e-01
        -2.23606798e-01  -2.88675135e-01  -4.08248290e-01   7.07106781e-01]]
Info: 0

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