9.6.1 pvgetrf

a,info= PySLK.pvgetrf(a[,ia=1,ja=1])

La rutina "pvgetrf" obtiene la factorización LU de una matriz A de tamaño $m\times n$ distribuida utilizando una pivotación parcial con intercambio de filas.

La factorización tiene la forma $A=PLU$, donde P es una matriz permutación, L es una matriz triangular inferior con los elementos a uno en la diagonal principal y los elementos inferiores a la diagonal indicados en el resultado de la matriz $A$. U es una matriz triangular superior con sus elementos de la diagonal igual a uno y los elementos superiores en la parte de la diagonal superior de $A$.

La resolución de un sistema de ecuaciones se lleva a cabo mediante la descomposición LU utilizando la pivotacion parcial y el intercambio de filas de A. De este modo obtenemos sub( A ) = P * L * U, donde P es una matriz permutada, L es una matriz triangular unitaria, y U es una matriz triangular superior.

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()
if PyACTS.iread==1:
  print "Ejemplo de Utilizacion ScaLAPACK: PvGETRF"
  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,b=None,None
#We convert Numeric Array to PyACTS.Scalapack Array
ACTS_lib=1 # 1=Scalapack
a=Num2PyACTS(a,ACTS_lib)
#We call ScaLAPACK routine
a,info= PySLK.pvgetrf(a)
a=PyACTS2Num(a)
if PyACTS.iread==1:
  print "P * L * U, =",a
  print "Info:",info
PyACTS.gridexit()
El resultado de este código es el siguiente:
mpirun -np 2 /home/vgaliano/mpipython/mpipython exPyScapvgetrf.py 
Ejemplo de Utilizacion ScaLAPACK: PvGETRF
N= 8 ;nprow x npcol: 2 x 1
Tam. Bloques: 64 * 64
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.]]
P * L * U, = [[ 9.          1.          1.          1.          1.          1.        
        1.          1.        ]
 [ 0.11111111  8.88888889  0.88888889  0.88888889  0.88888889  0.88888889
        0.88888889  0.88888889]
 [ 0.11111111  0.1         8.8         0.8         0.8         0.8       
        0.8         0.8       ]
 [ 0.11111111  0.1         0.09090909  8.72727273  0.72727273  0.72727273
        0.72727273  0.72727273]
 [ 0.11111111  0.1         0.09090909  0.08333333  8.66666667  0.66666667
        0.66666667  0.66666667]
 [ 0.11111111  0.1         0.09090909  0.08333333  0.07692308  8.61538462
        0.61538462  0.61538462]
 [ 0.11111111  0.1         0.09090909  0.08333333  0.07692308  0.07142857
        8.57142857  0.57142857]
 [ 0.11111111  0.1         0.09090909  0.08333333  0.07692308  0.07142857
        0.06666667  8.53333333]]
Info: 0

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