我目前正在计算不同矩阵的几个特征值,并试图找到它们的闭合形式的解。该矩阵是厄米特矩阵/自共轭矩阵,并且是三对角矩阵。另外,每个对角线元素都是正的,每个非对角线元素都是负的。
由于我怀疑这是一个尝试代数求解五次项的问题,渐近不能求解我的14x14矩阵的特征值。
Numpy给了我很好的结果,有时我可以通过wolfram-alpha使用,但有时精度不够,无法确定封闭形式的解决方案可以采用几个候选者中的哪一个。因此,我希望提高numpy.linalg.eigenvaluesh输出特征值的精度。任何帮助都将不胜感激!
发布于 2019-07-24 23:46:07
size>=5的特征值问题没有一般的闭合形式的解(因为你提到的原因),所以所有的一般特征解算器都是迭代的。因此,有几个错误来源。首先,算法本身的收敛性存在误差。也就是说,即使你所有的计算都是精确的,你也需要运行一定数量的迭代来获得一定的准确性。其次,有限的精度限制了整体精度。数值分析人员研究对于给定算法和精度,您可以获得多精确的解决方案,并在这方面有结果。
对于你的具体问题,如果你没有得到足够的准确性,你可以尝试做一些事情。第一,确保你的方法使用了最好的求解器。也就是说,由于您的矩阵是对称的和三对角线的,请确保您使用的是这种类型的求解器(如norok2所建议的)。
如果这仍然不能给你足够的准确性,你可以尝试提高精度。然而,在numpy中这样做的主要问题是,幕后的LAPACK函数是为float64编译的。因此,即使numpy函数允许更高精度的输入(float128),它也会在调用LAPACK函数之前对它们进行舍入。也许可以重新编译这些函数以获得更高的精度,但这可能不值得为您的特定问题付出努力。(顺便说一句,我对scipy不是很熟悉,所以他们可能有用python编写的支持所有不同类型的特征解析器,但你需要注意的是,他们实际上是在以更高的精度完成每一步,而不是默默地舍入到float64。)
对于您的问题,我建议使用包mpmath,它支持任意精度的线性代数。它有点慢,因为一切都是在软件中完成的,但对于14x14矩阵来说,它仍然应该是相当快的。
https://stackoverflow.com/questions/57066407
复制相似问题