问题标签 [lapacke]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
358 浏览

linear-algebra - 为 lapack 求解器 dgbsv 在行主要布局中编写带状矩阵

我想求解这个线性系统 Ax=b,其中:

解决方案应该是

这是一个带状矩阵,下带等于 1,上带等于 2

使用 DGBSV 求解器求解如下

代码在 dgbsv 求解器处中止。当我写矩阵 a 和 b 指针时,它给出了地址的值。

0 投票
1 回答
514 浏览

python - 使用 LAPACK 进行奇异值分解:大矩阵的问题

我正在使用 LAPACK 的 C 接口来计算矩阵的奇异值分解 (SVD)。为此,我正在使用例程dgesvd_

我创建了一个简单的 C++ 脚本,它创建一个随机矩阵(包含M行和N列),并计算其 SVD。该脚本的代码如下:

具有 150 行和 3 列的矩阵似乎可以正确计算 SVD。但是,当矩阵的行数较大时(例如,1500 行和 3 列的矩阵),编译脚本的执行会引发此错误:Segmentation fault (core dumped)

我试图在 Python 脚本中做类似的事情:

当我使用 Python 时,奇异值似乎可以正确计算而没有任何错误,尽管我使用的 NumPy 方法是使用 LAPACK 例程执行的dgesdd_(我尝试过这个并引发了相同的错误)。

有谁知道为什么会发生这个错误?任何解决问题的帮助将不胜感激。谢谢。

Pd:我使用的是 lapacke 3.6.0 版和 Ubuntu 16.04 LTS。

0 投票
0 回答
229 浏览

c++ - LAPACKE_cgesdd 和 LAPACKE_cgesvd SVD 计算是否可靠?

我正在使用LAPACKE_cgesddandLAPACKE_cgesvd来计算矩阵的奇异值。这两个例程都可以选择仅计算奇异值。我遇到的问题是,在以下四个测试用例中:

  1. 完整的 SVD 与LAPACKE_cgesdd;
  2. 完整的 SVD 与LAPACKE_cgesvd;
  3. 奇异值仅与LAPACKE_cgesdd;
  4. 奇异值仅与LAPACKE_cgesvd

我收到不同的奇异值。尤其是:

测试,3 x 4矩阵

完整的 SVDLAPACKE_cgesdd

17.8592720031738 11.4463796615601 6.74482488632202

完整的 SVDLAPACKE_cgesvd

17.8651084899902 11.3695945739746 6.83876800537109

奇异值仅与LAPACKE_cgesdd

17.8592758178711 11.4463806152344 6.74482440948486

奇异值仅与LAPACKE_cgesvd

17.8705902099609 11.5145053863525 6.82878828048706

可以看出,即使对于相同的例程,当仅从完整 SVD 切换到奇异值时,结果也会从第三位有效数字开始发生变化。

我的问题是:

这合理吗?

难道我做错了什么?

预先感谢您的任何帮助。

这是我正在使用的代码:

编译为

0 投票
3 回答
949 浏览

c++ - zheev 给出错误的特征值(检查 zgeev 和 numpy.linalg.eig)

修补 linalg 库,我尝试使用 LAPACKE 为 Hermitian 矩阵启动和运行在 C++ 中的对角化例程

我按照这个例子使用了 ZHEEV,然后检查了其他一些方法,特别是 numpy 的 eig 和 LAPACK(E) 的 zgeev。我不想使用英特尔自有品牌的东西,所以我避开了 MKL,直接选择了 LAPACKE,但大部分代码与示例中的相同。

为了清楚起见,我看不出为什么一般 z ge ev 不应该能够处理he rmitian矩阵的特定情况,即使 z he ev 被优化。

这是c++

编译

唯一的非标准包是liblapacke-dev, 和libcblas-dev, 通过apt-get install. 什么可能出错?

输出是

我尝试使用上三角形,填充矩阵和其他各种修复。每次结果都一样。

我对#define ldcmplex lapack_complex_double宏表示怀疑,但我能找到的所有文档都说我应该使用双复数,所以我有点迷茫。无论如何,如果这是问题所在,为什么 zgeev 会起作用?

无论如何,这是python检查脚本:

它与 zgeev 一致(最多一些舍入/机器错误)。上面链接的英特尔教程也证实了结果。zheev 方法显然是少数,我只是不知道为什么。

我在几台机器上试过这个:

任何和所有的帮助表示赞赏。

0 投票
1 回答
232 浏览

c++ - LAPACK zgemm op(A) 尺寸

在netlib 的这个链接中,它将 M 指定为:

输入时,M 指定矩阵 op(A) 和矩阵 C 的行数。M 必须至少为零。退出时不变。

因此,如果我想使用 3x10 矩阵作为 A 但我想使用它的共轭 zgemm (TRANSA = 'C') 我应该输入什么作为 M?3个还是10个?

