Metoda gradientu biconjugate
W matematyce , a dokładniej w analizie numerycznej , metoda gradientu dwukoniugatowego jest algorytmem rozwiązywania układu równań liniowych
Wx=b.{\ Displaystyle Ax = b. \,}![{\ Displaystyle Ax = b. \,}](https://wikimedia.org/api/rest_v1/media/math/render/svg/83f1eec82741fe1371d5b10a1d8eb2360367c396)
W przeciwieństwie do metody gradientu sprzężonego , algorytm ten nie wymaga, aby macierz była samosprzężona, z drugiej strony metoda wymaga mnożenia przez sąsiednią macierz .
W{\ displaystyle A}
W∗{\ displaystyle A ^ {*}}![A ^ {*}](https://wikimedia.org/api/rest_v1/media/math/render/svg/44e23745a51c2c2d8d91fd98c1cf721573747ece)
Algorytm
- Wybierz , a przygotowujący regularnych (często używany ) oraz ;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-Wx0,s0←vs-W∗y0{\ Displaystyle r_ {0} \ leftarrow b-Ax_ {0}, s_ {0} \ leftarrow cA ^ {*} y_ {0} \,}
;
-
re0←M-1r0,fa0←M-∗s0{\ Displaystyle d_ {0} \ leftarrow M ^ {- 1} r_ {0}, f_ {0} \ leftarrow M ^ {- *} s_ {0} \,}
;
- do zrobieniak=0,1,...{\ Displaystyle k = 0,1, \ kropki \,}
![{\ Displaystyle k = 0,1, \ kropki \,}](https://wikimedia.org/api/rest_v1/media/math/render/svg/474a0f6e87e1e5a04eac5e205ce9018ce7642e89)
-
αk←sk∗M-1rkfak∗Wrek{\ Displaystyle \ alpha _ {k} \ leftarrow {s_ {k} ^ {*} M ^ {- 1} r_ {k} \ ponad f_ {k} ^ {*} Ad_ {k}} \,}
;
-
xk+1←xk+αkrek{\ Displaystyle x_ {k + 1} \ leftarrow x_ {k} + \ alpha _ {k} d_ {k} \,}
(yk+1←yk+αk¯fak){\ displaystyle \ left (y_ {k + 1} \ leftarrow y_ {k} + {\ overline {\ alpha _ {k}}} f_ {k} \ right) \,}
;
-
rk+1←rk-αkWrek{\ displaystyle r_ {k + 1} \ leftarrow r_ {k} - \ alpha _ {k} Ad_ {k} \,}
, ( i są pozostałościami);sk+1←sk-αk¯W∗fak{\ Displaystyle s_ {k + 1} \ leftarrow s_ {k} - {\ overline {\ alpha _ {k}}} A ^ {*} f_ {k} \,}
rk=b-Wxk{\ displaystyle r_ {k} = b-Ax_ {k}}
sk=vs-W∗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} \ ponad s_ {k} ^ {*} M ^ {- 1} r_ {k}} \,}
;
-
rek+1←M-1rk+1+βkrek{\ Displaystyle d_ {k + 1} \ leftarrow M ^ {- 1} r_ {k + 1} + \ beta _ {k} d_ {k} \,}
, .fak+1←M-∗sk+1+βk¯fak{\ 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)
Dyskusja
Metoda jest niestabilna numerycznie , ale można ją naprawić za pomocą ustabilizowanej metody gradientu biconiugatu (en) i pozostaje bardzo ważna z teoretycznego punktu widzenia: iterację definiujemy za pomocą i ( ) za pomocą następujących rzutów :
xk: =xjot+P.kW-1(b-Wxjot){\ Displaystyle x_ {k}: = x_ {j} + P_ {k} A ^ {- 1} \ lewo (b-Ax_ {j} \ prawo)}
yk: =yjot+W-∗P.k∗(vs-W∗yjot){\ Displaystyle y_ {k}: = y_ {j} + A ^ {- *} P_ {k} ^ {*} \ lewo (CA ^ {*} y_ {j} \ prawej)}
jot<k{\ displaystyle j <k}![j <k](https://wikimedia.org/api/rest_v1/media/math/render/svg/4bad1af0d1a37fef58095a8f4d0c21a5fa00cb73)
P.k: =uk(vk∗Wuk)-1vk∗W{\ Displaystyle P_ {k}: = \ mathbf {u_ {k}} \ lewo (\ mathbf {v_ {k}} ^ {*} A \ mathbf {u_ {k}} \ prawo) ^ {- 1} \ mathbf {v_ {k}} ^ {*} A}![{\ Displaystyle P_ {k}: = \ mathbf {u_ {k}} \ lewo (\ mathbf {v_ {k}} ^ {*} A \ mathbf {u_ {k}} \ prawo) ^ {- 1} \ mathbf {v_ {k}} ^ {*} A}](https://wikimedia.org/api/rest_v1/media/math/render/svg/3fcbd2c63e78cf8d8b70113347dd9fcd20b10c2d)
,
Z i . Możemy powtórzyć same prognozy, na przykład
uk=(u0,u1,...uk-1){\ Displaystyle \ mathbf {u_ {k}} = \ lewo (u_ {0}, u_ {1}, \ kropki u_ {k-1} \ po prawej)}
vk=(v0,v1,...vk-1){\ displaystyle \ mathbf {v_ {k}} = \ lewo (v_ {0}, v_ {1}, \ kropki v_ {k-1} \ po prawej)}![{\ displaystyle \ mathbf {v_ {k}} = \ lewo (v_ {0}, v_ {1}, \ kropki v_ {k-1} \ po prawej)}](https://wikimedia.org/api/rest_v1/media/math/render/svg/da70e6513ffafebb2a04e7da04f4df7d53b4f08b)
P.k+1=P.k+(1-P.k)uk⊗vk∗W(1-P.k)vk∗W(1-P.k)uk{\ Displaystyle P_ {k + 1} = P_ {k} + \ lewo (1-P_ {k} \ prawo) u_ {k} \ otimes {v_ {k} ^ {*} A \ lewo (1-P_ { k} \ right) \ over v_ {k} ^ {*} A \ left (1-P_ {k} \ right) u_ {k}}}![{\ Displaystyle P_ {k + 1} = P_ {k} + \ lewo (1-P_ {k} \ prawo) u_ {k} \ otimes {v_ {k} ^ {*} A \ lewo (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)
.
Nowe kierunki opadania i są wówczas ortogonalne do reszt: i , które spełniają to samo i ( ).
rek: =(1-P.k)uk{\ Displaystyle d_ {k}: = \ lewo (1-P_ {k} \ prawo) u_ {k}}
fak: =(W(1-P.k)W-1)∗vk{\ Displaystyle f_ {k}: = \ lewo (A \ lewo (1-P_ {k} \ prawo) A ^ {- 1} \ prawo) ^ {*} v_ {k}}
vja∗rk=faja∗rk=0{\ Displaystyle V_ {i} ^ {*} r_ {k} = f_ {i} ^ {*} r_ {k} = 0}
sk∗ujot=sk∗rejot=0{\ Displaystyle s_ {k} ^ {*} u_ {j} = s_ {k} ^ {*} d_ {j} = 0}
rk=W(1-P.k)W-1rjot{\ Displaystyle r_ {k} = A \ lewo (1-P_ {k} \ prawej) A ^ {- 1} r_ {j}}
sk=(1-P.k)∗sjot{\ Displaystyle s_ {k} = \ lewo (1-P_ {k} \ prawej) ^ {*} s_ {j}}
ja,jot<k{\ displaystyle i, j <k}![{\ displaystyle i, j <k}](https://wikimedia.org/api/rest_v1/media/math/render/svg/4c1cd56b322c87b27e757ddc777dcc467df5663b)
Metoda gradientu dwukoniugatowego oferuje wtedy następujący wybó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)
i .
vk: =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)
Ten szczególny wybór następnie pozwala uniknąć bezpośredniej oceny i , a tym samym zwiększyć szybkość wykonania algorytmu.
P.k{\ displaystyle P_ {k}}
W-1{\ displaystyle A ^ {- 1}}![A ^ {{- 1}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/83ba3a7118652cffd5de466dc439ee9184371d50)
Nieruchomości
- Jeśli jest samosprzężone , i w związku z tym , a koniugat gradient metoda daje taki sam wynik .W=W∗{\ Displaystyle A = A ^ {*}}
y0=x0{\ displaystyle y_ {0} = x_ {0}}
vs=b{\ displaystyle c = b}
rk=sk{\ displaystyle r_ {k} = s_ {k}}
rek=fak{\ 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)
- W skończonych wymiarach , najpóźniej wtedy, gdy : Metoda gradientu dwukoniugatowego daje dokładne rozwiązanie po pokryciu całej przestrzeni i dlatego jest metodą bezpośrednią.xnie=W-1b{\ Displaystyle x_ {n} = A ^ {- 1} b}
P.nie=1{\ displaystyle P_ {n} = 1}![{\ displaystyle P_ {n} = 1}](https://wikimedia.org/api/rest_v1/media/math/render/svg/80094e69fc2a7f012376998e6d35bdb2dd557729)
- Sekwencja generowana przez algorytm jest biortogonalna (in) : i dla .faja∗Wrejot=0{\ displaystyle f_ {i} ^ {*} Ad_ {j} = 0}
sja∗M-1rjot=0{\ Displaystyle s_ {i} ^ {*} M ^ {- 1} r_ {j} = 0}
ja≠jot{\ displaystyle i \ neq j}![{\ displaystyle i \ neq j}](https://wikimedia.org/api/rest_v1/media/math/render/svg/d95aeb406bb427ac96806bc00c30c91d31b858be)
- JEŻELI jest wielomianem z , to . Algorytm składa się zatem z rzutów na podprzestrzenie Kryłowa (en) ;pjot′{\ displaystyle p_ {j '}}
remisol(pjot′)+jot<k{\ Displaystyle deg \ lewo (p_ {j '} \ prawo) + j <k}
sk∗pjot′(M-1W)ujot=0{\ Displaystyle s_ {k} ^ {*} p_ {j '} \ lewo (M ^ {- 1} A \ prawo) u_ {j} = 0}
- JEŻELI jest wielomianem z , to .pja′{\ displaystyle p_ {i '}}
ja+remisol(pja′)<k{\ Displaystyle i + deg \ lewo (p_ {i '} \ prawo) <k}
vja∗pja′(WM-1)rk=0{\ Displaystyle V_ {i} ^ {*} p_ {i '} \ lewo (AM ^ {- 1} \ prawej) r_ {k} = 0}![{\ Displaystyle V_ {i} ^ {*} p_ {i '} \ lewo (AM ^ {- 1} \ prawej) 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;">