我正在移植一些使用rcond()来测试奇点的matlab代码,以及recommended here(用于matlab奇点测试)。
我看到Julia中有一个cond()函数(也在Matlab中),但rcond()似乎默认不可用:
ERROR: rcond not defined
我认为rcond()和Matlab版本一样more efficient than 1/cond()。在Julia中是否有这样的功能,可能使用附加模块?
答案 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)相同,并提供了不错的加速。