此外,当我使用其他 LAPACK 例程时,我将 2D 矩阵作为 1D 输入,例如 A[3*3] 而不是 A[3][3] 并且在调用例程时我只使用 A 作为矩阵,我可以对非方阵?A[3*10] 而不是 A[3][10]?

我用 C++ 编写代码。

0 投票
2 回答
1018 浏览

python - LAPACK 例程中的 WORK 参数有什么用?

我正在计算对称矩阵的特征值分解scipy.linalg.cython_lapack.syev。从我找到的文档中,我需要传递一个名为 WORK 的数组:

WORK 是 DOUBLE PRECISION 数组,维度 (MAX(1,LWORK)) 退出时,如果 INFO = 0,WORK(1) 返回最优 LWORK。

但是,我看不到它的作用(无法理解执行后的值是什么),也看不到它的用途。这个参数的目的是什么?

0 投票
1 回答
512 浏览

c - C 嵌入错误:“XXXX”声明为返回函数的函数

我正在尝试交叉编译 LAPACK 库(fortran)和 C API,LAPACKE 用于裸机嵌入式目标 powerpc-eabi 目标,为此目标使用 gcc 交叉编译器。编译继续,但最终遇到此错误:

在构建 LAPACK、LAPACKE 的 C 接口时会出现此错误。

LAPACK 论坛上的一篇文章表明这​​是 Fortran 名称修改的问题,并添加了-DADD_处理器标志。上面我已经尝试过了,但这没有任何区别。

预处理器定义用于头文件,复制如下:

错误发生在另一个头文件中,它使用LAPACK_GLOBAL如下:

文件内容如下图lapacke_mangling.h所示:

在本机构建或为另一个 linux 目标构建时不会发生该错误,powerpc-linux-gnu.

谁能解释这个问题?

0 投票
1 回答
765 浏览

c++ - 在 Visual Studio 中使用 OpenBLAS LAPACKE

我在我的项目中需要一些线性代数,并希望为此使用 OpenBLAS。我下载了预编译版本(64 位版本)并将其解压缩到我的项目文件夹中。在 Visual Studio 中,我将 include-、bin- 和 lib- 文件夹添加到我的项目中,并毫无问题地运行了这个示例。

接下来,我想看一下LAPACK,所以我在includes中添加了lapacke.h,它与cblas.h在同一目录中,并且包含在官方下载中。但是现在我得到了数百个错误,对于每个函数,就好像一个 lib 文件丢失了一样。例如对于这条线

我明白了

我找不到有关如何设置 OpenBLAS/LAPACK 的更多信息,他们通常只是说“包含文件”,我有。否则 cblas 示例也不会运行。而我能找到的(相关)示例仅使用 cblas.h,而不是 lapacke.h

有人可以告诉我我做错了什么吗?

0 投票
0 回答
105 浏览

matlab - LAPACK 的 Schur 输出与 MATLAB 不匹配

我正在尝试使用 LAPACK 重现 schur 函数,但在获得与 MATLAB 匹配的结果方面面临困难,尽管 MATLAB 在内部使用 LAPACK 作为其 schur。我尝试使用 LAPACK_dgehrd 和 LAPACK_dhseqr,但是 T 的最后一列与 MATLAB 不匹配。然后我尝试使用 dgees,但是矩阵 T 中特征值的顺序与 MATLAB 给出的顺序不同,这反过来又导致 T 矩阵的其余部分不同。我已经插入了用于 LAPACK 的 C 代码。dgehrd 和 dhesqr 部分已被注释。还附上了一张图片,使用三种方式获得了一个小的 4x4 矩阵的结果:

  1. MATLAB
  2. dgehrd&dhesqr
  3. 吉斯

我使用的 MATLAB 函数非常简单:[Q,T]=schur(A);

请注意,当我使用 dgehrd 和 dhesqr 时,输出甚至不满足 schur 的 U T U'=A 条件;而 dgees 和 MATLAB 输出满足这一点。

您能否指导我使用 dgehrd&dhesqr 做错了什么,导致 T 的最后一列不正确?我曾尝试在 LAPACK_dgehrd 之前使用 dgebal,在 LAPACK_dhseqr 之前使用 LAPACK_dorghr,但这也无济于事。此外,我尝试在 C 代码末尾使用 lapack_logical 函数对 dgees 使用排序“S”选项,将 sdim 设置为 nrows-1 和;但这导致了崩溃,你能指导我哪里出错了吗?

来自 MATLAB 和两个 LAPACK 包的 schur 比较

0 投票
1 回答
233 浏览

c - 为什么这个条件不满足?

结果 :

即使变量 vt 等于 0,条件也不满足。问题出在哪里!!