LAPACKE_dgesvd(..)中的参数精湛是什么意思?

时间:2014-02-13 15:41:38

标签: c lapack

提出这样的问题会引起一种不良的良心......然而,我发现谷歌这个问题出乎意料地难以实现。我正在尝试

lapack_int LAPACKE_dgesvd(
  int matrix_order, char jobu, char jobvt,
  lapack_int m, lapack_int n, double* a,
  lapack_int lda, double* s, double* u, lapack_int ldu,
  double* vt, lapack_int ldvt, double* superb);

承诺奇异值分解。已经停下来害怕Fortran我在这里找到了一个信息金矿:http://www.netlib.no/netlib/lapack/double/dgesvd.f

实际上,链接的目标解释了所有参数,但LAPACKE特定的 double * superb (以及订单参数,但在FORTRAN中都是COL_MAJOR)。

接下来,在这里http://software.intel.com/sites/products/documentation/doclib/mkl_sa/11/mkl_lapack_examples/lapacke_dgesvd_row.c.htm我找到了一个似乎暗示'这是某种工作缓存'的程序。

但是,如果确实如此,那么 LAPACKE_dgesvd_work(..)的原因是什么?

此外我还有第二个问题:在示例中,他们使用 min(M,N)-1 作为极好的大小。为什么呢?

1 个答案:

答案 0 :(得分:2)

根据http://www.netlib.no/netlib/lapack/double/dgesvd.f,关于fortran版本的参数WORK

WORK(工作空间/输出)DOUBLE PRECISION数组,尺寸(MAX(1,LWORK))          退出时,如果INFO = 0,则WORK(1)返回最佳LWORK;如果INFO> 0,WORK(2:MIN(M,N))包含上对角线矩阵B的未融合的超对角线元素,其对角线在S中(未必排序)。 B满足A = U * B * VT,因此它具有与A相同的奇异值,以及与U和VT相关的奇异向量。

这个上双对角矩阵B的超对角线有可能具有与A相同的奇异值。这也解释了长度min(n,m)-1

http://www.netlib.org/lapack/下载的lapack-3.5.0 / lapacke / src / lapacke_dgesvd.c确认一下。

源代码还显示高级函数lapacke_dgesvd()调用中级接口lapacke_dgesvd_work()。如果使用高级界面,则无需关心WORK的最佳大小。它将被计算,WORK将在lapacke_dgesvd()

中分配

我想知道使用中级接口是否有任何好处......也许当这个函数在相同大小的小矩阵上多次调用时...

再见,

弗朗西斯