首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python/Matlab -以四倍精度或更高精度计算矩阵的排名

Python/Matlab -以四倍精度或更高精度计算矩阵的排名
EN

Stack Overflow用户
提问于 2016-07-23 02:03:58
回答 2查看 214关注 0票数 2

我有一个14x14的矩阵,我想要取它的秩。问题是它有一个很高的条件数,所以使用双精度时,我的矩阵不是满秩。我知道它应该是,所以我试图以更高的精度进行排名。

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

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

代码语言:javascript
复制
[1, 0;
 0, 1e-20]

有什么建议吗?

EN

回答 2

Stack Overflow用户

发布于 2016-07-23 02:13:24

matlab的rank函数对你不起作用吗?

代码语言:javascript
复制
>> A = [1,0; 0, 1e-20];
>> rank(A, 1e-19)
ans =  1
>> rank(A, 1e-21)
ans =  2
票数 0
EN

Stack Overflow用户

发布于 2019-11-12 22:53:47

如果你正在处理病态矩阵,那么很难判断你的矩阵的秩。示例中的1.0e-20可能只是实际计算中的一个舍入错误。

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

代码语言:javascript
复制
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)
代码语言:javascript
复制
1
2
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38532778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档