a,af,equed,r,c,b,x,rcond,ferr,berr,info= PySLK.pvgesvx(a,b[,fact,trans,equed,ACTS_af,ACTS_x])
La rutina "pvgesvx" resuelve la ecuacion del sistema lineal siguiente:
 
donde  es una matriz
 es una matriz  , y
, y   y
 y  son matrices de tamaño
 son matrices de tamaño   .
Los  errores en la solución y las condiciones de la estimación tambien se especifican en esta rutina.
.
Los  errores en la solución y las condiciones de la estimación tambien se especifican en esta rutina.
La utilización de estas rútinas es mas complejas que las rutinas sencillas  (
fact='E', con el fin de equilibrar el sistema se computan los factores
reales escalares.
trans='N': 
 
trans='T': 
 
trans='C': 
 
Que el sistema sea o no equilibrado depende de la matriz  , pero si la equilibración es utilizada
,
, pero si la equilibración es utilizada
,  se sobreescribirá por
 se sobreescribirá por 
 y
 y  por
 por
 (si
 (si  trans='N') o por 
 (si
 (si  trans='T').
fact='E', o fact='N', se utiliza la descomposición  para factorizar la matriz
 para factorizar la matriz
 como:
 como:
 
, donde  es una matriz permutación,
 es una matriz permutación,  es una matriz unitaria triangular inferior, y
 es una matriz unitaria triangular inferior, y
 es una matriz triangular.
 es una matriz triangular.
 se utiliza para estimar el número de condición de la
matriz
 se utiliza para estimar el número de condición de la
matriz  . Si el número de condición es menos que la precisión de la maquina, los tres siguientes
pasos se saltan.
. Si el número de condición es menos que la precisión de la maquina, los tres siguientes
pasos se saltan.
fact='E' y se utiliza equilibración, la matriz  se multiplica previamente
por
 se multiplica previamente
por  (si
 (si  trans='N') o por  (si
 (si  trans='T' o 'C'). De este modo se resuelve
la ecuación antes de la equilibración.
pvgesvx(ACTS_a,ACTS_b,fact='N',trans='N',equed='N',x=None,ACTS_af=None,rcond=0
Parámetros de Entrada
a: Matriz de tipo PyACTS de dimensiones  .
.
b: Matriz de tipo PyACTS de dimensiones  .
.
fact: Indicaremos si la entra  está en su forma factorizada o no, y en el caso
que no lo esté si debemos equilibrarla antes de realizar la factorización.
 está en su forma factorizada o no, y en el caso
que no lo esté si debemos equilibrarla antes de realizar la factorización.
fact='F': La matriz af contendrá la forma factorizada de a. Si equed<>'N', la
matriz a ha sido equilibrada con los factores dados por r y c.
fact='N':  La matriz a se copiará en la matriz af y se factorizará.
fact='E':  La matriz a será equilibrada si es necesario y entonces se copiará y factorizará en af.
trans: Indica la forma del sistema de ecuaciones:
trans='N': 
 (No traspuesta).
 (No traspuesta).
trans='T':  
 (traspuesta).
 (traspuesta).
trans='C':  
 (traspuesta).
 (traspuesta).
af: Este parametro es opcional. Dependiendo de los parámetros de entrada
la matriz af tendrá diferente forma.
fact='F', entonces af es un argumento de entrada y contiene los factores
L y U de la factorizacion 
 computada con
 computada con psgetrf. Si equed='N',
entonces af contiene la forma factorizada forma de la matriz a.
fact='N', entonces af  es un argumento de salida que devuelve la forma factorizada
 y
 y  de la factorización
 de la factorización 
 .
.
fact='E', entonces af  es un argumento de salida que devuelve la forma factorizada
 y
 y  de la factorización
 de la factorización 
 de la matriz equilibrada
 de la matriz equilibrada a.
Parámetros de Salida
a: Como argumento de salida, si equed<>'N' , entonces a
es escalada del siguiente modo:
equed='R' : 
 
equed='C' : 
 
equed='B' : 
 
af: Como argumento de salida puede tener las siguientes formas:
fact='N' : entonces af es devuelve los factores  y
 y  de la factorización
 de la factorización
 de la matriz original
 de la matriz original a.
fact='E' : entonces af es devuelve los factores  y
 y  de la factorización
 de la factorización
 de la matriz equilibrada
 de la matriz equilibrada a.
equed: Indica la forma en la que fue realizada la equilibracion:
equed='N' : No se realizó equilibración.
equed='R' : Equilibración por filas.
equed='C' : Equilibración por columnas.
equed='B' : Ambas equilibraciones fueron realizadas (filas y columnas).
        
r: Contiene los factores de escala para las filas.
c: Contiene los factores de escala para las columnas.
b: Si equed = 'N', b no se modificará; si
trans='N' y  equed = 'R' o 'B', b  se sobrrescribe por
 .
.
x: Si info=0, la matriz
solución  de tamaño
 de tamaño  del sistema de ecuaciones original.
 del sistema de ecuaciones original.
rcond: Es un número real que expresa la estimación  de la equilibración.
Si rcond es menor que la precisión de la maquina (rcond=0), la matriz es singular a la precisión de trabajo.
ferr: La estimación del error ''hacia delante'' para cada elemento del vector x
berr: La estimación del error ''hacia atrás'' para cada elemento del vector x
info: Indica el estado de salida de la rutina:
info=0 : Ejecución con éxito
info<0 : Si info=-i el i-ésimo argumento tuvo un valor ilegal.
info>0 : Si info=i, y i es
 es exactamente cero. La factorización ha sido completada, pero el factor
 es exactamente cero. La factorización ha sido completada, pero el factor  es singular.
 es singular.
rcond es menor que la precisión de la maquina
                
Consideramos que son muchos los parametros y las opciones de ejecución en estas rutinas para expertos. A continuación mostramos un ejemplo que resuelve el mismo problema que la rutina pvgesv vista en el apartado anterior.
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: PvGESVX"
        print "N=",n,";nprow x npcol:",PyACTS.nprow,"x",PyACTS.npcol
        print "Tam. Bloques:",PyACTS.mb,"*",PyACTS.nb
        a=8*identity(n,Float)
        print "a=",a
        b=ones((n,nrhs))
        print "b'=",transpose(b)
else:
        a,b=None,None
#We convert Numeric Array to PyACTS.Scalapack Array
ACTS_lib=1 # 1=Scalapack
a=Num2PyACTS(a,ACTS_lib)
b=Num2PyACTS(b,ACTS_lib)
#We call PBLAS routine
a,af,equed,r,c,b,x,rcond,ferr,berr,info= PySLK.pvgesvx(a,b,fact='E')
x_num=PyACTS2Num(x)
if PyACTS.iread==1:
        print "a*x=b --> x'=",transpose(x_num)
        print "r=",transpose(r)
        print "c=",transpose(c)
        print "ferr:",transpose(ferr),"; berr=",transpose(berr)
        print "Info:",info
PyACTS.gridexit()
El resultado en la ejecución de este ejemplo sería el siguiente:
[vgaliano@localhost EXAMPLES]$ mpirun -np 4 mpipython exPyScapvgesvx.py
Ejemplo de Utilizacion ScaLAPACK: PvGESVX
N= 8 ;nprow x npcol: 2 x 2
Tam. Bloques: 32 * 32
a= [[ 8.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  8.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  8.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  8.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  8.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  8.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  8.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  8.]]
b'= [[1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1]]
a*x=b --> x'= [[ 0.125  0.125  0.125  0.125  0.125  0.125  0.125  0.125]
 [ 0.125  0.125  0.125  0.125  0.125  0.125  0.125  0.125]]
r= [ [ 0.125  0.125  0.125  0.125  0.125  0.125  0.125  0.125]]
c= [ [ 1.  1.  1.  1.  1.  1.  1.  1.]]
ferr: [ [  1.99840144e-15   1.99840144e-15   0.00000000e+00   0.00000000e+00
         0.00000000e+00   0.00000000e+00   0.00000000e+00   0.00000000e+00]] ; berr= [ [ 0.  0.  0.  0.  0.  0.  0.  0.]]
Info: 0
See Sobre este documento... para sugerencias en cambios.