Biconjugate gradient stabilized method: Difference between revisions

Content deleted Content added
m Unpreconditioned BiCGSTAB: use precomposed characters
m reverted precomposed characters; corrected placement of combining diacritical marks
Line 14:
## {{math|<var>'''p'''<sub>i</sub></var> {{=}} '''<var>r</var>'''<sub><var>i<var>−1</sub> + <var>β</var>('''<var>p</var>'''<sub><var>i<var>−1</sub> − <var>ω</var><sub><var>i<var>−1</sub>'''<var>v</var>'''<sub><var>i<var>−1</sub>)}}
## {{math|<var>'''v'''<sub>i</sub></var> {{=}} '''<var>Ap</var>'''<sub><var>i</var></sub>}}
## {{math|<var>α</var> {{=}} <var>ρ<sub>i</sub></var>/('''<var>r</var>̂'''<sub>0</sub>, <var>'''v'''<sub>i</sub></var>)}}
## {{math|'''<var>s</var>''' {{=}} '''<var>r</var>'''<sub><var>i<var>−1</sub> − <var>α'''v'''<sub>i</sub></var>}}
## {{math|'''<var>t</var>''' {{=}} '''<var>As</var>'''}}
Line 50:
==Derivation==
===BiCG in polynomial form===
In BiCG, the search directions {{math|<var>'''p'''<sub>i</sub></var>}} and {{math|'''<var>p</var>̂'''<sub><var>i</var></sub>}} and the residuals {{math|<var>'''r'''<sub>i</sub></var>}} and {{math|'''<var>r</var>̂'''<sub><var>i</var></sub>}} are updated using the following recurrence relations:
 
:{{math|<var>'''p'''<sub>i</sub></var> {{=}} '''<var>r</var>'''<sub><var>i</var>−1</sub> + <var>β<sub>i</sub></var>'''<var>p</var>'''<sub><var>i</var>−1</sub>}},
:{{math|'''<var>p</var>̂'''<sub><var>i</var></sub> {{=}} '''<var>r</var>̂'''<sub><var>i</var>−1</sub> + <var>β<sub>i</sub></var>'''<var>p</var>̂'''<sub><var>i</var>−1</sub>}},
:{{math|<var>'''r'''<sub>i</sub></var> {{=}} '''<var>r</var>'''<sub><var>i</var>−1</sub> − <var>α<sub>i</sub></var>'''<var>Ap</var>'''<sub><var>i</var></sub>}},
:{{math|'''<var>r</var>̂'''<sub><var>i</var></sub> {{=}} '''<var>r</var>̂'''<sub><var>i</var>−1</sub> − <var>α<sub>i</sub></var>'''<var>A</var>'''<sup>T</sup>'''<var>p</var>̂'''<sub><var>i</var></sub>}}.
 
The constants {{math|<var>α<sub>i</sub></var>}} and {{math|<var>β<sub>i</sub></var>}} are chosen to be
 
:{{math|<var>α<sub>i</sub></var> {{=}} <var>ρ<sub>i</sub></var>/('''<var>p</var>̂'''<sub><var>i</var></sub>, <var>'''Ap'''<sub>i</sub></var>)}},
:{{math|<var>β<sub>i</sub></var> {{=}} <var>ρ<sub>i</sub></var>/<var>ρ</var><sub><var>i</var>−1</sub>}}
 
where {{math|<var>ρ<sub>i</sub></var> {{=}} ('''<var>r</var>̂'''<sub><var>i</var>−1</sub>, '''<var>r</var>'''<sub><var>i</var>−1</sub>)}} so that the residuals and the search directions satisfy biorthogonality and biconjugacy, respectively, i.e., for {{math|<var>i</var> ≠ <var>j</var>}},
 
:{{math|('''<var>r</var>̂'''<sub><var>i</var></sub>, <var>'''r'''<sub>j</sub></var>) {{=}} 0}},
:{{math|('''<var>p</var>̂'''<sub><var>i</var></sub>, <var>'''Ap'''<sub>j</sub></var>) {{=}} 0}}.
 
It is straightforward to show that
 
:{{math|<var>'''r'''<sub>i</sub></var> {{=}} <var>P<sub>i</sub></var>('''<var>A</var>''')'''<var>r</var>'''<sub>0</sub>}},
:{{math|'''<var>r</var>̂'''<sub><var>i</var></sub> {{=}} <var>P<sub>i</sub></var>('''<var>A</var>'''<sup>T</sup>)'''<var>r</var>̂'''<sub>0</sub>}},
:{{math|'''<var>p</var>'''<sub><var>i</var>+1</sub> {{=}} <var>T<sub>i</sub></var>('''<var>A</var>''')'''<var>r</var>'''<sub>0</sub>}},
:{{math|'''<var>p</var>̂'''<sub><var>i</var>+1</sub> {{=}} <var>T<sub>i</sub></var>('''<var>A</var>'''<sup>T</sup>)'''<var>r</var>̂'''<sub>0</sub>}}
 
