Lanzcos法から共役勾配法のアルゴリズムを導出したのと同じような方法で, 双直交版のLanzcos法から双共役勾配法(Bi-Conjugate Gradient method : BiCG法)が導かれる. 双共役勾配法は, #ref(ls_bicg3.eq1.gif,nolink,70%) としたProjection法となる. ここで,&ref(ls_bicg3.eq2.gif,nolink,70%);である. Direct版のLanczos法を使ってCG法のアルゴリズムを導いたのと同じように, 双直交版のLanczos法の&ref(ls_bicg3.eq3.gif,nolink,70%);をLU分解し(&ref(ls_bicg3.eq4.gif,nolink,70%);),以下のように&ref(ls_bicg3.eq5.gif,nolink,70%);を定義する. #ref(ls_bicg3.eq6.gif,nolink,70%) よって,近似解は, #ref(ls_bicg3.eq7.gif,nolink,70%) ここから,&ref(ls_bicg3.eq8.gif,nolink,70%);から&ref(ls_bicg3.eq9.gif,nolink,70%);を求める. &ref(ls_bicg3.eq10.gif,nolink,70%);とその共役&ref(ls_bicg3.eq11.gif,nolink,70%);をそれぞれ&ref(ls_bicg3.eq12.gif,nolink,70%);のスカラー倍とすると, #ref(ls_bicg3.eq13.gif,nolink,70%) また,&ref(ls_bicg3.eq14.gif,nolink,70%);とすると, #ref(ls_bicg3.eq15.gif,nolink,70%) であるので,&ref(ls_bicg3.eq16.gif,nolink,70%);と&ref(ls_bicg3.eq17.gif,nolink,70%);の列ベクトルについて,A-共役が成り立つ. つまり, #ref(ls_bicg3.eq18.gif,nolink,70%) 共役勾配法と同様にすると以下の双共役勾配法のアルゴリズムが得られる. > 初期近似解&ref(ls_bicg3.eq19.gif,nolink,70%);を適当に設定~ 残差ベクトル&ref(ls_bicg3.eq20.gif,nolink,70%);を計算し, &ref(ls_bicg3.eq21.gif,nolink,70%);である共役残差ベクトル&ref(ls_bicg3.eq22.gif,nolink,70%);を設定~ &ref(ls_bicg3.eq23.gif,nolink,70%);を設定~ for(j = 0,1,...){~ &ref(ls_bicg3.eq24.gif,nolink,70%);~ &ref(ls_bicg3.eq25.gif,nolink,70%);~ &ref(ls_bicg3.eq26.gif,nolink,70%);~ &ref(ls_bicg3.eq27.gif,nolink,70%);~ if(収束判定) 反復終了~ &ref(ls_bicg3.eq28.gif,nolink,70%);~ &ref(ls_bicg3.eq29.gif,nolink,70%);~ &ref(ls_bicg3.eq30.gif,nolink,70%);~ }~