Julia 中是否有等同于 matlab 的 rcond() 函数的函数?
Is there an equivalent to matlab's rcond() function in Julia?
我正在移植一些使用 rcond() 来测试奇点的 matlab 代码,还有 recommended here(用于 matlab 奇点测试)。
我看到 Julia 中有一个 cond() 函数(在 Matlab 中也是如此),但默认情况下 rcond() 似乎不可用:
ERROR: rcond not defined
我假设 rcond(),就像 Matlab 版本一样 more efficient than 1/cond()。 Julia 中有没有这样的功能,也许使用附加模块?
Julia calculates the condition number using the ratio of maximum to the minimum of the eigenvalues(热爱开源,不再需要 MATLAB 黑盒!)
Julia 在 Base 中没有 rcond
函数,而且我不知道任何包中都有。如果是这样,它只是最大值与最小值之比。我不确定为什么它在 MATLAB 中高效,但很可能无论是什么原因,它都无法传递给 Julia。
Matlab 的 rcond
是基于以下事实的优化:它是 估计 平方 矩阵的条件数。在我的测试中,鉴于它的帮助提到了 LAPACK 的 1 范数估计量,它似乎使用了 LAPACK 的 dgecon.f。事实上,这正是 Julia 在您询问具有 1 或 Inf 范数的方阵的条件数时所做的。
所以你可以简单地定义
rcond(A::StridedMatrix) = 1/cond(A,1)
您可以通过手动组合 cond(::StridedMatrix)
and cond(::LU)
、 来避免 Julia 两次反转 LAPACK 的结果,但这里的节省几乎肯定是无法估量的。 哪里有可衡量的节省不过,就是可以直接取norm(A)
,而不用通过其LU分解来重构一个类似于A的矩阵。
rcond(A::StridedMatrix) = LAPACK.gecon!('1', lufact(A).factors, norm(A, 1))
在我的测试中,这与 Matlab 的 rcond
(2014b) 的行为相同,并且提供了不错的加速。
我正在移植一些使用 rcond() 来测试奇点的 matlab 代码,还有 recommended here(用于 matlab 奇点测试)。
我看到 Julia 中有一个 cond() 函数(在 Matlab 中也是如此),但默认情况下 rcond() 似乎不可用:
ERROR: rcond not defined
我假设 rcond(),就像 Matlab 版本一样 more efficient than 1/cond()。 Julia 中有没有这样的功能,也许使用附加模块?
Julia calculates the condition number using the ratio of maximum to the minimum of the eigenvalues(热爱开源,不再需要 MATLAB 黑盒!)
Julia 在 Base 中没有 rcond
函数,而且我不知道任何包中都有。如果是这样,它只是最大值与最小值之比。我不确定为什么它在 MATLAB 中高效,但很可能无论是什么原因,它都无法传递给 Julia。
Matlab 的 rcond
是基于以下事实的优化:它是 估计 平方 矩阵的条件数。在我的测试中,鉴于它的帮助提到了 LAPACK 的 1 范数估计量,它似乎使用了 LAPACK 的 dgecon.f。事实上,这正是 Julia 在您询问具有 1 或 Inf 范数的方阵的条件数时所做的。
所以你可以简单地定义
rcond(A::StridedMatrix) = 1/cond(A,1)
您可以通过手动组合 cond(::StridedMatrix)
and cond(::LU)
、 来避免 Julia 两次反转 LAPACK 的结果,但这里的节省几乎肯定是无法估量的。 哪里有可衡量的节省不过,就是可以直接取norm(A)
,而不用通过其LU分解来重构一个类似于A的矩阵。
rcond(A::StridedMatrix) = LAPACK.gecon!('1', lufact(A).factors, norm(A, 1))
在我的测试中,这与 Matlab 的 rcond
(2014b) 的行为相同,并且提供了不错的加速。