情報系高専生から物理学徒へ

やっと物理系になれた人のブログ

Kernel Polynomial Method

スペクトル関数の計算法として,ランチョス法が有名です.

ランチョス法だとスペクトル関数を連分数展開して計算します.

このときの連分数の深さは100程度であれば大丈夫らしいですが,

精度についての詳細は正直よくわからないです.(単に調べが足りないだけだとは思いますが)

そこで,私はKernel Polynomial Method (KPM)という方法も使って,

ランチョスで計算した結果が正しいのかを確認しています.

 

KPMはこの論文に詳しく載っています.

[cond-mat/0504627] The Kernel Polynomial Method

ここでは,直交多項式としてチェビシェフ多項式を使っています.

 

大まかな流れとしては,

(1)チェビシェフ多項式展開できるようにするために,固有値とωの値が-1~1までの範囲に収まるように変数変換(具体的にはH'=(H-b)/a,ω'=(ω-b)/aと変換)

(2)スペクトル関数をチェビシェフ多項式展開

(3)それに補正(●● kernel)をかける

といった感じです.

私はランチョス法の結果と比較したかったので,(3)でLorentz kernelを選びました.

しかし,この論文に書いてあることを単に試しても,ランチョス法の結果と比較できるような結果は得られません.

これは,Lorentzianの裾の部分がなかなか0に収束しないことからきています.

 

δ関数に対してさまざまなkernelを適用した結果が9ページ目に示されています.

Lorentz kernelではx=±1のところで非零になっていることが分かります.

チェビシェフ多項式は重み付き直交関数系でして,展開の際に(1-x^2)^(-1/2)がつくので,分子の部分にx=±1付近で0に強く収束するようなものでないと変な値になってしまいます.

このことから,H'=(H-b)/aとしたときのaの値の定義を,4ページ目のaの値の定義よりも大きな値にして,固有値の分布をもっと狭い範囲に制限することで,原点付近に固有値を集める必要があります.

ただし,このときのaの値を大きくすれば大きくするほど,展開係数が0になかなか収束しなくなるので注意が必要です.

私が計算したときは,固有値の分布が-0.1~0.1の範囲になるように制限しました.

また,この固有値の範囲の制限は,Lorentz kernelの導出の際の近似でも効果を発揮します.

 

これらの内容は,前期の卒研の報告書中で詳しく書きました.

報告書:http://kie.nu/2ks4

ボスからは一度チェックをもらいましたが,二度目のチェックの結果をまだもらっていないので,間違いがある可能性は大いにあります.

 

KPMに関しては,日本原子力研究開発機構の永井佑紀博士からTwitterを通して様々なアドバイスをいただきました.

深く感謝致します.