是否有与matlab';Julia中的s rcond()函数?

是否有与matlab';Julia中的s rcond()函数?,julia,Julia,我正在移植一些使用rcond()测试奇异性的matlab代码,以及(用于matlab奇异性测试) 我看到Julia中有一个cond()函数(在Matlab中也是如此),但默认情况下rcond()似乎不可用: ERROR: rcond not defined 我假设rcond(),就像Matlab版本一样。Julia中是否有这样的函数,可能是使用了一个附加模块?(开始喜欢开源,不再使用MATLAB黑盒!) Julia在Base中没有rcond函数,我不知道任何包中都有。如果是这样的话,那就是最大

我正在移植一些使用rcond()测试奇异性的matlab代码,以及(用于matlab奇异性测试)

我看到Julia中有一个cond()函数(在Matlab中也是如此),但默认情况下rcond()似乎不可用:

ERROR: rcond not defined
我假设rcond(),就像Matlab版本一样。Julia中是否有这样的函数,可能是使用了一个附加模块?

(开始喜欢开源,不再使用MATLAB黑盒!)


Julia在Base中没有
rcond
函数,我不知道任何包中都有。如果是这样的话,那就是最大值和最小值的比值。我不知道为什么它在MATLAB中是有效的,但很可能不管是什么原因,它都不会对Julia产生影响。

MATLAB的
rcond
是一种基于以下事实的优化,即它是对平方矩阵条件数的估计。在我的测试中,考虑到它的帮助提到了LAPACK的1-范数估计量,它似乎使用了LAPACK的。事实上,这正是Julia在询问具有1-或Inf范数的平方矩阵的条件数时所做的

因此,您可以简单地定义

rcond(A::StridedMatrix) = 1/cond(A,1)
通过手动组合和,可以避免Julia两次反转LAPACK的结果,但这里的节省几乎肯定是无法估量的。然而,有可测量的节约的地方是,您可以直接采用
范数(a)
,而不是通过LU分解重构类似于a的矩阵

rcond(A::StridedMatrix) = LAPACK.gecon!('1', lufact(A).factors, norm(A, 1))

在我的测试中,这与Matlab的rcond(2014b)的行为相同,并提供了相当好的加速。

在答案中包含一个指向实现的链接非常酷。谢谢matlab的rcond是否可以避免计算所有奇异值,也许只得到最大值和最小值的估计值?matlab可能只使用LAPACK's,它可以在Julia中类似地公开(并进一步专门用于不同的矩阵类型)。啊,它是用于。最好做一些基准测试,看看是否有明确的Matlab风格的rcond。