2011年10月17日月曜日

固有値の微分

この前から気になっていた固有値の微分だが、固有値に重複度がないときには計算する方法が見つかった。
ただ、思っていたよりも精度が出ない様子だ。
Matlab で検算用のプログラムを組んでみたが、多倍長計算の vpa を用いても誤差が残りやすい。
検算の方法が単純に (f(x+h)-f(x))/h なので、小さいhになるとこれにも誤差が入りやすいのだが、1.0e-4 以下の数値のところで2倍3倍程度でずれるときがあるようだ。
ただ、理論的に外れているのであれば、2倍3倍では済まない誤差が入るはずなので理論的にはほぼ正しいと考えている。
ちなみに、複数の固有値が似たような値になると、やはり微分の値もずれが大きくなる。

また、今のプログラムは X が n times n のときに O(n^12) のアルゴリズムとなっている。
これはかなり重い計算であって、量子化学の SDP なみに重い。

あと、固有値に重複度があるときは、問題が極端に難しくなる。
固有値自体は連続であるが、固有ベクトルは固有空間を張る基底であれば任意であるので、そのあたりをどう処理するかが次の課題である。

今日の作業内容:固有値微分の確認 5h
今日のランチ:味庵 油林鶏
明日の予測作業時間:4h

0 件のコメント:

コメントを投稿