gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 23:53:58 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com