lapack - 如何在 LAPACK sgelsd 例程中为 b 分配内存

标签 lapack lapacke

根据官方用户指南,sgelsd用于解决最小二乘问题

min_x || b - Ax ||_2

并允许矩阵 A 为矩形且秩亏。并且根据sgelsd源码中的接口(interface)描述,b作为输入输出参数。当 sgelsd 完成时,b 存储解决方案。所以 b 占用 m*sizeof(float) 个字节。而解决方案 x 需要 n*sizeof(float) 字节(假设 A 是 m*n 矩阵,b 是 m*1 向量)。

但是,当n>m时,b的内存太小,无法存储解x。如何处理这种情况?我没有从sgelsd源代码的注释中得到它。我可以只为 b 分配 n*sizeof(float) 字节并使用第一个 m*sizeof(float) 来存储 b 向量吗?

谢谢。

最佳答案

example from Intel MKL有答案。 B 被分配为 LDB*NRHS (LDB = max(M,N),并用零填充。注意输入 B 不一定是 1-向量,SGELSD 可以同时处理多个最小二乘问题(因此 NRHS ).

来自Lapack docs for SGELSD :

[in,out] B

      B is REAL array, dimension (LDB,NRHS)
      On entry, the M-by-NRHS right hand side matrix B.
      On exit, B is overwritten by the N-by-NRHS solution
      matrix X.  If m >= n and RANK = n, the residual
      sum-of-squares for the solution in the i-th column is given
      by the sum of squares of elements n+1:m in that column.

[in] LDB

      LDB is INTEGER
      The leading dimension of the array B. LDB >= max(1,max(M,N)).

关于lapack - 如何在 LAPACK sgelsd 例程中为 b 分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14425253/

相关文章:

c++ - fatal error C1083 : Cannot open include file: 'complex.h' : No such file or directory . .\lapacke\include\lapacke.h

c++ - 头文件的解释

c - Lapacke in C : using dsymm, 链接器错误

c++ - 代码::Blocks 和 Lapack

c - 无法将 c 代码链接到 lapack/blas : undefined reference

c++ - LAPACK zgemm op(A) 维度

c - 在 C 中的结构内部使用指针时出现段错误(可能与 LAPACKE 有关)

fortran - LAPACK 程序 (Fortran 90) 的数值精度不够?

C算法反转1024x1024矩阵?

numpy - 指向 ATLAS/BLAS/LAPACK 库以进行 numpy 构建的正确方法?