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

如何在LAPACK sgelsd例程中为b分配内存,lapack,lapacke,Lapack,Lapacke,根据官方用户指南,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(flo

根据官方用户指南,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向量吗

谢谢。

这就是答案。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)).