where {{math|<var>P<sub>i</sub></var>('''<var>A</var>''')}} and {{math|<var>T<sub>i</sub></var>('''<var>A</var>''')}} are {{math|<var>i</var>}}th-degree polynomials in {{math|'''<var>A</var>'''}}. These polynomials satisfy the following recurrence relations:
Line 82:
It is unnecessary to explicitly keep track of the residuals and search directions of BiCG. In other words, the BiCG iterations can be performed implicitly. In BiCGSTAB, one wishes to have recurrence relations for
 
:{{math|'''<var>r</var>̃'''<sub><var>i</var></sub> {{=}} <var>Q<sub>i</sub></var>('''<var>A</var>''')<var>P<sub>i</sub></var>('''<var>A</var>''')'''<var>r</var>'''<sub>0</sub>}}
 
where {{math|<var>Q<sub>i</sub></var>('''<var>A</var>''') {{=}} ('''<var>I</var>''' − <var>ω</var><sub>1</sub>'''<var>A</var>''')('''<var>I</var>''' − <var>ω</var><sub>2</sub>'''<var>A</var>''')⋯('''<var>I</var>''' − <var>ω<sub>i</sub>'''A'''</var>)}} with suitable constants {{math|<var>ω<sub>j</sub></var>}} instead of {{math|<var>'''r'''<sub>i</sub></var> {{=}} <var>P<sub>i</sub></var>('''<var>A</var>''')}} in the hope that {{math|<var>Q<sub>i</sub></var>('''<var>A</var>''')}} will enable faster and smoother convergence in {{math|<var>'''r̃'''<sub>i</sub></var>}} than {{math|<var>'''r'''<sub>i</sub></var>}}.
Line 96:
Similarly to defining {{math|<var>'''r̃'''<sub>i</sub></var>}}, BiCGSTAB defines
 
:{{math|'''<var>p</var>̃'''<sub><var>i</var>+1</sub> {{=}} <var>Q<sub>i</sub></var>('''<var>A</var>''')<var>T<sub>i</sub></var>('''<var>A</var>''')'''<var>r</var>'''<sub>0</sub>}}.
 
Written in vector form, the recurrence relations for {{math|'''<var>p</var>̃'''<sub><var>i</var></sub>}} and {{math|'''<var>r</var>̃'''<sub><var>i</var></sub>}} are
 
:{{math|'''<var>p</var>̃'''<sub><var>i</var></sub> {{=}} '''<var>r</var>̃'''<sub><var>i</var>−1</sub> + <var>β<sub>i</sub></var>('''<var>I</var>''' − <var>ω</var><sub><var>i</var>−1</sub>'''<var>A</var>''')'''<var>p</var>̃'''<sub><var>i</var>−1</sub>}},
:{{math|'''<var>r</var>̃'''<sub><var>i</var></sub> {{=}} ('''<var>I</var>''' − <var>ω<sub>i</sub>'''A'''</var>)('''<var>r</var>̃'''<sub><var>i</var>−1</sub> − <var>α<sub>i</sub>'''A'''</var>'''<var>p</var>̃'''<sub><var>i</var></sub>)}}.
 
To derive a recurrence relation for {{math|<var>'''x'''<sub>i</sub></var>}}, define
 
:{{math|<var>'''s'''<sub>i</sub></var> {{=}} '''<var>r</var>̃'''<sub><var>i</var>−1</sub> − <var>α<sub>i</sub>'''A'''</var>'''<var>p</var>̃'''<sub><var>i</var></sub>}}.
 
The recurrence relation for {{math|'''<var>r</var>̃'''<sub><var>i</var></sub>}} can then be written as
 
:{{math|'''<var>r</var>̃'''<sub><var>i</var></sub> {{=}} '''<var>r</var>̃'''<sub><var>i</var>−1</sub> − <var>α<sub>i</sub>'''A'''</var>'''<var>p</var>̃'''<sub><var>i</var></sub> − <var>ω<sub>i</sub>'''As'''<sub>i</sub></var>}},
 
which corresponds to
 
:{{math|'''<var>x</var>'''<sub><var>i</var></sub> {{=}} '''<var>x</var>'''<sub><var>i</var>−1</sub> + <var>α<sub>i</sub></var>'''<var>p</var>̃'''<sub><var>i</var></sub> + <var>ω<sub>i</sub>'''s'''<sub>i</sub></var>}}.
 
