gradiente conjugado

Upload: luis-miguel-rv

Post on 07-Aug-2018

238 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/19/2019 Gradiente conjugado

    1/24

    Gradiente conjugado

     Miguel Vargas-Félix

    [email protected]://www.cimat.mx/~miguelvargas

    CIMAT, August 26, 20! /2"

    mailto:[email protected]://www.cimat.mx/~miguelvargashttp://www.cimat.mx/~miguelvargasmailto:[email protected]

  • 8/19/2019 Gradiente conjugado

    2/24

    M#t$%$ %e gra%ie&te c$&'uga%$

    Es un método iterativo para minimizar funciones cuadráticas convexas  f  :ℝn→ℝ de la forma

     f  ( x )= 12

    xT

    A x−xT

    b,

    donde x ,b∈ℝn y A∈ℝn×n es una matriz simétrica positiva definida

    Es un método de descenso de gradiente

     

     Ejemplo para n=2. Descenso de gradiente (izquierda, gradiente conjugado (derec!a

    http://www.cimat.mx/~miguelvargas 2/2"

  • 8/19/2019 Gradiente conjugado

    3/24

    !ara minimizar  f  ( x ) calculamos primero su gradiente,

    ∇   f   (x )=∇  12x

    TAx−xTb   =Ax−b,

    "uscamos minimizar, por tanto igualamos a cero

    A x=b,es decir, "uscamos resolver un sistema lineal de ecuaciones

    El método de descenso de gradiente es:

    I&put: A, x#, b, ε"   ← #repetir 

    r"    ←   b−Ax" 

    α"    ←r" Tr" 

    r" T

    Ar " x" +1   ←   x" +α" r" "   ←   " +1

    hasta (ue ‖r " ‖

  • 8/19/2019 Gradiente conjugado

    4/24

    $i A es simétrica positiva definida, entonces

    xTAx   > #, para todo x≠0

    %s&, podemos a definir un producto interno

    〈x , y 〉A   = xT

    A y

    'ecimos (ue un vector x es conjugado a otro vector y con respecto a una matriz A si

    〈x , y

    〉A=#, con

     x ≠ y

    )a idea del algoritmo es utilizar direcciones conjugadas para el descenso en la "*s(ueda del punto

    +ptimo x, es decir 

    x=α1p1+α2p2+…+αnpn,

    los coeficientes están dados a partir de la com"inaci+n lineal

    Ax=α1Ap1+α2Ap2+…+αnApn=b

    % partir de una matriz A de rango n s+lo se pueden definir n vectores A-conjugados, por lo tanto

    el algoritmo de gradiente conjugado garantiza la o"tenci+n de una soluci+n en un máximo de n

    iteraciones

    http://www.cimat.mx/~miguelvargas "/2"

  • 8/19/2019 Gradiente conjugado

    5/24

    'efinamos el residual r"  como

    r" =Ax" −b, " =1,2,…

    la idea es lograr de forma iterativa (ue el residual tienda a ser cero, "uscando cada vez mejores x" 

    El procedimiento será de forma iterativa, la forma de actualizaci+n será

    x" +1=x" +αp" ,

    tomando p"  como una direcci+n de descenso

    El tama.o de paso α"  (ue minimiza la funci+n  f    x ) a lo largo de la direcci+n x" +α" p"  esα" =−

    r " Tp" 

    p" TAp" 

    http://www.cimat.mx/~miguelvargas !/2"

  • 8/19/2019 Gradiente conjugado

    6/24

    $i definimos p" +1  como la direcci+n más cercana al residual r"   "ajo la restricci+n de ser 

    conjugado

    Esta direcci+n está dada por la proyecci+n de r"   en el espacio ortogonal a p"   con respecto al

    producto interno inducido por A, as&

    p" +1=−r " +p" 

    TA r" 

    p" T

    A p" ⏟β" 

    p" 

    http://www.cimat.mx/~miguelvargas 6/2"

  • 8/19/2019 Gradiente conjugado

    7/24

    El algoritmo es el siguiente /0oce# p1#3:

    I&put: A, x#, b, ε

    r#   ←   A x#−b p#   ← −r#"   ← #mie&tras ‖r " ‖>ε

    α"    ← −r" 

    Tp" 

    p" T

    A p" x" +1   ←   x" +α" p" 

    r" +1   ←   Ax" +1−b

    β" +1   ←r" +1TAp" 

    p" TAp" 

    p" +1   ← −r" +1+β" +1p" "   ←   " +1

    x# es una coordenada inicial 4puede ser igual a 05

    Generalmente no es necesario realizar las n  iteraciones, se puede definir la precisi+n deseada

    limitando la convergencia con una tolerancia ε

    http://www.cimat.mx/~miguelvargas */2"

  • 8/19/2019 Gradiente conjugado

    8/24

    El algoritmo de gradiente conjugado mejorado es el siguiente /0oce# p1123, con la variaci+n de

    utilizar s+lo una multiplicaci+n matriz-vector:

    I&put: A, x#, b, ε

    r#   ←   A x#−b 

    p#   ← −r#"   ← #

    mie&tras ∥r " ∥>εw   ←   A p" 

    α" 

      ←r" Tr " 

    p" Tw

    x" +1   ←   x" +α" p" r" +1   ← r" +α w

    β" +1   ←r" +1

    Tr" +1

    r" T

    r" 

    p" +1   ← −r" +1+β" +1 p" 

    "   ←   " +1

    El proceso más lento del algoritmo es la multiplicaci+n matriz-vector

    $e puede implementar eficientemente usando almacenamiento con compresi+n por renglones

    http://www.cimat.mx/~miguelvargas +/2"

    C % -t

  • 8/19/2019 Gradiente conjugado

    9/24

    C$mpresse% $w -t$rage

    El método #ompressed $o% &torage 4compresi+n por renglones5 /$aad#6 p623, se guardan las

    entradas no cero de cada rengl+n de A por separado

    7 # # # #

    # # 1 6 # #

    2 # 1 # 8 #

    # 9 6 # # 1

    # # # # #

    7

    21 6) "

    2 1 )

    8!

    9 62 )

    16

    6

    V6={2,1,8 }

    J6={1,6,}

    ;on este método, por cada rengl+n de la matriz se guardan dos arreglos para las entradas distintas

    de cero de cada rengl+n

  • 8/19/2019 Gradiente conjugado

    10/24

    Multiplicaci& matri vect$r 

    En la multiplicaci+n matriz-vector c=Ab el +rden de "*s(ueda es = (1), esto es por(ue no se >aceuna "*s(ueda de las entradas del reng+n, se toman las entradas una tras otra

    $ea J i el conjunto de &ndices de las entradas no cero del rengl+n i de A

    |Ji| es el n*mero de entradas no cero del rengl+n i de A 0+tese (ue |Vi|=|J i|

    c1c2

    c6c7c:c

    =( 7 # # # #

    # # 1 6 # #

    2 # 1 # 8 #

    # 9 6 # # 1

    # # # # # :)(

    :

    7

    #1

    2

    9)

    7 2

    1 6) "

    2 1 )

    8!

    9 62 )

    16

    6

    7

    #

    2

    1

    9

    ci=∑i=1

    n

    ai j' j

    c1

    c2

    c6

    c

    c7

    c

    =

    ci=∑" =1

    |J i|

    Vi" 'Ji" 

    )a ventaja de utilizar compresi+n por renglones es (ue los datos de cada rengl+n de la matriz de

    rigidez son accesados en secuencia uno tras otro, esto producirá una ventaja de acceso al entrar el

    "lo(ue de memoria de cada rengl+n en el cac!e del ;!

  • 8/19/2019 Gradiente conjugado

    11/24

    El pseudoc+digo es:

    ;onjugateGradient A ,x , b ,ε , stepmaxA= Vi , J i , i=1,2,… , n C- matrix

    x∈ℝn

    I&itial value

    b∈ℝn

    ight si%e vect$r 

    ε∈ℝ T$lera&ce stepmax Maximum &um1er $ steps

    r∈ℝn

    esi%ual

    p∈ℝn

    3esce&t %irecti$&

    w∈ℝn

    esult $ matrix4vect$r 

    dot(rr ←#for i←1,2,… ,n5   sum←#

    5 for " ←1,2,… ,∣Vi∣5 5   j ←J i

    5 5   sum ← sum+Vi"  x  j

    5   r i ← sum−'i5   pi ←−r i5   dotrr ←dotrr +r i r i

     step←#

    ?>ile ( stepε5   dot(p%←#

    5 for i←1,2,… ,n5 5   sum←#

    5 5 for " ←1,2,… ,∣Vi∣5 5 5   j ←J i

    5 5 5   sum ← sum+Vi"  p  j5 5   %i ← sum

    5 5   dotp%←dotp%+ pi %i

    5   α← dotrr 

    dotp%

    5   ne%(dot(rr ←#5 for i←1,2,… ,n5 5   xi ← xi +α pi5 5   r i ←r i+α %i5 5   ne%dotrr ← ne%dotrr + r i r i

    5   β←

    ne%dotrr 

    dotrr 

    5 for i←1,2,… ,n5 5   pi ←β pi−r i

    5   dot(rr ←ne%(dot(rr 5   step ← step+1

    http://www.cimat.mx/~miguelvargas /2"

    7 % %i i

  • 8/19/2019 Gradiente conjugado

    12/24

    7mer$ %e c$&%ici&

    El siguiente sistema de ecuaciones /@ind#83, Ax=b1

    #1 6# 6# 7##7 122 2#1 21

    #1 61 8# 9#

    #2 1 1#1 16#

    ⏟A

     x1

     x2 x6 x7⏟x

    =1#1:

    192

    297⏟

    b1

    , tiene soluci+n

     x1

     x2

     x6 x7

    =1#1#

    1#

    1#

    ,

    n+tese (ue

    ∥b

    1∥2=92282672

    $i pertur"amos el vector de la derec>a un poco

    (#1 6# 6# 7#

    #7 122 2#1 21

    #1 61 8# 9##2 1 1#1 16#)⏟

    A

     x1 x2

     x6

     x7⏟x

    =

    (1#1−###

    +###

    192−###297−###)⏟b1+ 

    =

    (1##9

    #

    19192969)⏟b2

    , entonces

     x1 x2

     x6 x7

    =

    (6:17:

    −11##

    1#:12# )

    ,

    a>ora ∥b2∥2=9228:61686

    http://www.cimat.mx/~miguelvargas 2/2"

    $i en vez de pertur"ar el vector de la derec>a pertur"amos la matriz

  • 8/19/2019 Gradiente conjugado

    13/24

    $i en vez de pertur"ar el vector de la derec>a, pertur"amos la matriz

    #1## 6+###: 6### 7###

    #7## 122## 2#1## 21##

    #1## 61## 8−###: 9###

    #2## 1## 1#1## 16−###:

     x1

     x2

     x6

     x7

    =

    1#1

    :

    192

    297

    , entonces

     x1

     x2

     x6

     x7

    =

    −672:

    11:#

    1#:6

    #9:8

  • 8/19/2019 Gradiente conjugado

    14/24

    El n*mero de condici+n ! de una matriz A no singular, para una norma ∥"∥ está dado por 

    ! (A )=∥A∥"∥A−1∥

    !ara la norma ∥"∥2,

    ! (A )=∥A∥"∥A−1∥=#max (A )#min(A )

    ,

    donde # son los valores singulares de la matriz

    !ara una matriz A simétrica positiva definida,

    ! (A )=$max (A )$min (A)

    ,

    donde $ son los eigenvalores de A

    %s&, matrices con un n*mero de condici+n cercano a 1 se dicen (ue están "ien condicionadas

    Al reducir el número de condición de un sistema, se puede acelerar la velocidad de

    convergencia del gradiente conjugado.

    http://www.cimat.mx/~miguelvargas "/2"

    8ra%ie&te c$&'uga%$ prec$&%ici$&a%$

  • 8/19/2019 Gradiente conjugado

    15/24

    8ra%ie&te c$&'uga%$ prec$&%ici$&a%$

    Entonces, en vez de resolver el pro"lema

    Ax−b=#,

    se resuelve el pro"lemaM

    −1 (A x−b)=#,

    con M−1

     una matriz cuadrada, la cual reci"e el nom"re de precondicionador

    El mejor precondicionador ser&a claro M

    −1

    =A

    −1

    , as& x=M

    −1

    b, y el gradiente conjugadoconvergir&a en un paso

    %l igual (ue la matriz A, el precondicionador M−1

     tiene (ue ser simétrico positivo definido

    Aay dos tipos de precondicionadores, impl&citos M y expl&citos M−1

    En algunos casos es costoso calcular M−1

    , en general se utilizan precondicionadores con inversas

    fáciles de calcular o precondicionadores implicitos (ue se puedan factorizar 4con ;>olesBy, por 

    ejemplo M=T

    5http://www.cimat.mx/~miguelvargas !/2"

    El l it l i i t

  • 8/19/2019 Gradiente conjugado

    16/24

    El algoritmo es el siguiente:

    I&put: A, x#, b,ε

    r#   ←   A x#−b

    !#   ← M−1

    r#p#   ← −!#"   ← #

    mie&tras ∥r " ∥>εw   ←   A p" 

    α"    ← r" T

    !" p" 

    Tw

    x" +1   ←   x" +α" p" r" +1   ← r" +α w

    ! " +1   ←   M−1r" +1, $r s$lve M !" +1   ← r" +1

    β"    ←r

    " +1

    T!

    " +1

    r " T

    !" p" +1   ← −!" +1+β" +1 p" "   ←   " +1

    0+tese (ue a>ora el algoritmo re(uire aplicar el precondicionador en cada paso

    http://www.cimat.mx/~miguelvargas 6/2"

    8ra%ie&te c$&'uga%$ 9 prec$&%ici$&a%$r ac$1i

  • 8/19/2019 Gradiente conjugado

    17/24

    8ra%ie&te c$&'uga%$ 9 prec$&%ici$&a%$r ac$1i

    El precondicionador Caco"i es el más sencillo, consiste en >acer 

    M=diag   A ),

    de esta forma el precondicionador es una matriz diagonal, cuya inversa es fácil de calcular 

    (M−1)i j={1

    Ai isi i= j

    # si i≠ j

    0o se almacena todo  M −1, lo usual es guardar un vector con s+lo los elementos de la diagonal

    El pseudoc+digo es

    http://www.cimat.mx/~miguelvargas */2"

  • 8/19/2019 Gradiente conjugado

    18/24

  • 8/19/2019 Gradiente conjugado

    19/24

    ? .0, .0eB+, 2.0eB+,  ).0eB+, ".0eB+, !.0eB+,  .0eB+, 2.0eB+, ).0eB+,  ".0eB+, !.0eB+D

    i&t mai&EF

    float sum 0Dfor  Eint i 0D i G D 99iF

    sum 9 a>i?D

    pri&tEH-um .J&H, sumFD

    return 0D

     // sum2.cpp

    float a>? .0eB+, 2.0eB+, ).0eB+,  ".0eB+, !.0eB+, .0eB+,  2.0eB+, ).0eB+, ".0eB+,  !.0eB+, .0D

    int mai&EF

    float sum 0D$r Eint i 0D i G D 99iF

    sum 9 a>i?D

    pri&tEH-um .J&H, sumFD

    return 0D

    Sum = 1.000000000 Sum = 1.000000358

    )as soluci+n exacta es 1######6##

    %l calcular los productos punto para el gradiente conjugado se tienen (ue sumar muc>os n*meros

    con punto flotantehttp://www.cimat.mx/~miguelvargas /2"

    Aay tres soluci+nes para evitar pérdida de informaci+n

  • 8/19/2019 Gradiente conjugado

    20/24

    . Kr%e&ar l$s &7mer$s a&tes %e sumarl$s

     // sum1.cpp

    #include Gst%i$.hL

    float a>? .0, .0eB+, 2.0eB+,  ).0eB+, ".0eB+, !.0eB+,  .0eB+, 2.0eB+, ).0eB+,  ".0eB+, !.0eB+D

    i&t mai&EF

    float sum 0Dfor  Eint i 0D i G D 99iF

    sum 9 a>i?D

    pri&tEH-um .J&H, sumFD

    return 0D

     // sum3.cpp

    #include Gst%i$.hL

    float a>? .0eB+, .0eB+, 2.0eB+,  2.0eB+, ).0eB+, ).0eB+,  ".0eB+, ".0eB+, !.0eB+,  !.0eB+, .0D

    int mai&EF

    float sum 0Dfor  Eint i 0D i G D 99iF

    sum 9 a>i?D

    pri&tEH-um .J&H, sumFD

    return 0D

    Sum = 1.000000000 Sum = 1.000000358

    http://www.cimat.mx/~miguelvargas 20/2"

    2. sar tip$s %e pu&t$ l$ta&te mNs gra&%es para acumular la suma

  • 8/19/2019 Gradiente conjugado

    21/24

    p p g p

     // sum1.cpp#include Gst%i$.hL

    float a>? .0, .0eB+, 2.0eB+,

      ).0eB+, ".0eB+, !.0eB+,  .0eB+, 2.0eB+, ).0eB+,  ".0eB+, !.0eB+D

    int mai&EF

    float sum 0D

    for  Eint i 0D i G D 99iF

    sum 9 a>i?D

    pri&tEH-um .J&H, sumFD

    return 0D

     // sum4.cpp#include Gst%i$.hL

    float a>? .0, .0eB+, 2.0eB+,

      ).0eB+, ".0eB+, !.0eB+,  .0eB+, 2.0eB+, ).0eB+,  ".0eB+, !.0eB+D

    int mai&EF

    double sum 0D

    for  Eint i 0D i G D 99iF

    sum 9 a>i?D

    pri&tEH-um .J&H, sumFD

    return 0D

    Sum = 1.000000000 Sum = 1.000000300

    ;uando se suman Ddou"les, se puede acumular el resultado utilizando Dlong dou"le

    Fué pasa cuando no >ay puntos flotantes de mayor capacidadH

    http://www.cimat.mx/~miguelvargas 2/2"

  • 8/19/2019 Gradiente conjugado

    22/24

  • 8/19/2019 Gradiente conjugado

    23/24

  • 8/19/2019 Gradiente conjugado

    24/24

    eere&cias

    /0oce#3 C 0ocedal, $ C Irig>t 0umerical =ptimization $pringer, 2##

    /!iss73 $ !issanetzBy $parse Jatrix Tec>nology %cademic !ress, 197

    /$aad#63 K $aad Lterative Jet>ods for $parse )inear $ystems $L%J, 2##6

    /@ind#83