Python / Matlab - 以四次精度或更高精度获取矩阵的等级

时间:2016-07-22 18:03:58

标签: python matrix precision rank quad

我有一个14x14矩阵,其中我试图取得排名。问题是它具有高条件数,因此使用双精度我的矩阵不是满秩。我知道它应该是,所以我试图以更高的精度取得排名。

到目前为止,我已经在python中安装了bigfloat包,但是在尝试以更高的精度获得排名方面却没有成功。我还缩放了我的矩阵,我尝试了python的jacobi预处理器和其他一些缩放方法,但这还不够。

我没有尝试解决线性方程组,我只需要验证我的所有列都是线性独立的。换句话说,我想验证一个(简化的)矩阵,例如所示的矩阵是2级而不是1。

[1, 0;
 0, 1e-20]

任何建议?

2 个答案:

答案 0 :(得分:0)

matlab的rank功能不适合你吗?

>> A = [1,0; 0, 1e-20];
>> rank(A, 1e-19)
ans =  1
>> rank(A, 1e-21)
ans =  2

答案 1 :(得分:0)

如果您使用的是病态矩阵,则很难说出矩阵的等级。您示例中的1.0e-20可能只是实际计算中的舍入误差。

在numpy中,通过查看SVD并计算“零”特征值的数量来检查排名,其中“零”具有一定的容差。根据您在此处设置的内容,您会得到不同的结果:

import numpy

a = numpy.array([[1, 0], [0, 1e-20]])

rank = numpy.linalg.matrix_rank(a, tol=1.0e-10)
print(rank)

rank = numpy.linalg.matrix_rank(a, tol=1.0e-30)
print(rank)
1
2