Mathematicaによる固有値計算の高速化 ~ Eigenvalue calculation speed by Mathematica ~ 情報工学科 06A2055 平塚 翔太 スライド一覧 前回のあらすじ プログラムの高速化(9) プログラムの高速化(10) プログラムの高速化(11) 今後の課題 参考文献 前回のあらすじ 10進数 4^2 4^1 4^0 16 1 0 0 17 1 0 1 ・ ・ ・ ・ 63 3 3 3 リスト化 三重対角行列の作成 固有値計算 -1 / λ 緩和時間がわかる 非平衡から平衡へ変化するとき,変化に要する時間 プログラムの高速化(9) 行列作成にDiagonalMatrix関数を用いる 一列ごとリストを作り,くっつける 上段 中段 -α -α -α-β/w-h[1] -α -β/w -h[1] -α-2β/w-2h[2] -α -2β/w -2h[2] -α-3β/w-3h[3] -α -3β/w -3h[3] ・・・ ・・ ・・ ・・ -nβ/w -nh[n] -β/w-nh[n] 中段 下段 結果 このプログラムは1つしか行列を作成せず,かつ hリスト2重リストなので関数化させる. 引数に設定する 速度結果 n(行列の大きさ) (n×n行列) 作成プログラム (行列プログラムのみ) オリジナルプログラム (プログラム全体) 50 0.312秒 1.684秒 100 0.702秒 2.0436秒 500 9.4224秒 5.4132秒 700 16.2084秒 6.9888秒 1000 Error 9.9216秒 前回のようにelやwを大きくすると速くなるが,行 列を大きくすると遅くなる・・・ プログラムの高速化(10) Diagonal関数では遅いので SparseArray関数を用いて 三重対角行列を作成する. Diagonalと SparseArrayの 構造を調べる Diagonalのときと同じく,一列ずつ作成する 上段 中段 結果 さらに、 ①リストの作成部分と行列の作成を分ける. SparseArray内にリスト処理プログラムを置くと時間がかか ると考えられる ②関数化せず, Table関数を用いてSparseArrayを処理さ せる. 一回一回呼び出して計算させると処理時間がかかると考え られる 速度結果② n(行列の大きさ) SparseArray (n×n行列) (s) 作成プログラム オリジナルプロ (全体)(s) グラム(s) 50 0.327 0.843 1.576 100 0.483 1.342 2.043 250 0.904 2.980 3.338 500 1.826 5.600 5.631 750 2.761 8.377 8.389 1000 3.791 11.247 10.702 前回より速くなったが,オリジナルとさほど変わらな い・・・ プログラムの高速化(11) 固有値計算 Eigenvalues関数 関数化し,行列のリストすべてを計算さ せる. 計算結果をリスト化 ・ ・ Max,Min関数で最小値と最大値を出力する. 今後の課題 さらに高速化させるよう現プログラムの ボトルネックを中心に改良する. 参考文献 Mathematica Document Center カーネル内またはホームページ http://reference.wolfram.com/mathematica/guide/Mathematica.html ご清聴ありがとうございました
© Copyright 2024 ExpyDoc