&ref(ls_lanzcos5_cg.eq1.gif,nolink,70%);と&ref(ls_lanzcos5_cg.eq2.gif,nolink,70%);に関する関係式を使って共役勾配法のアルゴリズムを導き出してみる. まず,基本的なProjection法のステップを思いだそう. #ref(ls_lanzcos5_cg.eq3.gif,nolink,70%) ここで,&ref(ls_lanzcos5_cg.eq4.gif,nolink,70%);である. これをDirect版Lanczosアルゴリズムに当てはめる.&ref(ls_lanzcos5_cg.eq5.gif,nolink,70%);とすると, #ref(ls_lanzcos5_cg.eq6.gif,nolink,70%) これまで,&ref(ls_lanzcos5_cg.eq7.gif,nolink,70%);から始まっていたが,ここではより一般的な&ref(ls_lanzcos5_cg.eq8.gif,nolink,70%);からのスタートにしてあるので注意. また,&ref(ls_lanzcos5_cg.eq9.gif,nolink,70%);と書き換えている. 次に&ref(ls_lanzcos5_cg.eq2.gif,nolink,70%);の更新式を考える. Direct版のLanczosでは&ref(ls_lanzcos5_cg.eq10.gif,nolink,70%);であり, &ref(ls_lanzcos5_cg.eq1.gif,nolink,70%);は&ref(ls_lanzcos5_cg.eq11.gif,nolink,70%);のスカラー倍になっているので,残差ベクトル&ref(ls_lanzcos5_cg.eq1.gif,nolink,70%);と前ステップの&ref(ls_lanzcos5_cg.eq2.gif,nolink,70%);を使って, #ref(ls_lanzcos5_cg.eq12.gif,nolink,70%) と書ける. なお,式中の&ref(ls_lanzcos5_cg.eq13.gif,nolink,70%);は&ref(ls_lanzcos5_cg.eq14.gif,nolink,70%);の要素として使っていた&ref(ls_lanzcos5_cg.eq13.gif,nolink,70%);とは別物なので注意. 前節で述べた&ref(ls_lanzcos5_cg.eq1.gif,nolink,70%);,&ref(ls_lanzcos5_cg.eq2.gif,nolink,70%);の直交,共役関係を使って&ref(ls_lanzcos5_cg.eq13.gif,nolink,70%);を算出することで,共役勾配法のアルゴリズムが得られる. -&ref(ls_lanzcos5_cg.eq15.gif,nolink,70%);の導出~ &ref(ls_lanzcos5_cg.eq1.gif,nolink,70%);に関する関係式より&ref(ls_lanzcos5_cg.eq16.gif,nolink,70%);なので, #ref(ls_lanzcos5_cg.eq17.gif,nolink,70%) これを&ref(ls_lanzcos5_cg.eq15.gif,nolink,70%);について解くと以下となる. #ref(ls_lanzcos5_cg.eq18.gif,nolink,70%) 分母について,&ref(ls_lanzcos5_cg.eq2.gif,nolink,70%);の性質&ref(ls_lanzcos5_cg.eq19.gif,nolink,70%);を用いると, #ref(ls_lanzcos5_cg.eq20.gif,nolink,70%) となる.よって, #ref(ls_lanzcos5_cg.eq21.gif,nolink,70%) -&ref(ls_lanzcos5_cg.eq22.gif,nolink,70%);の導出~ &ref(ls_lanzcos5_cg.eq23.gif,nolink,70%);の関係を用いる.まず, #ref(ls_lanzcos5_cg.eq24.gif,nolink,70%) であり,よって以下のように&ref(ls_lanzcos5_cg.eq22.gif,nolink,70%);に関する式が求められる. #ref(ls_lanzcos5_cg.eq25.gif,nolink,70%) これをさらに変形する. いま,&ref(ls_lanzcos5_cg.eq26.gif,nolink,70%);から, &ref(ls_lanzcos5_cg.eq27.gif,nolink,70%);なので, #ref(ls_lanzcos5_cg.eq28.gif,nolink,70%) &ref(ls_lanzcos5_cg.eq29.gif,nolink,70%);より,最終的に, #ref(ls_lanzcos5_cg.eq30.gif,nolink,70%) これらの式から,以下の共役勾配法のアルゴリズムが得られる. > &ref(ls_lanzcos5_cg.eq31.gif,nolink,70%);を計算~ for(j = 0,1,...){~ &ref(ls_lanzcos5_cg.eq32.gif,nolink,70%);~ &ref(ls_lanzcos5_cg.eq33.gif,nolink,70%);~ &ref(ls_lanzcos5_cg.eq26.gif,nolink,70%);~ if(収束判定) 反復終了~ &ref(ls_lanzcos5_cg.eq34.gif,nolink,70%);~ &ref(ls_lanzcos5_cg.eq35.gif,nolink,70%);~ }~