c - LAPACKE_dgesvd(..) 中的参数 superbed 是什么意思?

标签 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);

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

实际上,该链接的目标解释了所有参数,但 LAPACKE 特定的double* super(以及顺序参数,但在 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 作为 superbed 的大小。为什么?

最佳答案

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

WORK(工作空间/输出) double 组,维度(MAX(1,LWORK)) 退出时,如果 INFO = 0,WORK(1) 返回最优 LWORK;如果 INFO > 0,WORK(2:MIN(M,N)) 包含上双对角矩阵 B 的未收敛超对角线元素,其对角线在 S 中(不一定排序)。 B满足A = U * B * VT,故其奇异值与A相同,奇异 vector 与U、VT相关。

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

查看从 http://www.netlib.org/lapack/ 下载的 lapack-3.5.0/lapacke/src/lapacke_dgesvd.c证实了这一点。

源代码还显示了高层函数lapacke_dgesvd()调用了中间层接口(interface)lapacke_dgesvd_work()。如果您使用高级接口(interface),则不必关心 WORK 的最佳大小。它将被计算并且 WORK 将在 lapacke_dgesvd()

中分配

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

再见,

弗朗西斯

关于c - LAPACKE_dgesvd(..) 中的参数 superbed 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21758782/

相关文章:

c++ - 为什么当我直接提供矩阵时,这个 LAPACK 程序可以正常工作,但当我从文件中读取矩阵时却不能正常工作?

c - 我们可以从控制流图中得到什么信息?

ubuntu - gfortran LAPACK "undefined reference"错误

c++ - ATLAS 的 clapack_sgesv 具有行优先存储顺序

c - 如何在 C 宏特定情况下添加变量参数

r - BLAS DGEMV 错误代码 -6 是什么意思?

c++ - Lapack 链接错误,使用 -fPIC 重新编译

c - 在并行化矩阵乘法时,虚拟内核是否对性能有所贡献?

c - 具有空初始值设定项的空数组

c - GCC 不提示数组越界