在Julia中是否有与matlab的rcond()函数相同的功能?

时间:2015-02-05 02:35:09

标签: julia

我正在移植一些使用rcond()来测试奇点的matlab代码,以及recommended here(用于matlab奇点测试)。

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

ERROR: rcond not defined

我认为rcond()和Matlab版本一样more efficient than 1/cond()。在Julia中是否有这样的功能,可能使用附加模块?

2 个答案:

答案 0 :(得分:7)

Julia calculates the condition number using the ratio of maximum to the minimum of the eigenvalues(喜欢开源,不再需要MATLAB黑盒!)

Julia在Base中没有rcond函数,我在任何软件包中都没有意识到它。如果确实如此,它只是最大值与最小值之比。我不确定为什么它在MATLAB中有效,但很有可能无论什么原因它都没有带到Julia。

答案 1 :(得分:3)

Matlab' rcond是基于 square 矩阵的条件数的估计值这一事实的优化。在我的测试中,鉴于它的帮助提到了LAPACK的1-norm估计器,看起来好像它使用了LAPACK的dgecon.f。实际上,这正是朱莉娅在询问带有1-或Inf-norm的方阵的条件数时所做的事情。

所以你可以简单地定义

rcond(A::StridedMatrix) = 1/cond(A,1)

你可以通过手动组合cond(::StridedMatrix)cond(::LU)来保存Julia两次反转LAPACK的结果,但这里的节省几乎肯定是无法估量的。然而,有一个可衡量的节省,你可以直接使用norm(A)而不是通过LU分解来重建类似于A的矩阵。

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

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