===Determination of BiCGSTAB constants===
Line 120:
In BiCG, {{math|<var>β<sub>i</sub></var> {{=}} <var>ρ<sub>i</sub></var>/<var>ρ</var><sub><var>i</var>−1</sub>}} with
 
:{{math|<var>ρ<sub>i</sub></var> {{=}} ('''<var>r</var>̂'''<sub><var>i</var>−1</sub>, '''<var>r</var>'''<sub><var>i</var>−1</sub>) {{=}} (<var>P</var><sub><var>i</var>−1</sub>('''<var>A</var>'''<sup>T</sup>)'''<var>r</var>̂'''<sub>0</sub>, <var>P</var><sub><var>i</var>−1</sub>('''<var>A</var>''')'''<var>r</var>'''<sub>0</sub>)}}.
 
Since BiCGSTAB does not explicitly keep track of {{math|'''<var>r</var>̂'''<sub><var>i</var></sub>}} or {{math|'''<var>r</var>'''<sub><var>i</var></sub>}}, {{math|<var>ρ<sub>i</sub></var>}} is not immediately computable from this formula. However, it can be related to the scalar
 
:{{math|<var>ρρ̃</var>̃<sub><var>i</var></sub> {{=}} (<var>Q</var><sub><var>i</var>−1</sub>('''<var>A</var>'''<sup>T</sup>)'''<var>r</var>̂'''<sub>0</sub>, <var>P</var><sub><var>i</var>−1</sub>('''<var>A</var>''')'''<var>r</var>'''<sub>0</sub>) {{=}} ('''<var>r</var>̂'''<sub>0</sub>, <var>Q</var><sub><var>i</var>−1</sub>('''<var>A</var>''')<var>P</var><sub><var>i</var>−1</sub>('''<var>A</var>''')'''<var>r</var>'''<sub>0</sub>) {{=}} ('''<var>r</var>̂'''<sub>0</sub>, '''<var>r</var>'''<sub><var>i</var>−1</sub>)}}.
 
Due to biorthogonality, {{math|'''<var>r</var>'''<sub><var>i</var>−1</sub> {{=}} <var>P</var><sub><var>i</var>−1</sub>('''<var>A</var>''')'''<var>r</var>'''<sub>0</sub>}} is orthogonal to {{math|<var>U</var><sub><var>i</var>−2</sub>('''<var>A</var>'''<sup>T</sup>)'''<var>r</var>̂'''<sub>0</sub>}} where {{math|<var>U</var><sub><var>i</var>−2</sub>('''<var>A</var>'''<sup>T</sup>)}} is any polynomial of degree {{math|<var>i</var> − 2}} in {{math|'''<var>A</var>'''<sup>T</sup>}}. Hence, only the highest-order terms of {{math|<var>P</var><sub><var>i</var>−1</sub>('''<var>A</var>'''<sup>T</sup>)}} and {{math|<var>Q</var><sub><var>i</var>−1</sub>('''<var>A</var>'''<sup>T</sup>)}} matter in the dot products {{math|(<var>P</var><sub><var>i</var>−1</sub>('''<var>A</var>'''<sup>T</sup>)'''<var>r</var>̂'''<sub>0</sub>, <var>P</var><sub><var>i</var>−1</sub>('''<var>A</var>''')'''<var>r</var>'''<sub>0</sub>)}} and {{math| (<var>Q</var><sub><var>i</var>−1</sub>('''<var>A</var>'''<sup>T</sup>)'''<var>r</var>̂'''<sub>0</sub>, <var>P</var><sub><var>i</var>−1</sub>('''<var>A</var>''')'''<var>r</var>'''<sub>0</sub>)}}. The leading coefficients of {{math|<var>P</var><sub><var>i</var>−1</sub>('''<var>A</var>'''<sup>T</sup>)}} and {{math|<var>Q</var><sub><var>i</var>−1</sub>('''<var>A</var>'''<sup>T</sup>)}} are {{math|(−1)<sup><var>i</var>−1</sup><var>α</var><sub>1</sub><var>α</var><sub>2</sub>⋯<var>α</var><sub><var>i</var>−1</sub>}} and {{math|(−1)<sup><var>i</var>−1</sup><var>ω</var><sub>1</sub><var>ω</var><sub>2</sub>⋯<var>ω</var><sub><var>i</var>−1</sub>}}, respectively. It follows that
 
