Konjugált gradiens módszer

A gradiens módszer megfelelő lépésközeinek (zöld) és a konjugált gradiens módszer (piros) minimalizáló formuláinak összehasonlítása. A konjugált gradiens módszer legfeljebb n lépésben konvergál a minimumhoz, ahol n a mátrix dimenziója (itt n=2)

A matematikában a konjugált gradiens módszer bizonyos, szimmetrikus és pozitív definit mátrixszal rendelkező lineáris egyenletrendszerek numerikus megoldására szolgáló algoritmus. A konjugált gradiens módszer egy iterációs módszer, mely alkalmazható olyan rendszerek kezelésére is, melyek túl nagyok ahhoz, hogy direkt módon Cholesky-felbontással megoldhatók legyenek. Ezek főként parciális differenciálegyenletek megoldásakor merülnek fel.

A konjugált gradiens módszer használható olyan optimalizációs problémák megoldására is, mint például az energiaminimalizáció.

A bikonjugált gradiens módszer a fenti módszer általánosítása nemszimmetrikus mátrixokra. A nemlineáris egyenletrendszerek minimumának meghatározására többféle nemlineáris konjugált gradiens módszer létezik.

A módszer leírása

Adott a következő lineáris egyenletrendszer

Ax = b

ahol A egy valós, szimmetrikus (ha AT = A), pozitív definit, n×n-es mátrix.

Jelöljük az egyenletrendszer egyedüli megoldását x*-gal.

A konjugált gradiens módszer mint direkt módszer

Vegyünk két nem-zéró vektort, u-t és v-t, melyek egymás konjugáltjai, ha

u T A v = 0 . {\displaystyle \mathbf {u} ^{\mathrm {T} }\mathbf {A} \mathbf {v} =\mathbf {0} .}

Mivel A szimmetrikus és pozitív definit, a bal oldalt belső szorzatként definiálhatjuk

u , v A := A T u , v = A u , v = u , A v = u T A v . {\displaystyle \langle \mathbf {u} ,\mathbf {v} \rangle _{\mathbf {A} }:=\langle \mathbf {A} ^{\mathrm {T} }\mathbf {u} ,\mathbf {v} \rangle =\langle \mathbf {A} \mathbf {u} ,\mathbf {v} \rangle =\langle \mathbf {u} ,\mathbf {A} \mathbf {v} \rangle =\mathbf {u} ^{\mathrm {T} }\mathbf {A} \mathbf {v} .}

Két vektor konjugált, ha ortogonálisak, és a belső szorzatukra fennáll a fenti összefüggés. A konjugált tulajdonság szimmetrikus reláció: ha u konjugálja v, akkor v konjugáltja u.

Tegyük fel, hogy {pk} n db kölcsönösen konjugált vektorokból képzett sorozat. Ekkor pk bázist alkot Rn felett, so így ebben a bázisban az x* megoldást kiterjeszthetjük:

x = i = 1 n α i p i {\displaystyle \mathbf {x} _{*}=\sum _{i=1}^{n}\alpha _{i}\mathbf {p} _{i}}

A koefficiens a következőképpen adódik:

b = A x = i = 1 n α i A p i . {\displaystyle \mathbf {b} =\mathbf {A} \mathbf {x} _{*}=\sum _{i=1}^{n}\alpha _{i}\mathbf {A} \mathbf {p} _{i}.}
p k T b = p k T A x = i = 1 n α i p k T A p i = α k p k T A p k . {\displaystyle \mathbf {p} _{k}^{\mathrm {T} }\mathbf {b} =\mathbf {p} _{k}^{\mathrm {T} }\mathbf {A} \mathbf {x} _{*}=\sum _{i=1}^{n}\alpha _{i}\mathbf {p} _{k}^{\mathrm {T} }\mathbf {A} \mathbf {p} _{i}=\alpha _{k}\mathbf {p} _{k}^{\mathrm {T} }\mathbf {A} \mathbf {p} _{k}.}
α k = p k T b p k T A p k = p k , b p k , p k A = p k , b p k A 2 . {\displaystyle \alpha _{k}={\frac {\mathbf {p} _{k}^{\mathrm {T} }\mathbf {b} }{\mathbf {p} _{k}^{\mathrm {T} }\mathbf {A} \mathbf {p} _{k}}}={\frac {\langle \mathbf {p} _{k},\mathbf {b} \rangle }{\,\,\,\langle \mathbf {p} _{k},\mathbf {p} _{k}\rangle _{\mathbf {A} }}}={\frac {\langle \mathbf {p} _{k},\mathbf {b} \rangle }{\,\,\,\|\mathbf {p} _{k}\|_{\mathbf {A} }^{2}}}.}

