numpy的更高精度特征值

时间:2019-07-16 22:49:10

标签: numpy precision linear-algebra eigenvalue

我目前正在计算不同矩阵的几个特征值,并试图找到它们的闭式解。矩阵是厄密/自伴和三对角线。此外,每个对角元素为正,每个非对角元素为负。

由于我怀疑是试图代数求解五次方程,所以sympy无法求解我的14x14矩阵的特征值。

Numpy给了我有时可以通过Wolfram-alpha使用的出色结果,但有时却缺乏精度来确定封闭式解决方案可以采用的几种候选方案。结果,我希望提高numpy.linalg.eigenvaluesh输出本征值的精度。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

大小为> 5的特征值问题没有通用的封闭形式解(由于您提到的原因),因此所有通用特征求解器都是迭代的。结果,有一些错误来源。 首先,算法本身的收敛存在误差。即即使您所有的计算都是精确的,您也需要运行一定的迭代次数才能获得一定的准确性。 第二,有限的精度限制了整体精度。 数值分析人员研究了在给定算法和精度下解决方案的精确度,并得出了结果。

对于您的特定问题,如果您没有获得足够的准确性,可以尝试做一些事情。 首先,要确保您使用的方法是最好的求解器。即由于您的矩阵是对称且三对角的,请确保为此类型使用求解器(如norok2所建议)。

如果仍然不能提供足够的精度,则可以尝试提高精度。 但是,在numpy中执行此操作的主要问题是引擎盖下的LAPACK函数是为float64编译的。 因此,即使numpy函数允许更高精度的输入(float128),它也将在调用LAPACK函数之前对它们进行四舍五入。 可能可以重新编译这些函数以获得更高的精度,但是对于您的特定问题,这样做可能不值得。 (作为一个附带说明,我对scipy不太熟悉,因此可能是因为他们有用python编写的本征求解器,它支持所有不同的类型,但是您需要注意,它们实际上是在做更高阶的每一步精度,而不是默默地四舍五入到float64。)

对于您的问题,我建议您使用软件包mpmath,该软件包支持任意精度的线性代数。 由于一切都在软件中完成,因此速度稍慢,但是对于14x14矩阵,它仍然应该很快。