3

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

min_x || b - Ax ||_2

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

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

谢谢。

4

1 回答 1

2

来自英特尔 MKL的这个示例给出了答案。B 分配为 LDB*NRHS (LDB = max(M,N),并补零。注意输入 B 不一定是 1 向量,SGELSD 可以同时处理多个最小二乘问题(因此 NRHS )。

来自SGELSD 的 Lapack 文档

[进出] 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.

[输入] LDB

      LDB is INTEGER
      The leading dimension of the array B. LDB >= max(1,max(M,N)).
于 2013-01-20T22:06:00.660 回答