sobeig:计算矩阵本征值和本征矢的便捷小程序
sobeig:计算矩阵本征值和本征矢的便捷小程序
sobeig: a convenient utility for calculating matrix eigenvalues and eigenvector
文/Sobereva@北京科音 2023-Jan-28
自己写程序求解矩阵的本征值和本征矢极其简单。但有时候需要对给定的矩阵随手求一下本征值和本征矢,一般的计算器程序又没有这个功能,往往又懒得写或来不及现写个程序去做,还有些人则完全不会写。正好笔者在培训班讲课时需要现场求CP2K输出的超精细耦合各向异性张量的本征值,就顺手写了个小程序叫sobeig,这里也分享出来。
sobeig可以在http://sobereva.com/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://sobereva.com/612)。
sobeig可以处理任意大的矩阵。只能是方阵,可以是对称的也可以不是对称的。程序内部是基于Intel MKL数学库做矩阵对角化,速度极快。支持并行,把OMP_NUM_THREADS环境变量设为并行核数即可。