:{{math|<var>ρ<sub>i</sub></var> {{=}} (<var>α</var><sub>1</sub>/<var>ω</var><sub>1</sub>)(<var>α</var><sub>2</sub>/<var>ω</var><sub>2</sub>)⋯(<var>α</var><sub><var>i</var>−1</sub>/<var>ω</var><sub><var>i</var>−1</sub>)<var>ρρ̃</var>̃<sub><var>i</var></sub>}},
 
and thus
 
:{{math||<var>β<sub>i</sub></var> {{=}} <var>ρ<sub>i</sub></var>/<var>ρ</var><sub><var>i</var>−1</sub> {{=}} (<var>ρρ̃</var>̃<sub><var>i</var></sub>/<var>ρρ̃</var>̃<sub><var>i</var>−1</sub>)(<var>α</var><sub><var>i</var>−1</sub>/<var>ω</var><sub><var>i</var>−1</sub>)}}.
 
A simple formula for {{math|<var>α<sub>i</sub></var>}} can be similarly derived. In BiCG,
 
:{{math|<var>α<sub>i</sub></var> {{=}} <var>ρ<sub>i</sub></var>/('''<var>p</var>̂'''<sub><var>i</var></sub>, <var>'''Ap'''<sub>i</sub></var>) {{=}} (<var>P</var><sub><var>i</var>−1</sub>('''<var>A</var>'''<sup>T</sup>)'''<var>r</var>̂'''<sub>0</sub>, <var>P</var><sub><var>i</var>−1</sub>('''<var>A</var>''')'''<var>r</var>'''<sub>0</sub>)/(<var>T</var><sub><var>i</var>−1</sub>('''<var>A</var>'''<sup>T</sup>)'''<var>r</var>̂'''<sub>0</sub>, <var>'''A'''T</var><sub><var>i</var>−1</sub>('''<var>A</var>''')'''<var>r</var>'''<sub>0</sub>)}}.
 
Similarly to the case above, only the highest-order terms of {{math|<var>P</var><sub><var>i</var>−1</sub>('''<var>A</var>'''<sup>T</sup>)}} and {{math|<var>T</var><sub><var>i</var>−1</sub>('''<var>A</var>'''<sup>T</sup>)}} matter in the dot products thanks to biorthogonality and biconjugacy. It happens that {{math|<var>P</var><sub><var>i</var>−1</sub>('''<var>A</var>'''<sup>T</sup>)}} and {{math|<var>T</var><sub><var>i</var>−1</sub>('''<var>A</var>'''<sup>T</sup>)}} have the same leading coefficient. Thus, they can be replaced simultaneously with {{math|<var>Q</var><sub><var>i</var>−1</sub>('''<var>A</var>'''<sup>T</sup>)}} in the formula, which leads to
 
:{{math|<var>α<sub>i</sub></var> {{=}} (<var>Q</var><sub><var>i</var>−1</sub>('''<var>A</var>'''<sup>T</sup>)'''<var>r</var>̂'''<sub>0</sub>, <var>P</var><sub><var>i</var>−1</sub>('''<var>A</var>''')'''<var>r</var>'''<sub>0</sub>)/(<var>Q</var><sub><var>i</var>−1</sub>('''<var>A</var>'''<sup>T</sup>)'''<var>r</var>̂'''<sub>0</sub>, <var>'''A'''T</var><sub><var>i</var>−1</sub>('''<var>A</var>''')'''<var>r</var>'''<sub>0</sub>) {{=}} <var>ρρ̃</var>̃<sub><var>i</var></sub>/('''<var>r</var>̂'''<sub>0</sub>, '''<var>A</var>'''<var>Q</var><sub><var>i</var>−1</sub>('''<var>A</var>''')<var>T</var><sub><var>i</var>−1</sub>('''<var>A</var>''')'''<var>r</var>'''<sub>0</sub>) {{=}} <var>ρρ̃</var>̃<sub><var>i</var></sub>/('''<var>r</var>̂'''<sub>0</sub>, '''<var>ApAp̃</var>̃'''<sub><var>i</var></sub>)}}.
 
Finally, BiCGSTAB selects {{math|<var>ω<sub>i</sub></var>}} to minimize {{math|'''<var>r</var>̃'''<sub><var>i</var></sub> {{=}} ('''I''' − <var>ω<sub>i</sub>'''A'''</var>)<var>'''s'''<sub>i</sub></var>}} in {{math|2}}-norm as a function of {{math|<var>ω<sub>i</sub></var>}}. This is achieved when
 
:{{math|(('''I''' − <var>ω<sub>i</sub>'''A'''</var>)<var>'''s'''<sub>i</sub></var>, <var>'''As'''<sub>i</sub></var>) {{=}} 0}},