9.4.1 pvgesvx

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:


\begin{displaymath}A\times X = B \end{displaymath}

donde $A$ es una matriz $n \times n$, y $B$ y $X$ son matrices de tamaño $n \times nrhs$. 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 (), vistas en apartados anteriores. En esta rutina se realizan los siguientes pasos:

  1. Si fact='E', con el fin de equilibrar el sistema se computan los factores reales escalares.

    Que el sistema sea o no equilibrado depende de la matriz $A$, pero si la equilibración es utilizada , $A$ se sobreescribirá por $diag(R) \times A \times diag(C)$ y $B$ por $diag(R) \times B$ (si trans='N') o por $diag(C) \times B $ (si trans='T').

  2. fact='E', o fact='N', se utiliza la descomposición $LU$ para factorizar la matriz $A$ como:

    $A = P \times L \times U$

    , donde $P$ es una matriz permutación, $L$ es una matriz unitaria triangular inferior, y $U$ es una matriz triangular.

  3. La forma factorizada de $A$ se utiliza para estimar el número de condición de la matriz $A$. Si el número de condición es menos que la precisión de la maquina, los tres siguientes pasos se saltan.
  4. El sistema de ecuaciones se resuelve utilizando la forma factorizada de A.
  5. Se aplica un proceso iteratico para obtener exactitud en la solución y calcular los errores.
  6. Si fact='E' y se utiliza equilibración, la matriz $X$ se multiplica previamente por $diag (C)$ (si trans='N') o por $diag (R)$ (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

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.