Biconjugate gradientní metoda
V matematiky , konkrétně v numerické analýze je metoda biconjugate stoupání je algoritmus umožňuje řešit systém lineárních rovnic
NAX=b.{\ displaystyle Ax = b. \,}![{\ displaystyle Ax = b. \,}](https://wikimedia.org/api/rest_v1/media/math/render/svg/83f1eec82741fe1371d5b10a1d8eb2360367c396)
Na rozdíl od metody s konjugovaným gradientem tento algoritmus nevyžaduje, aby matice byla samoadjungovaná, na druhou stranu metoda vyžaduje násobení sousední maticí .
NA{\ displaystyle A}
NA∗{\ displaystyle A ^ {*}}![A ^ {*}](https://wikimedia.org/api/rest_v1/media/math/render/svg/44e23745a51c2c2d8d91fd98c1cf721573747ece)
Algoritmus
- Zvolit , se preconditioner pravidelnost (často používaný ) a ;X0{\ displaystyle x_ {0}}
y0{\ displaystyle y_ {0}}
M{\ displaystyle M}
M-1=1{\ displaystyle M ^ {- 1} = 1}
vs.{\ displaystyle c}![vs.](https://wikimedia.org/api/rest_v1/media/math/render/svg/86a67b81c2de995bd608d5b2df50cd8cd7d92455)
-
r0←b-NAX0,s0←vs.-NA∗y0{\ displaystyle r_ {0} \ leftarrow b-Ax_ {0}, s_ {0} \ leftarrow cA ^ {*} y_ {0} \,}
;
-
d0←M-1r0,F0←M-∗s0{\ displaystyle d_ {0} \ leftarrow M ^ {- 1} r_ {0}, f_ {0} \ leftarrow M ^ {- *} s_ {0} \,}
;
- pro prácik=0,1,...{\ displaystyle k = 0,1, \ tečky \,}
![{\ displaystyle k = 0,1, \ tečky \,}](https://wikimedia.org/api/rest_v1/media/math/render/svg/474a0f6e87e1e5a04eac5e205ce9018ce7642e89)
-
αk←sk∗M-1rkFk∗NAdk{\ displaystyle \ alpha _ {k} \ leftarrow {s_ {k} ^ {*} M ^ {- 1} r_ {k} \ přes f_ {k} ^ {*} Ad_ {k}} \,}
;
-
Xk+1←Xk+αkdk{\ displaystyle x_ {k + 1} \ leftarrow x_ {k} + \ alpha _ {k} d_ {k} \,}
(yk+1←yk+αk¯Fk){\ displaystyle \ left (y_ {k + 1} \ leftarrow y_ {k} + {\ overline {\ alpha _ {k}}} f_ {k} \ right) \,}
;
-
rk+1←rk-αkNAdk{\ displaystyle r_ {k + 1} \ leftarrow r_ {k} - \ alpha _ {k} Ad_ {k} \,}
, (( a jsou zbytky);sk+1←sk-αk¯NA∗Fk{\ displaystyle s_ {k + 1} \ leftarrow s_ {k} - {\ overline {\ alpha _ {k}}} A ^ {*} f_ {k} \,}
rk=b-NAXk{\ displaystyle r_ {k} = b-Ax_ {k}}
sk=vs.-NA∗yk{\ displaystyle s_ {k} = cA ^ {*} y_ {k}}![{\ displaystyle s_ {k} = cA ^ {*} y_ {k}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/cc2a53d5ece0ea2ba8e1eb4b7bf8a586223f2303)
-
βk←sk+1∗M-1rk+1sk∗M-1rk{\ displaystyle \ beta _ {k} \ leftarrow {s_ {k + 1} ^ {*} M ^ {- 1} r_ {k + 1} \ přes s_ {k} ^ {*} M ^ {- 1} r_ {k}} \,}
;
-
dk+1←M-1rk+1+βkdk{\ displaystyle d_ {k + 1} \ leftarrow M ^ {- 1} r_ {k + 1} + \ beta _ {k} d_ {k} \,}
, .Fk+1←M-∗sk+1+βk¯Fk{\ displaystyle f_ {k + 1} \ leftarrow M ^ {- *} s_ {k + 1} + {\ overline {\ beta _ {k}}} f_ {k} \,}![{\ displaystyle f_ {k + 1} \ leftarrow M ^ {- *} s_ {k + 1} + {\ overline {\ beta _ {k}}} f_ {k} \,}](https://wikimedia.org/api/rest_v1/media/math/render/svg/ffdce4ce09ae2af1ba98e9833ebe3fd905ce63bb)
Diskuse
Metoda je numericky nestabilní , ale je napravena stabilizovanou metodou biconjugate gradientu (en) a z teoretického hlediska zůstává velmi důležitá: iteraci definujeme pomocí a ( ) pomocí následujících projekcí :
Xk: =Xj+PkNA-1(b-NAXj){\ displaystyle x_ {k}: = x_ {j} + P_ {k} A ^ {- 1} \ left (b-Ax_ {j} \ right)}
yk: =yj+NA-∗Pk∗(vs.-NA∗yj){\ displaystyle y_ {k}: = y_ {j} + A ^ {- *} P_ {k} ^ {*} \ left (cA ^ {*} y_ {j} \ right)}
j<k{\ displaystyle j <k}![j <k](https://wikimedia.org/api/rest_v1/media/math/render/svg/4bad1af0d1a37fef58095a8f4d0c21a5fa00cb73)
Pk: =uk(protik∗NAuk)-1protik∗NA{\ displaystyle P_ {k}: = \ mathbf {u_ {k}} \ left (\ mathbf {v_ {k}} ^ {*} A \ mathbf {u_ {k}} \ right) ^ {- 1} \ mathbf {v_ {k}} ^ {*} A}![{\ displaystyle P_ {k}: = \ mathbf {u_ {k}} \ left (\ mathbf {v_ {k}} ^ {*} A \ mathbf {u_ {k}} \ right) ^ {- 1} \ mathbf {v_ {k}} ^ {*} A}](https://wikimedia.org/api/rest_v1/media/math/render/svg/3fcbd2c63e78cf8d8b70113347dd9fcd20b10c2d)
,
S a . Můžeme iterovat projekce samotné, jako
uk=(u0,u1,...uk-1){\ displaystyle \ mathbf {u_ {k}} = \ left (u_ {0}, u_ {1}, \ dots u_ {k-1} \ right)}
protik=(proti0,proti1,...protik-1){\ displaystyle \ mathbf {v_ {k}} = \ vlevo (v_ {0}, v_ {1}, \ tečky v_ {k-1} \ vpravo)}![{\ displaystyle \ mathbf {v_ {k}} = \ vlevo (v_ {0}, v_ {1}, \ tečky v_ {k-1} \ vpravo)}](https://wikimedia.org/api/rest_v1/media/math/render/svg/da70e6513ffafebb2a04e7da04f4df7d53b4f08b)
Pk+1=Pk+(1-Pk)uk⊗protik∗NA(1-Pk)protik∗NA(1-Pk)uk{\ displaystyle P_ {k + 1} = P_ {k} + \ left (1-P_ {k} \ right) u_ {k} \ other {v_ {k} ^ {*} A \ left (1-P_ { k} \ right) \ over v_ {k} ^ {*} A \ left (1-P_ {k} \ right) u_ {k}}}![{\ displaystyle P_ {k + 1} = P_ {k} + \ left (1-P_ {k} \ right) u_ {k} \ other {v_ {k} ^ {*} A \ left (1-P_ { k} \ right) \ over v_ {k} ^ {*} A \ left (1-P_ {k} \ right) u_ {k}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/d40a99aa4184c1af021ea9315c27e6855dd5ecab)
.
Nové směry sestupu a poté jsou kolmé na zbytky: a , které splňují stejné a ( ).
dk: =(1-Pk)uk{\ displaystyle d_ {k}: = \ left (1-P_ {k} \ right) u_ {k}}
Fk: =(NA(1-Pk)NA-1)∗protik{\ displaystyle f_ {k}: = \ left (A \ left (1-P_ {k} \ right) A ^ {- 1} \ right) ^ {*} v_ {k}}
protii∗rk=Fi∗rk=0{\ displaystyle v_ {i} ^ {*} r_ {k} = f_ {i} ^ {*} r_ {k} = 0}
sk∗uj=sk∗dj=0{\ displaystyle s_ {k} ^ {*} u_ {j} = s_ {k} ^ {*} d_ {j} = 0}
rk=NA(1-Pk)NA-1rj{\ displaystyle r_ {k} = A \ left (1-P_ {k} \ right) A ^ {- 1} r_ {j}}
sk=(1-Pk)∗sj{\ displaystyle s_ {k} = \ vlevo (1-P_ {k} \ vpravo) ^ {*} s_ {j}}
i,j<k{\ displaystyle i, j <k}![{\ displaystyle i, j <k}](https://wikimedia.org/api/rest_v1/media/math/render/svg/4c1cd56b322c87b27e757ddc777dcc467df5663b)
Metoda biconjugate gradient pak nabízí následující výběr:
uk: =M-1rk{\ displaystyle u_ {k}: = M ^ {- 1} r_ {k}}![{\ displaystyle u_ {k}: = M ^ {- 1} r_ {k}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/a8d3f655c91703e15916fa440b0026286522d3ae)
a .
protik: =M-∗sk{\ displaystyle v_ {k}: = M ^ {- *} s_ {k}}![{\ displaystyle v_ {k}: = M ^ {- *} s_ {k}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/e5042f2ff61648cd8a8dcd40dd7214743ef07497)
Tato konkrétní volba pak umožňuje vyhnout se přímému vyhodnocení a , a tedy zvýšit rychlost provádění algoritmu.
Pk{\ displaystyle P_ {k}}
NA-1{\ displaystyle A ^ {- 1}}![A ^ {{- 1}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/83ba3a7118652cffd5de466dc439ee9184371d50)
Vlastnosti
- If je self-adjoint , a , proto , a metoda konjugovaného přechodu produkuje stejný výsledek .NA=NA∗{\ displaystyle A = A ^ {*}}
y0=X0{\ displaystyle y_ {0} = x_ {0}}
vs.=b{\ displaystyle c = b}
rk=sk{\ displaystyle r_ {k} = s_ {k}}
dk=Fk{\ displaystyle d_ {k} = f_ {k}}
Xk=yk{\ displaystyle x_ {k} = y_ {k}}![{\ displaystyle x_ {k} = y_ {k}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/dfee44f1364a497f266d599dd1a1af9d5ceede10)
- V konečných rozměrech nejpozději, když : Metoda biconjugate gradient poskytuje řešení přesné poté, co prošla celým prostorem, a je tedy přímou metodou.Xne=NA-1b{\ displaystyle x_ {n} = A ^ {- 1} b}
Pne=1{\ displaystyle P_ {n} = 1}![{\ displaystyle P_ {n} = 1}](https://wikimedia.org/api/rest_v1/media/math/render/svg/80094e69fc2a7f012376998e6d35bdb2dd557729)
- Sekvence produkovaná algoritmem je biortogonální (in) : a for .Fi∗NAdj=0{\ displaystyle f_ {i} ^ {*} Ad_ {j} = 0}
si∗M-1rj=0{\ displaystyle s_ {i} ^ {*} M ^ {- 1} r_ {j} = 0}
i≠j{\ Displaystyle i \ neq j}![{\ Displaystyle i \ neq j}](https://wikimedia.org/api/rest_v1/media/math/render/svg/d95aeb406bb427ac96806bc00c30c91d31b858be)
- IF je polynom s , poté . Algoritmus se proto skládá z projekcí na krylovské podprostory (en) ;pj′{\ displaystyle p_ {j '}}
dEG(pj′)+j<k{\ displaystyle deg \ left (p_ {j '} \ right) + j <k}
sk∗pj′(M-1NA)uj=0{\ displaystyle s_ {k} ^ {*} p_ {j '} \ vlevo (M ^ {- 1} A \ vpravo) u_ {j} = 0}
- IF je polynom , pak .pi′{\ displaystyle p_ {i '}}
i+dEG(pi′)<k{\ displaystyle i + deg \ left (p_ {i '} \ right) <k}
protii∗pi′(NAM-1)rk=0{\ displaystyle v_ {i} ^ {*} p_ {i '} \ vlevo (AM ^ {- 1} \ vpravo) r_ {k} = 0}![{\ displaystyle v_ {i} ^ {*} p_ {i '} \ vlevo (AM ^ {- 1} \ vpravo) r_ {k} = 0}](https://wikimedia.org/api/rest_v1/media/math/render/svg/ba6da354de8edafcbd657af71808787eb22de624)
<img src="https://fr.wikipedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" title="" width="1" height="1" style="border: none; position: absolute;">