平塚翔太

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
ご清聴ありがとうございました