[[連立1次方程式:双共役勾配法]] Lanczos法は対称行列に限定した,Krylov部分空間における正規直交基底を求める方法であったが, これを非対称行列に対応させた拡張をLanczos双直交化(Lanczos Biorthogonalization or Two-sided Lanczos method), 非対応行列の正規直交基底を求めるのならばArnoldi法になるのではないかと思うが, そうではなく,双直交系(biorthogonal system)に基づく方法で,Arnoldiとは異なる. ちなみに 双直交系とは,2つのベクトル空間のそれぞれの直交基底&ref(ls_bicg1_bi-lanczos.eq1.gif,nolink,70%);が &ref(ls_bicg1_bi-lanczos.eq2.gif,nolink,70%);となるような系である(&ref(ls_bicg1_bi-lanczos.eq3.gif,nolink,70%);はクロネッカーのデルタでi=jで1,それ以外で0となる). Lanczos双直交化では,以下の2つのKrylov部分空間の正規直交基底を求めていく. #ref(ls_bicg1_bi-lanczos.eq4.gif,nolink,70%) #ref(ls_bicg1_bi-lanczos.eq5.gif,nolink,70%) 双直交な&ref(ls_bicg1_bi-lanczos.eq6.gif,nolink,70%);と&ref(ls_bicg1_bi-lanczos.eq7.gif,nolink,70%);のKrylov部分空間の基底ならば,&ref(ls_bicg1_bi-lanczos.eq8.gif,nolink,70%);を満たす. Lanzcos法のアルゴリズムより,以下の3項漸化式(three-term recurrence formula)が成り立つ. #ref(ls_bicg1_bi-lanczos.eq9.gif,nolink,70%) &ref(ls_bicg1_bi-lanczos.eq10.gif,nolink,70%);についても同様に, #ref(ls_bicg1_bi-lanczos.eq11.gif,nolink,70%) ここで,&ref(ls_bicg1_bi-lanczos.eq12.gif,nolink,70%);であり, &ref(ls_bicg1_bi-lanczos.eq13.gif,nolink,70%);は&ref(ls_bicg1_bi-lanczos.eq14.gif,nolink,70%);を正規化するためのパラメータである. #ref(ls_bicg1_bi-lanczos.eq15.gif,nolink,70%) 双直交化するために,&ref(ls_bicg1_bi-lanczos.eq16.gif,nolink,70%);となるように&ref(ls_bicg1_bi-lanczos.eq13.gif,nolink,70%);を定める. つまり, #ref(ls_bicg1_bi-lanczos.eq17.gif,nolink,70%) となる.この条件を満たす限り,&ref(ls_bicg1_bi-lanczos.eq13.gif,nolink,70%);はどのように定めてもよい. ここでは, #ref(ls_bicg1_bi-lanczos.eq18.gif,nolink,70%) とする.また,この定義から以下も成り立つ. #ref(ls_bicg1_bi-lanczos.eq19.gif,nolink,70%) これらの式を用いたLanczos双直交化のアルゴリズムは以下となる. > 任意のベクトル&ref(ls_bicg1_bi-lanczos.eq20.gif,nolink,70%);を設定(ただし&ref(ls_bicg1_bi-lanczos.eq21.gif,nolink,70%);)~ &ref(ls_bicg1_bi-lanczos.eq22.gif,nolink,70%);を設定~ for(j = 1,2,...,m){~ &ref(ls_bicg1_bi-lanczos.eq23.gif,nolink,70%);~ &ref(ls_bicg1_bi-lanczos.eq24.gif,nolink,70%);~ &ref(ls_bicg1_bi-lanczos.eq25.gif,nolink,70%);~ &ref(ls_bicg1_bi-lanczos.eq26.gif,nolink,70%);~ if(&ref(ls_bicg1_bi-lanczos.eq27.gif,nolink,70%);) 反復終了~ &ref(ls_bicg1_bi-lanczos.eq28.gif,nolink,70%);~ &ref(ls_bicg1_bi-lanczos.eq29.gif,nolink,70%);~ &ref(ls_bicg1_bi-lanczos.eq30.gif,nolink,70%);~ } 得られた&ref(ls_bicg1_bi-lanczos.eq31.gif,nolink,70%);からなる行列 #ref(ls_bicg1_bi-lanczos.eq32.gif,nolink,70%) を考える.双直交系なので,&ref(ls_bicg1_bi-lanczos.eq33.gif,nolink,70%);である. 今,アルゴリズム中の&ref(ls_bicg1_bi-lanczos.eq34.gif,nolink,70%);を使って以下の三重対角行列を定義する. #ref(ls_bicg1_bi-lanczos.eq35.gif,nolink,70%) 3項漸化式より, #ref(ls_bicg1_bi-lanczos.eq36.gif,nolink,70%) &ref(ls_bicg1_bi-lanczos.eq37.gif,nolink,70%);を使って,&ref(ls_bicg1_bi-lanczos.eq38.gif,nolink,70%);にまとめると以下となる. #ref(ls_bicg1_bi-lanczos.eq39.gif,nolink,70%) この式から, #ref(ls_bicg1_bi-lanczos.eq40.gif,nolink,70%) 双直交性から&ref(ls_bicg1_bi-lanczos.eq41.gif,nolink,70%);なので, #ref(ls_bicg1_bi-lanczos.eq42.gif,nolink,70%)