8.4.5 pvtrsv

x= PyPBLAS.pvtrsv(a,x,[uplo='U',trans='N',diag='N'])

La función "PyPBLAS.pvtrsv" resuleve un sistema de ecuaciones del siguiente tipo:


\begin{displaymath}A^{-1} \cdot x \to x ; A^{-T} \cdot x \to x; A^{-H} \cdot x \to x\end{displaymath}

Las dimensiones del vector x y de la matriz A han de ser las adecuadas para poder realizar la multiplicacion entre ambos. En el caso que las dimensiones de alguna de las entradas no sea correcta, la rutina PyPBLASpvtrsv informará de ello y no podrá finalizar la operación.

Por otro lado es importante señalar que esta rutina se provee únicamente paramatrices triangulares (por esta razón el nombre de la función contiene 'tr'). En el caso que se pasara una matriz no triangular como matriz "a", la rutina PyBLAS_trsv realizará los cálculos como si de una triangular se tratara. Es decir, supondrá que los elementos por debajo de la diagonal (o por encima, dependiendo del valor de "diag") son ceros.

Los parámetros de entrada pueden ser de tipo real o complejo. Las características de cada uno de los parámetros son las siguientes:

Debemos señalar en este punto que los tipos de datos de los vectores y matrices son únicamente reales, de esto se deduce que no se puede dar el caso de indicar trans='H' puesto que la conjugada de un número real es el mismo número real.

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=8
#Initiliaze the Grid
PyACTS.gridinit()
if PyACTS.iread==1:
        print "Example of using PyPBLAS 2: PvTRSV"
        print "N=",n,";nprow x npcol:",PyACTS.nprow,"x",PyACTS.npcol
        print "Block's size:",PyACTS.mb,"*",PyACTS.nb
        a=4*identity(n,Float)
        print "a=",a
        x=reshape(array(range(n),Float),[n,1])
        print "x'=",transpose(x)
else:
        a,x,alpha=None,None,None
#We convert Numeric Array to PyACTS.Scalapack Array
ACTS_lib=1 # 1=Scalapack
a=Num2PyACTS(a,ACTS_lib)
x=Num2PyACTS(x,ACTS_lib)
#We call PBLAS routine
x= PyPBLAS.pvtrsv(a,x)
x_num=PyACTS2Num(x)
if PyACTS.iread==1:
        print "PvTRSV'=",transpose(x_num)
PyACTS.gridexit()
El resultado de este código es el siguiente:
[vgaliano@localhost EXAMPLES]$ mpirun -np 4 mpipython exPypvtrsv.py
Example of using PyPBLAS 2: PvTRSV
N= 8 ;nprow x npcol: 2 x 2
Block's size: 2 * 2
a= [[ 4.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  4.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  4.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  4.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  4.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  4.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  4.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  4.]]
x'= [ [ 0.  1.  2.  3.  4.  5.  6.  7.]]
PvTRSV'= [ [ 0.    0.25  0.5   0.75  1.    1.25  1.5   1.75]]

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