sobeig:計算矩陣本征值和本征矢的便捷小程序
sobeig:計算矩陣本征值和本征矢的便捷小程序
文/Sobereva@北京科音 2023-Jan-28
自己寫程序求解矩陣的本征值和本征矢極其簡單。但有時候需要對給定的矩陣隨手求一下本征值和本征矢,一般的計算器程序又沒有這個功能,往往又懶得寫或來不及現寫個程序去做,還有些人則完全不會寫。正好筆者在培訓班講課時需要現場求CP2K輸出的超精細耦合各向異性張量的本征值,就順手寫了個小程序叫sobeig,這里也分享出來。
sobeig可以在http://www.shanxitv.org/soft/sobeig_1.0.zip下載,帶exe后綴的是Windows版,沒后綴的是Linux版(PS:別問我怎么在Linux下啟動此程序這種沒必要問的問題)。
啟動后,sobeig會讓你輸入記錄矩陣的文本文件的路徑,程序包自帶的mat.txt就是例子,是個3*3的矩陣,是自由格式,如下所示:
0.0918507019 -4.9297513675 -5.2344223141
-4.9297513675 0.8863948625 2.3565979846
-5.2344223141 2.3565979846 -0.9782455645
然后程序會問你矩陣的維度是幾,對于處理自帶的mat.txt顯然輸入3。然后本征值就顯示在屏幕上了:
******************************* Loaded matrix *******************************
1 2 3
1 9.18507E-002 -4.92975E+000 -5.23442E+000
2 -4.92975E+000 8.86395E-001 2.35660E+000
3 -5.23442E+000 2.35660E+000 -9.78246E-001
Calculating, please wait...
Successful!
Eigenvalues:
1 8.50318156E+000
2 -6.22710477E+000
3 -2.27607679E+000
同時本征值和本征矢都以極其清晰的格式輸出到了當前目錄下的eig.txt中,內容為:
Eigenvalues:
1 8.50318156E+000
2 -6.22710477E+000
3 -2.27607679E+000
Eigenvector 1
0.64795841E+000 -0.57420585E+000 -0.50043735E+000
Eigenvector 2
-0.73900099E+000 -0.31481607E+000 -0.59562435E+000
Eigenvector 3
-0.18446527E+000 -0.75576351E+000 0.62832642E+000
可見使用便利到沒法更便利!利用echo或重定向通過命令行方式運行也可以,參看《詳談Multiwfn的命令行方式運行和批量運行的方法》(http://www.shanxitv.org/612)。
sobeig可以處理任意大的矩陣。只能是方陣,可以是對稱的也可以不是對稱的。程序內部是基于Intel MKL數學庫做矩陣對角化,速度極快。支持并行,把OMP_NUM_THREADS環境變量設為并行核數即可。