我有一个14x14的矩阵,我想要取它的秩。问题是它有一个很高的条件数,所以使用双精度时,我的矩阵不是满秩。我知道它应该是,所以我试图以更高的精度进行排名。
到目前为止,我已经在python中安装了bigfloat包,但在尝试获得更高精度的排名时并不成功。我也对我的矩阵进行了缩放,我尝试了python的jacobi预处理器和其他一些缩放方法,但这还不够。
我不是在尝试解线性方程组,我只需要验证我的所有列是否线性独立。换句话说,我想验证一个(简化的)矩阵,如图所示,是秩为2,而不是1。
[1, 0;
0, 1e-20]有什么建议吗?
发布于 2016-07-23 02:13:24
matlab的rank函数对你不起作用吗?
>> A = [1,0; 0, 1e-20];
>> rank(A, 1e-19)
ans = 1
>> rank(A, 1e-21)
ans = 2发布于 2019-11-12 22:53:47
如果你正在处理病态矩阵,那么很难判断你的矩阵的秩。示例中的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
2https://stackoverflow.com/questions/38532778
复制相似问题