根据官方用户指南,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 ).
[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/