Content deleted Content added
Added missing boldfaces for K, p, and s. |
m Reverted edit by 186.177.184.151 (talk) to last version by Weberjoh |
||
(11 intermediate revisions by 8 users not shown) | |||
Line 1:
{{Short description|Concept in mathematics}}
{{Technical|date=May 2015}}
Line 5 ⟶ 6:
==Algorithmic steps==
===Unpreconditioned BiCGSTAB===
In the following sections, {{math|1=('''<var>x</var>''','''<var>y</var>''') = '''<var>x</var>'''<sup>T</sup> '''<var>y</var>'''}} denotes the [[dot product]] of vectors. To solve a linear system {{math|'''<var>Ax</var>''' {{=}} '''<var>b</var>'''}}, BiCGSTAB starts with an initial guess {{math|'''<var>x</var>'''<sub>0</sub>}} and proceeds as follows:
# {{math|'''<var>r</var>'''<sub>0</sub> {{=}} '''<var>b</var>''' − '''<var>Ax</var>'''<sub>0</sub>}}
# Choose an arbitrary vector {{math|'''<var>r̂</var>'''<sub>0</sub>}} such that {{math|('''<var>r̂</var>'''<sub>0</sub>, '''<var>r</var>'''<sub>0</sub>) ≠ 0}}, e.g., {{math|'''<var>r̂</var>'''<sub>0</sub> {{=}} '''<var>r</var>'''<sub>0</sub>}}
# {{math| # {{math|'''<var>
# {{math|'''<var>v</var>'''<sub>0</sub> {{=}} '''<var>p</var>'''<sub>0</sub> {{=}} '''0'''}}▼
# For {{math|<var>i</var> {{=}} 1, 2, 3, …}}
## {{math|'''<var>
## {{math|<var>
## {{math|<var>'''
## {{math|<var>'''
## If {{math|<var>
## {{math|<var>'''h'''</var> {{=}} '''<var>x</var>'''<sub><var>i</var>−1</sub> + <var>α'''p'''<sub>i</sub></var> }}▼
## If {{math|<var>'''h'''</var>}} is accurate enough, then set {{math|<var>'''x'''<sub>i</sub></var> {{=}} <var>'''h'''</var>}} and quit▼
## {{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>'''}}
## {{math|<var>ω
## {{math|<var>'''x'''<sub>i</sub></var> {{=}} <var>'''h'''</var> + <var>ω
##
## If {{math|<var>'''
▲## {{math|<var>
▲## {{math|<var>
## {{math|<var>'''p'''<
In some cases, choosing the vector {{math|'''<var>r̂</var>'''<sub>0</sub>}} randomly improves numerical stability.<ref>{{Cite journal |last=Schoutrop |first=Chris |last2=Boonkkamp |first2=Jan ten Thije |last3=Dijk |first3=Jan van |date=July 2022 |title=Reliability Investigation of BiCGStab and IDR Solvers for the Advection-Diffusion-Reaction Equation |url=https://doi.org/10.4208/cicp.OA-2021-0182 |journal=Communications in Computational Physics |language=en |volume=32 |issue=1 |pages=156–188 |doi=10.4208/cicp.oa-2021-0182 |issn=1815-2406}}</ref>
===Preconditioned BiCGSTAB===
Line 31 ⟶ 33:
# {{math|'''<var>r</var>'''<sub>0</sub> {{=}} '''<var>b</var>''' − '''<var>Ax</var>'''<sub>0</sub>}}
# Choose an arbitrary vector {{math|'''<var>r̂</var>'''<sub>0</sub>}} such that {{math|('''<var>r̂</var>'''<sub>0</sub>, '''<var>r</var>'''<sub>0</sub>) ≠ 0}}, e.g., {{math|'''<var>r̂</var>'''<sub>0</sub> {{=}} '''<var>r</var>'''<sub>0</sub>}}
# {{math|<var>ρ</var><sub>0</sub> {{=}} ('''<var>
# {{math|'''<var>
# For {{math|<var>i</var> {{=}} 1, 2, 3, …}}
## {{math|'''<var>
## {{math|<var>
## {{math|<var>
## {{math|'''<var>y</var>''' {{=}} {{SubSup|'''<var>K</var>'''|2|−1}}{{SubSup|'''<var>K</var>'''|1|−1}}'''<var>p</var>'''<sub><var>i</var></sub>}}▼
## {{math|<var>'''h'''</var> {{=}} '''<var>x</var>'''<sub><var>i</var>−1</sub> + <var>α'''y'''</var> }}
▲## {{math|'''<var>
## If {{math|<var>'''h'''</var>}} is accurate enough then {{math|<var>'''x'''<sub>i</sub></var> {{=}} <var>'''h'''</var>}} and quit
▲## {{math|'''<var>s</var>''' {{=}} '''<var>r</var>'''<sub><var>i</var>−1</sub> − <var>α'''v'''<sub>i</sub></var>}}
## {{math|'''<var>z</var>''' {{=}} {{SubSup|'''<var>K</var>'''|2|−1}}{{SubSup|'''<var>K</var>'''|1|−1}}'''<var>s</var>'''}}
## {{math|'''<var>t</var>''' {{=}} '''<var>Az</var>'''}}
## {{math|<var>ω
## {{math|<var>'''x'''<sub>i</sub></var> {{=}} <var>'''h'''</var> + <var>ω
▲##
## If {{math|<var>'''x'''<sub>i</sub></var>}} is accurate enough then quit
## {{math|<var>
▲## {{math|
▲## {{math|<var>
This formulation is equivalent to applying unpreconditioned BiCGSTAB to the explicitly preconditioned system
Line 90 ⟶ 92:
:{{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>''')<var>'''r'''<sub>0</sub></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>}}.
It follows from the recurrence relations for {{math|<var>P<sub>i</sub></var>('''<var>A</var>''')}} and {{math|<var>T<sub>i</sub></var>('''<var>A</var>''')}} and the definition of {{math|<var>Q<sub>i</sub></var>('''<var>A</var>''')}} that
Line 98 ⟶ 100:
which entails the necessity of a recurrence relation for {{math|<var>Q<sub>i</sub></var>('''<var>A</var>''')<var>T<sub>i</sub></var>('''<var>A</var>''')'''<var>r</var>'''<sub>0</sub>}}. This can also be derived from the BiCG relations:
:{{math|<var>Q<sub>i</sub></var>('''<var>A</var>''')<var>T<sub>i</sub></var>('''<var>A</var>''')'''<var>r</var>'''<sub>0</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> + <var>β</var><sub><var>i</var>+1</sub>('''<var>I</var>''' − <var>ω<sub>i</sub>'''A'''</var>)<var>Q</var><sub><var>i</var>−1</sub>('''<var>A</var>''')<var>
Similarly to defining {{math|<var>'''r̃'''<sub>i</sub></var>}}, BiCGSTAB defines
Line 132 ⟶ 134:
:{{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
:{{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>}},
Line 144 ⟶ 146:
:{{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
:{{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>Ap̃</var>'''<sub><var>i</var></sub>)}}.
Line 167 ⟶ 169:
==References==
{{reflist}}
* {{Cite journal | doi = 10.1137/0913035 | title = Bi-CGSTAB: A Fast and Smoothly Converging Variant of Bi-CG for the Solution of Nonsymmetric Linear Systems | year = 1992 | last1 = Van der Vorst | first1 = H. A. | journal = [[SIAM Journal on Scientific Computing|SIAM J. Sci. Stat. Comput.]] | volume = 13 | issue = 2 | pages = 631–644 | hdl = 10338.dmlcz/104566 | hdl-access = free }}
* {{cite book
|