我有一个14x14矩阵,其中我试图取得排名。问题是它具有高条件数,因此使用双精度我的矩阵不是满秩。我知道它应该是,所以我试图以更高的精度取得排名。
到目前为止,我已经在python中安装了bigfloat包,但是在尝试以更高的精度获得排名方面却没有成功。我还缩放了我的矩阵,我尝试了python的jacobi预处理器和其他一些缩放方法,但这还不够。
我没有尝试解决线性方程组,我只需要验证我的所有列都是线性独立的。换句话说,我想验证一个(简化的)矩阵,例如所示的矩阵是2级而不是1。
[1, 0;
0, 1e-20]
任何建议?
答案 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