Biconjugate gradient stabilized method: Difference between revisions

Content deleted Content added
Fastman99 (talk | contribs)
Unpreconditioned BiCGSTAB: This version of the algorithm is more efficient and more closely follows Saad. It is Algorithm 7.6 in the 2nd edition and 7.7 in the 3rd edition.
Fastman99 (talk | contribs)
Line 31:
# {{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>α</var>'''<sub>0</sub>, {{=}} '''<var>ωr</var>'''<sub>0</sub>) {{=}} 1}}
# {{math|'''<var>vp</var>'''<sub>0</sub> {{=}} '''<var>pr</var>'''<sub>0</sub> {{=}} '''0'''}}
# For {{math|<var>i</var> {{=}} 1, 2, 3, …}}
## {{math|'''<var>ρ<sub>i</sub>y</var>''' {{=}} ({{SubSup|'''<var>K</var>'''|2|−1}}{{SubSup|'''<subvar>0K</subvar>, '''|1|−1}}'''<var>rp</var>'''<sub><var>i</var>−1</sub>)}}
## {{math|<var>β'''v'''</var> {{=}} ('''<var>ρ<sub>i</sub>Ay</var>/<var>ρ</var><sub><var>i</var>−1</sub>)(<var>α</var>/<var>ω</var><sub><var>i</var>−1</sub>)'''}}
## {{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>−10</sub>, <var>ω</var><sub><var>i</var>−1</sub>'''<var>v</var>'''<sub><var>i</var>−1</sub>)}}
## {{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>'''v'''<sub>i</sub></var> {{=}} '''<var>Ay</var>'''}}
## {{math|<var>α</var> {{=}} <var>ρ<sub>i</sub></var>/('''<var>r̂</var>'''<sub>0</sub>, <var>'''v'''<sub>i</sub></var>)}}
## {{math|<var>'''h'''</var> {{=}} '''<var>x</var>'''<sub><var>i</var>−1</sub> + <var>α'''y'''</var> }}
## {{math|'''<var>ys</var>''' {{=}} {{SubSup|'''<var>Kr</var>'''|2|−1}}{{SubSup|'''<sub><var>Ki</var>'''|1|−1}}'''<var/sub>p</var>α'''v'''<sub><var>i</var></sub>}}
## 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>ω<sub>i</sub></var> {{=}} ({{SubSup|'''<var>K</var>'''|1|−1}}'''<var>t</var>''', {{SubSup|'''<var>K</var>'''|1|−1}}'''<var>s</var>''')/({{SubSup|'''<var>K</var>'''|1|−1}}'''<var>t</var>''', {{SubSup|'''<var>K</var>'''|1|−1}}'''<var>t</var>''')}}
## {{math|<var>'''x'''<sub>i</sub></var> {{=}} <var>'''h'''</var> + <var>ω<sub>i</sub>'''z'''</var>}}
## {{math|<var>'''vr'''<sub>i</sub></var> {{=}} '''<var>Ays</var>''' − <var>ω'''t'''</var>}}
## If {{math|<var>'''x'''<sub>i</sub></var>}} is accurate enough then quit
## {{math|<var>'''r'''ρ<sub>i</sub></var> {{=}} ('''<var>s</var>''' − <var>ω<sub>i0</sub>, '''t<var>r</var>'''<sub><var>i</var></sub>)}}
## {{math|<var>αβ</var> {{=}} (<var>ρ<sub>i</sub></var>/('''<var>ρ</var>'''<sub>0</subvar>, i</var>'''v'''−1</sub>i)(<var>α</subvar>/<var>ω</var>)}}
## {{math|<var>'''p'''<varsub>i</sub>s</var>''' {{=}} '''<var>r</var>'''<sub><var>i</var>−1</sub> + <var>αβ</var>('''v<var>p</var>'''<sub><var>i</var>−1</sub> − <var>ω</var>'''<var>v</var>''')}}
 
This formulation is equivalent to applying unpreconditioned BiCGSTAB to the explicitly preconditioned system