Ez az eredmény egy valószínűség, mely eleget tesz a fenti belső szorzat kritériumának. Ez a következő módszert szolgáltatja az Ax = b egyenlet megoldására. Először megkeressük az n db konjugált vektor sorozatát, majd kiszámítjuk αk koefficienseket.

A konjugált gradiens módszer mint iterációs módszer

Ha megfelelően választjuk meg pk-t, nincs szükség az összes koefficiens kiszámítására, hogy jó közelítéssel megadjuk x*-t.Tehát ez esetben a konjugált gradiens módszert, mint iterációs módszert alkalmazzuk. Ez lehetővé teszi olyan egyenletrendszerek megoldását, melyeknél n túl nagy, és ezért direkt megoldásuk túl sok időt venne igénybe.

Az x* első közelítését jelöljük x0–lal. Tegyük fel, hogy x0 = 0. Az x0-lal kezdve a megoldást keressük, és minden iterációs lépésben szükségünk van egy olyan mutatóra, mely megadja, mennyire jutottunk közel x*-hoz. A mutató onnan adódik, hogy x* szintén egy négyzetes függvény minimum helye, vagyis ha f(x) egyre kisebb, akkor egyre közelebb jutunk x* értékéhez:

f ( x ) = 1 2 x T A x b T x , x R n . {\displaystyle f(\mathbf {x} )={\frac {1}{2}}\mathbf {x} ^{\mathrm {T} }\mathbf {A} \mathbf {x} -\mathbf {b} ^{\mathrm {T} }\mathbf {x} ,\quad \mathbf {x} \in \mathbf {R} ^{n}.}

Ez a képlet sugallja, hogy a p1 bázisvektor az f függvény gradiense az x = x0 helyen, és p1 egyenlő Ax0b. Ha x0 = 0, akkor p1 = ‒b. A többi bázisvektor a gradiens konjugáltja, ennélfogva ezt a módszert konjugált gradiens módszernek nevezzük.

Legyen rk a k-adik lépés maradéka:

r k = b A x k . {\displaystyle \mathbf {r} _{k}=\mathbf {b} -\mathbf {Ax} _{k}.\,}

Mivel rk az f függvény negatív gradiense az x = xk helyen, ezért a gradiens módszer abból állna, hogy módosítsa rk irányát. Itt feltesszük, hogy pk irányai egymás konjugáltjai, így azt az irányt választjuk, amely legközelebb esik rk –hoz. Ez a következő kifejezéshez vezet:

p k + 1 = r k i k p i T A r k p i T A p i p i {\displaystyle \mathbf {p} _{k+1}=\mathbf {r} _{k}-\sum _{i\leq k}{\frac {\mathbf {p} _{i}^{\mathrm {T} }\mathbf {A} \mathbf {r} _{k}}{\mathbf {p} _{i}^{\mathrm {T} }\mathbf {A} \mathbf {p} _{i}}}\mathbf {p} _{i}}

A megoldó algoritmus

Néhány egyszerűsítés, a következő algoritmusra vezet Ax = b megoldásában. A kezdő x0 vektor lehet egy megoldáshoz közeli szám, avagy nulla.

r 0 := b A x 0 {\displaystyle \mathbf {r} _{0}:=\mathbf {b} -\mathbf {Ax} _{0}\,}
p 0 := r 0 {\displaystyle \mathbf {p} _{0}:=\mathbf {r} _{0}\,}
k := 0 {\displaystyle k:=0\,}
ismétlés
α k := r k T r k p k T A p k {\displaystyle \alpha _{k}:={\frac {\mathbf {r} _{k}^{\mathrm {T} }\mathbf {r} _{k}}{\mathbf {p} _{k}^{\mathrm {T} }\mathbf {Ap} _{k}}}\,}
x k + 1 := x k + α k p k {\displaystyle \mathbf {x} _{k+1}:=\mathbf {x} _{k}+\alpha _{k}\mathbf {p} _{k}\,}
r k + 1 := r k α k A p k {\displaystyle \mathbf {r} _{k+1}:=\mathbf {r} _{k}-\alpha _{k}\mathbf {Ap} _{k}\,}
ha rk+1 elegendően kicsiny akkor fejezze be a ciklust vége ha
β k := r k + 1 T r k + 1 r k T r k {\displaystyle \beta _{k}:={\frac {\mathbf {r} _{k+1}^{\mathrm {T} }\mathbf {r} _{k+1}}{\mathbf {r} _{k}^{\mathrm {T} }\mathbf {r} _{k}}}\,}
p k + 1 := r k + 1 + β k p k {\displaystyle \mathbf {p} _{k+1}:=\mathbf {r} _{k+1}+\beta _{k}\mathbf {p} _{k}\,}
k := k + 1 {\displaystyle k:=k+1\,}
vége ismétlés
Az eredmény: xk+1

