9.6.19 pvpbtrf

a,info= PySLK.pvpbtrf(ACTS_a,[bw,ja])

La rutina "pvpbtrf" computa una factorización de Cholesky de una matriz simétrica definida positiva $N \times N$ en bandas con ancho de la banda bw. La reordenación se utiliza para incrementar el paralelismo en la factorización. Esta reordenación produce que los factores sean diferentes a los obtenidos en códigos secuenciales. Estos factores no pueden ser utilizados directamente por los usuarios. Sin embargo, pueden ser utilizados en llamadas a pvdbtrs para solucionar sistemas lineales. La factorización tiene el siguiente aspecto:

\begin{displaymath}PAP^{T}=U'U, \ si \ {\code uplo='U'}\end{displaymath}

o

\begin{displaymath}PAP^{T}=LL', \ si \ {\code uplo='L'}\end{displaymath}

donde $U$ es una matriz triangular con banda superior, $L$ es una matriz triangular con banda inferior, y $P$ es una matriz de permutación.

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=7
#Initiliaze the Grid
PyACTS.gridinit(nb=4,nprow=1)
if PyACTS.iread==1:
    print "Ejemplo de Utilizacion ScaLAPACK: PvPBTRF"
    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)
    print "a=",a
else:
    a=None
#We convert Numeric Array to PyACTS.Scalapack Array
ACTS_lib=501 # 1=Scalapack
bw=2
pivot='pb'
a=Num2PyACTS(a,ACTS_lib,bwu=bw,bwl=bw,piv=pivot)
#We call ScaLAPACK routine
print "bwu=",bw,";bwl=",bw
a,info= PySLK.pvpbtrf(a,bw=2)
a=PyACTS2Num(a,bwu=bw,bwl=bw,piv=pivot)
if PyACTS.iread==1:
    print "A=",a
    print "Info:",info
PyACTS.gridexit()

El resultado de este código es el siguiente:

mpirun -np 1 /home/vgaliano/mpipython/mpipython exPyScapvpbtrf.py 
Ejemplo de Utilizacion ScaLAPACK: PvPBTRF
N= 7 ;nprow x npcol: 1 x 1
Tam. Bloques: 4 * 4
a= [[ 9.  1.  1.  1.  1.  1.  1.]
 [ 1.  9.  1.  1.  1.  1.  1.]
 [ 1.  1.  9.  1.  1.  1.  1.]
 [ 1.  1.  1.  9.  1.  1.  1.]
 [ 1.  1.  1.  1.  9.  1.  1.]
 [ 1.  1.  1.  1.  1.  9.  1.]
 [ 1.  1.  1.  1.  1.  1.  9.]]
bwu= 2 ;bwl= 2
A= [[ 3.          0.33333333  0.33333333  0.          0.          0.        
        0.        ]
 [ 1.          2.98142397  0.2981424   0.3354102   0.          0.        
        0.        ]
 [ 1.          1.          2.96647939  0.30338994  0.33709993  0.        
        0.        ]
 [ 0.          1.          1.          2.96571316  0.30270199  0.33718703
        0.        ]
 [ 0.          0.          1.          1.          2.96559187  0.30278368
        0.33720082]
 [ 0.          0.          0.          1.          1.          2.96557363
        0.30277485]
 [ 0.          0.          0.          0.          1.          1.        
        2.96557296]]
Info: 0

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