9.8.2 pvormtr

c,info= PySLK.pvormtr(a,c,tau[side='L',uplo='U',trans='N'])
La rutina "pvormtr" 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 $n_q -1 $ elementos reflectores devueltos por pvsytrd.

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: PvORMTR"
	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=8*identity(n,Float)+ones([n,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.pvsytrd(a,uplo='U')
c,info= PySLK.pvormtr(a,c,tau,side='L',uplo='U',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:
mpirun -np 2 mpipython exPyScapvormtr.py 
Ejemplo de Utilizacion ScaLAPACK: PvORMTR
N= 8 ;nprow x npcol: 2 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 )   = 
 [[  5.64958374e+00  -2.17872498e+00   8.07120983e-01   2.76681884e+00
        -2.88117266e+00  -1.24169731e+00  -3.03098630e+00  -7.27051238e-03]
 [ -7.07833832e+00  -3.59293854e+00  -6.07092579e-01   1.35260528e+00
        -4.29538622e+00  -2.65591087e+00  -4.44519986e+00  -1.42148407e+00]
 [ -1.02445780e+00  -4.20968718e+00  -5.87146673e+00  -1.35520620e+00
         3.40100907e+00  -2.25888460e+00  -4.04817359e+00  -1.02445780e+00]
 [  7.96307252e-01   1.58399702e+00   6.54249961e+00   4.65558852e-01
         5.22177413e+00  -4.38119548e-01  -2.22740853e+00   7.96307252e-01]
 [ -1.72093663e+00  -1.59775765e+00  -1.76713419e+00  -8.43336633e+00
        -4.59483878e+00  -2.95536343e+00  -4.74465241e+00  -1.72093663e+00]
 [  1.84234827e-01   6.80150440e+00  -2.29753403e+00   2.00998262e+00
        -4.49924747e-02  -1.05019197e+00  -2.83948096e+00   1.84234827e-01]
 [  5.47855627e-01   5.47855627e-01   5.47855627e-01   5.47855627e-01
         5.47855627e-01   7.95441642e+00  -2.47586016e+00   5.47855627e-01]
 [  1.00000000e+00   1.00000000e+00   1.00000000e+00   1.00000000e+00
         1.00000000e+00   1.00000000e+00   1.00000000e+00   9.00000000e+00]]
Info: 0

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