Método de gradiente biconjugado
Na matemática , mais especificamente na análise numérica , o método do gradiente biconjugado é um algoritmo para resolver um sistema de equações lineares
NOx=b.{\ displaystyle Ax = b. \,}Ao contrário do método do gradiente conjugado , este algoritmo não requer que a matriz seja auto-adjunta, por outro lado, o método requer multiplicações pela matriz adjacente .
NO{\ displaystyle A} NO∗{\ displaystyle A ^ {*}}
Algoritmo
- Escolha , um pré - condicionador regular (usado com frequência ) e ;x0{\ displaystyle x_ {0}}y0{\ displaystyle y_ {0}}M{\ displaystyle M}M-1=1{\ displaystyle M ^ {- 1} = 1}vs{\ displaystyle c}
-
r0←b-NOx0,s0←vs-NO∗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} \,};
- para fazerk=0,1,...{\ displaystyle k = 0,1, \ dots \,}
-
αk←sk∗M-1rkfk∗NOdk{\ displaystyle \ alpha _ {k} \ leftarrow {s_ {k} ^ {*} M ^ {- 1} r_ {k} \ over 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-αkNOdk{\ displaystyle r_ {k + 1} \ leftarrow r_ {k} - \ alpha _ {k} Ad_ {k} \,}, ( e são os resíduos);sk+1←sk-αk¯NO∗fk{\ displaystyle s_ {k + 1} \ leftarrow s_ {k} - {\ overline {\ alpha _ {k}}} A ^ {*} f_ {k} \,}rk=b-NOxk{\ displaystyle r_ {k} = b-Ax_ {k}}sk=vs-NO∗yk{\ displaystyle s_ {k} = cA ^ {*} y_ {k}}
-
βk←sk+1∗M-1rk+1sk∗M-1rk{\ displaystyle \ beta _ {k} \ leftarrow {s_ {k + 1} ^ {*} M ^ {- 1} r_ {k + 1} \ over 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} \,}
Discussão
O método é numericamente instável , mas é remediado pelo método estabilizado do gradiente biconjugado (en) , e continua sendo muito importante do ponto de vista teórico: definimos a iteração por e ( ) usando as seguintes projeções :
xk: =xj+PkNO-1(b-NOxj){\ displaystyle x_ {k}: = x_ {j} + P_ {k} A ^ {- 1} \ left (b-Ax_ {j} \ right)}yk: =yj+NO-∗Pk∗(vs-NO∗yj){\ displaystyle y_ {k}: = y_ {j} + A ^ {- *} P_ {k} ^ {*} \ left (cA ^ {*} y_ {j} \ right)}j<k{\ displaystyle j <k}
Pk: =vocêk(vk∗NOvocêk)-1vk∗NO{\ displaystyle P_ {k}: = \ mathbf {u_ {k}} \ left (\ mathbf {v_ {k}} ^ {*} A \ mathbf {u_ {k}} \ right) ^ {- 1} \ mathbf {v_ {k}} ^ {*} A},
Com e . Podemos iterar as próprias projeções, como
vocêk=(você0,você1,...vocêk-1){\ displaystyle \ mathbf {u_ {k}} = \ left (u_ {0}, u_ {1}, \ dots u_ {k-1} \ right)}vk=(v0,v1,...vk-1){\ displaystyle \ mathbf {v_ {k}} = \ left (v_ {0}, v_ {1}, \ dots v_ {k-1} \ right)}
Pk+1=Pk+(1-Pk)vocêk⊗vk∗NO(1-Pk)vk∗NO(1-Pk)vocêk{\ displaystyle P_ {k + 1} = P_ {k} + \ left (1-P_ {k} \ right) u_ {k} \ otimes {v_ {k} ^ {*} A \ left (1-P_ { k} \ right) \ over v_ {k} ^ {*} A \ left (1-P_ {k} \ right) u_ {k}}}.
As novas direções de descida e são ortogonais aos resíduos: e , que satisfazem as mesmas e ( ).
dk: =(1-Pk)vocêk{\ displaystyle d_ {k}: = \ left (1-P_ {k} \ right) u_ {k}}fk: =(NO(1-Pk)NO-1)∗vk{\ displaystyle f_ {k}: = \ left (A \ left (1-P_ {k} \ right) A ^ {- 1} \ right) ^ {*} v_ {k}}veu∗rk=feu∗rk=0{\ displaystyle v_ {i} ^ {*} r_ {k} = f_ {i} ^ {*} r_ {k} = 0}sk∗vocêj=sk∗dj=0{\ displaystyle s_ {k} ^ {*} u_ {j} = s_ {k} ^ {*} d_ {j} = 0}rk=NO(1-Pk)NO-1rj{\ displaystyle r_ {k} = A \ left (1-P_ {k} \ right) A ^ {- 1} r_ {j}}sk=(1-Pk)∗sj{\ displaystyle s_ {k} = \ left (1-P_ {k} \ right) ^ {*} s_ {j}}eu,j<k{\ displaystyle i, j <k}
O método do gradiente biconjugado oferece então a seguinte escolha:
vocêk: =M-1rk{\ displaystyle u_ {k}: = M ^ {- 1} r_ {k}}e .
vk: =M-∗sk{\ displaystyle v_ {k}: = M ^ {- *} s_ {k}}Esta escolha particular torna possível evitar uma avaliação direta de e , e, portanto, aumentar a velocidade de execução do algoritmo.
Pk{\ displaystyle P_ {k}}NO-1{\ displaystyle A ^ {- 1}}
Propriedades
- Se é auto-adjuntas , e , por conseguinte , e o método de gradiente conjugado produz o mesmo resultado .NO=NO∗{\ 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}}
- Em dimensões finitas , o mais tardar quando : O método do gradiente biconjugado fornece a solução exata após ter percorrido todo o espaço e, portanto, é um método direto.xnão=NO-1b{\ displaystyle x_ {n} = A ^ {- 1} b}Pnão=1{\ displaystyle P_ {n} = 1}
- A sequência produzida pelo algoritmo é bi - ortogonal (in) : e para .feu∗NOdj=0{\ displaystyle f_ {i} ^ {*} Ad_ {j} = 0}seu∗M-1rj=0{\ displaystyle s_ {i} ^ {*} M ^ {- 1} r_ {j} = 0}eu≠j{\ displaystyle i \ neq j}
- IF é um polinômio com , então . O algoritmo é, portanto, composto de projeções em subespaços de Krylov (en) ;pj′{\ displaystyle p_ {j '}}deg(pj′)+j<k{\ displaystyle deg \ left (p_ {j '} \ right) + j <k}sk∗pj′(M-1NO)vocêj=0{\ displaystyle s_ {k} ^ {*} p_ {j '} \ left (M ^ {- 1} A \ right) u_ {j} = 0}
- IF é um polinômio com , então .peu′{\ displaystyle p_ {i '}}eu+deg(peu′)<k{\ displaystyle i + deg \ left (p_ {i '} \ right) <k}veu∗peu′(NOM-1)rk=0{\ displaystyle v_ {i} ^ {*} p_ {i '} \ left (AM ^ {- 1} \ right) r_ {k} = 0}
<img src="https://fr.wikipedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" title="" width="1" height="1" style="border: none; position: absolute;">