Biconjugate gradient stabilized method: Difference between revisions

Content deleted Content added
m link [dD]ot product
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.
Line 9:
# {{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>x</var>''','''<var>y</var>''') }} denotes the [[dot product]] of vectors {{math|1=('''<var>x</var>''','''<var>y</var>''') = '''<var>x</var>'''<sup>T</sup> '''<var>y</var>'''}}
# {{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>v</var>''' {{=}} ('''<var>r̂</var>'''<sub>0</sub>, '''<var>rAp</var>'''<sub><var>i</var>−1</sub>)}}
## {{math|<var>βα</var> {{=}} (<var>ρ<sub>i</sub></var>/<var>ρ</var><sub><var>i</var>−1</sub>)/('''<var>α</var>/'''<varsub>ω0</var><sub>, <var>i'''v'''</var>−1</sub>)}}
## {{math|<var>'''ph'''<sub>i</sub></var> {{=}} '''<var>rx</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>'''vs'''<sub>i</sub></var> {{=}} <var>'''r'''<var>Ap</var>'''<sub><var>i</var>−1</sub> − <var>α'''v'''</var>}}
## If {{math|<var>α'''h'''</var> {{=}} <var>ρ<sub>is accurate enough, i.e., if </sub></var>/('''s'''</var> is small enough, then set {{math|</var>'''x'''<sub>0i</sub>,</var> {{=}} <var>'''vh'''<sub>i</sub></var>)}} and quit
## {{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>ω<sub>i</sub></var> {{=}} (<var>'''t'''</var>, <var>'''s'''</var>)/(<var>'''t'''</var>, <var>'''t'''</var>)}}
## {{math|<var>'''x'''<sub>i</sub></var> {{=}} <var>'''h'''</var> + <var>ω<sub>i</sub>'''s'''</var>}}
## If {{math|<var>'''xr'''<sub>i</sub></var> {{=}} is<var>'''s'''</var> accurate enough, then quit<var>ω'''t'''</var>}}
## If {{math|<var>'''rx'''<sub>i</sub></var>}} is accurate enough, i.e., if {{=}} math|<var>'''sr'''</var> − <var>ω<sub>i</sub>'''t'''</var>}} is small enough, then quit
## {{math|<var>'''h'''ρ<sub>i</sub></var> {{=}} ('''<var>x</var>'''<sub>0<var/sub>i, '''</var>−1r</sub> + <var>α'''p'''<sub><var>i</subvar></varsub> )}}
## {{math|<var>'''s'''β</var> {{=}} (<var>'''r'''ρ<sub>i</sub></var>/<var>ρ</var><sub><var>i</var>−1</sub>)(<var>α'''v'''<sub/var>i/</subvar>ω</var>)}}
## {{math|<var>'''p'''<sub>i</sub></var> {{=}} '''<var>r</var>'''<sub><var>i</var></sub> + <var>β</var>('''<var>p</var>'''<sub><var>i</var>−1</sub> − <var>ω</var>'''<var>v</var>''')}}
 
===Preconditioned BiCGSTAB===