Példa kód a konjugált gradiens módszerre Octave programnyelvben

function [x] = conjgrad(A,b,x0)

   r = b - A*x0;
   w = -r;
   z = A*w;
   a = (r'*w)/(w'*z);
   x = x0 + a*w;
   B = 0;

   for i = 1:size(A)(1);
      r = r - a*z;
      if( norm(r) < 1e-10 )
           break;
      end if
      B = (r'*z)/(w'*z);
      w = -r + B*w;
      z = A*w;
      a = (r'*w)/(w'*z);
      x = x + a*w;
   end

end

A konjugált gradiens módszer előfeltétel megadásával

Néhány esetben a gyors konvergencia eléréséhez szükség van előfeltétel megadására. A konjugált gradiens módszer ez esetben a következő formában adható meg:

r 0 := b A x 0 {\displaystyle \mathbf {r} _{0}:=\mathbf {b} -\mathbf {Ax} _{0}}
z 0 := M 1 r 0 {\displaystyle \mathbf {z} _{0}:=\mathbf {M} ^{-1}\mathbf {r} _{0}}
p 0 := z 0 {\displaystyle \mathbf {p} _{0}:=\mathbf {z} _{0}}
k := 0 {\displaystyle k:=0\,}
ismétlés
α k := r k T z k p k T A p k {\displaystyle \alpha _{k}:={\frac {\mathbf {r} _{k}^{\mathrm {T} }\mathbf {z} _{k}}{\mathbf {p} _{k}^{\mathrm {T} }\mathbf {Ap} _{k}}}}
x k + 1 := x k + α k p k {\displaystyle \mathbf {x} _{k+1}:=\mathbf {x} _{k}+\alpha _{k}\mathbf {p} _{k}}
r k + 1 := r k α k A p k {\displaystyle \mathbf {r} _{k+1}:=\mathbf {r} _{k}-\alpha _{k}\mathbf {Ap} _{k}}
ha rk+1 elegendően kicsiny akkor fejezze be a ciklust vége ha
z k + 1 := M 1 r k + 1 {\displaystyle \mathbf {z} _{k+1}:=\mathbf {M} ^{-1}\mathbf {r} _{k+1}}
β k := r k + 1 T z k + 1 r k T z k {\displaystyle \beta _{k}:={\frac {\mathbf {r} _{k+1}^{\mathrm {T} }\mathbf {z} _{k+1}}{\mathbf {r} _{k}^{\mathrm {T} }\mathbf {z} _{k}}}}
p k + 1 := z k + 1 + β k p k {\displaystyle \mathbf {p} _{k+1}:=\mathbf {z} _{k+1}+\beta _{k}\mathbf {p} _{k}}
k := k + 1 {\displaystyle k:=k+1\,}
vége ismétlés
Az eredmény xk+1

A fenti formulákban M az előfeltétel, és ez is szimmetrikus és pozitív definit. Ez ekvivalens az előfeltétel nélküli konjugált gradiens módszerrel, abban az esetben, ha érvényesül:

E 1 A E T x ^ = E 1 b {\displaystyle \mathbf {E} ^{-1}\mathbf {A} \mathbf {E} ^{-\mathrm {T} }\mathbf {\hat {x}} =\mathbf {E} ^{-1}\mathbf {b} } ,

ahol

E E T = M {\displaystyle \mathbf {EE} ^{\mathrm {T} }=\mathbf {M} }
x ^ = E T x {\displaystyle \mathbf {\hat {x}} =\mathbf {E} ^{\mathrm {T} }\mathbf {x} }

Források

  • Hestenes, Magnus R., Stiefel, Eduard (1952. December). „Methods of Conjugate Gradients for Solving Linear Systems” (PDF). Journal of Research of the National Bureau of Standards 49 (6). [2010. május 5-i dátummal az eredetiből archiválva]. (Hozzáférés: 2010. április 14.)  
  • Kendell A. Atkinson (1988), An introduction to numerical analysis (2nd ed.), Section 8.9, John Wiley and Sons. ISBN 0-471-50023-2
  • Mordecai Avriel (2003). Nonlinear Programming: Analysis and Methods. Dover Publishing. ISBN 0-486-43227-0.
  • Gene H. Golub and Charles F. Van Loan, Matrix computations (3rd ed.), Chapter 10, Johns Hopkins University Press. ISBN 0-8018-5414-8
Nemzetközi katalógusok
  • LCCN: sh85031141
  • GND: 4255670-3
  • SUDOC: 030223253
  • BNF: cb12168447j
  • Matematika Matematikaportál • összefoglaló, színes tartalomajánló lap