根据官方用户指南,sgelsd用于解决最小二乘问题
min_x || b - Ax ||_2
并允许矩阵A为矩形和秩缺陷。根据sgelsd源代码中的接口描述,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向量吗?
感谢。
答案 0 :(得分:2)
这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)).