问题标签 [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 回答
8023 浏览

c++ - lapacke 和 lapack 的区别

我想知道LAPACK E和LAPACK有什么区别。我想用QZ分解进行特征分析,但我不确定我应该从 LAPACK E还是 LAPACK 开始。我很感激任何帮助。

0 投票
1 回答
1482 浏览

c++ - FindBLAS and FindLAPACK usage in CMake

I am a bit confused by the utility of

find_package(BLAS) and find_package( LAPACK) within CMake.

It seems that depending on the vendor found, different source code is necessary. For example, mkl has

mkl.h and/or mkl_lapacke.h

but at least one other implementation of lapack has a header which is just called lapacke.h

so different headers are needed.

and also somatcopy for mkl is mkl_somatcopy whereas other libraries clearly wont have the mkl_ prefix.

How do you reconcile this in a generic fashion as to make a tool such as find_package( LAPACK) work effectively?

Is there a standard header, because it doesn't appear to be lapacke.h for the lapacke interface..?

Finally, Accelerate is listed as an option, but, Accelerate includes LAPACK 3.2.1 equivalent features which misses the LAPACKE interface which is available in MKL and current netlib lapacke 3.5..

0 投票
1 回答
4383 浏览

c++ - 致命错误 C1083:无法打开包含文件:'complex.h':没有这样的文件或目录 ..\lapacke\include\lapacke.h

我基于以下链接为我的 Visual Studio 2008 构建了 LAPACKE 的 DLL 和库:

http://icl.cs.utk.edu/lapack-for-windows/lapack/

在构建 LAPACKE 之后,我进行了如下测试,它通过了测试:

在此处输入图像描述

构建后,我有以下文件可用:

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

我在 Visual Studio 2008 中使用了以下技巧:

在此处输入图像描述

现在我有以下 Visual Studio 2008 项目:

在此处输入图像描述

我的项目中有以下 C++ 代码:

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

当我注释掉#include "lapacke.h"可执行文件构建的行时,我得到以下控制台输出:

在此处输入图像描述

但是,当我不注释掉时,#include "lapacke.h"会出现以下错误:

在此处输入图像描述

错误位置是下lapacke.h图的第 73 行:

在此处输入图像描述

我很感激任何帮助。


编辑:

即使在包含#include <cstdlib>before 之后#include "lapacke.h",也会发生相同的错误:

在此处输入图像描述


编辑:

在以下链接中,一些人讨论了一个看起来相关的问题:

http://icl.cs.utk.edu/lapack-forum/viewtopic.php?f=2&t=2284

http://icl.cs.utk.edu/lapack-forum/viewtopic.php?f=2&t=4221


编辑

在文件lapacke.h中,以下语句可用于复杂类型。

我修改了头文件如下:

在此处输入图像描述

但是我收到以下错误:

在此处输入图像描述

上述错误发生在以下位置:

在此处输入图像描述

我不确定如何解决此错误。


编辑:

最后通过添加解决了问题,#include <complex>如下所示。顺便说一句,这篇文章帮助我弄清楚了:MinGW 错误:'min' is not a member of 'std'

在此处输入图像描述

重建没有任何问题:

在此处输入图像描述

0 投票
1 回答
1352 浏览

c++ - dbgheap.c 抛出访问冲突异常

我开发了以下代码,效果很好:

我修改了上面正确的代码,将 LAPACKE DGGEV 例程用于大型矩阵,修改后的代码如下所示:

在上面修改过的代码中(对于大型矩阵),我必须从堆中分配内存,否则堆栈会溢出。问题是,当我从堆中分配内存时,new我得到以下与堆相关并发生在内部的异常dbgheap.c(调试 CRT 堆函数):

在此处输入图像描述

有谁知道为什么会发生这种异常?也许这与 LAPACKE DLL 使用不同的堆进行分配有关……我不知道。


编辑:

堆栈跟踪是这样的:

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述


编辑:

最后通过将所有二维数组替换为一维数组来解决问题。以下代码是正确的代码,可以正常工作。有关此解决方案的详细信息,请参阅“Ilya Kobelevskiy”的答案。

0 投票
2 回答
1411 浏览

c - 用 LAPACKE 求解线性方程

我正在尝试解决一些线性方程(对称、三对角和正)。我必须使用拉帕克。我的代码如下:

LAPACKE 的函数似乎什么都不做,没有任何错误。主要问题是,我不知道函数参数代表什么。我已经搜索了很长时间,但没有真正的文档。这是我设法找到或猜测的:

  • int matrix_order -- LAPACK_COL_MAJOR 或 LAPACK_ROW_MAJOR,矩阵在内存中如何表示
  • lapack_int n -- 矩阵的大小(即列数)
  • lapack_int nrhs -- 不确定,可能是向量 b 的大小
  • double* d -- 方程矩阵
  • double* e - 不知道。
  • double* b -- d 中方程的解向量
  • lapack_int ldb -- b 的前导方向(因此?它与 nrhs 不同,nrhs 本身与 n 相同?)

我怎样才能找到这些论点的真正含义?我怎样才能使我的代码工作?

0 投票
1 回答
296 浏览

c - 将 LAPACKE_zgetrs 与 LAPACK_ROW_MAJOR 一起使用会导致非法内存访问

我正在尝试使用以下代码解决线性系统:

由于某些原因,这会导致非法内存访问LAPACKE_zgetrs(正如valgrind我的大程序检测到的那样,zgetrs因为“glibc检测到损坏或双重释放”而崩溃)。为简洁起见,我没有将其包含在我的 SSCCE 中,但所有LAPACKE返回的例程都返回 0。

相同的代码LAPACK_COL_MAJOR完美地运行和 valgrinds。

我的 lapacke、lapack 等是为 Ubuntu 12.04 自建的。我在 lapack CMake 文件中使用了以下设置:

其余的(优化的 blas/lapack 和 xblas)关闭。构建过程中没有错误,所有测试都成功了。

我哪里搞砸了?

编辑:我刚刚用 Fedora21 和打包的 lapacke 试过这个。它没有重现错误。

编辑2:虽然它不会重现内存失败,但它会产生错误的解决方案,即(1 + 0I, 1 + 0I)对于上述输入(应该是(1,0)

0 投票
1 回答
386 浏览

c - xxxxx_()、LAPACK_xxxxx() 和 LAPACKE_xxxxx() 函数的区别

假设我想使用 LAPACK 来求解 C (GCC) 中的线性方程组。我将问题设置如下:

现在看来我可以使用三个函数之一来解决这个问题。第一个是这样的:

我很惊讶地发现这不需要任何#includes,这看起来……很奇怪。

第二个函数具有几乎相同的签名,除了LAPACK_我认为会减少歧义并且可能更不容易出错的前缀:

请注意,这需要我包括lapacke.h.

第三个函数通过返回info而不是将所有参数作为指针来改变签名:

同样,此功能需要lapacke.h. 它还需要使用-llapacke. 这三个功能都需要-llapack

我试图找出这些功能之间的区别。我做了一些窥探,我在lapacke.h相关的头文件中发现了以下宏:

所以看起来LAPACK_dgesv()dgesv_()是完全相同的功能的不同名称。但是,它似乎LAPACKE_dgesv()是其他可能具有不同实现的东西,特别是考虑到它需要一个额外的库这一事实。

所以我的问题是:这两个功能有什么区别?文档说 LAPACKE 是 LAPACK 的 C 接口,但是函数dgesv_()呢?显然我可以正常使用它而无需 LAPACKE 也无需在 Fortran 中编译任何东西,那有什么不同呢?

谢谢。


更新

奇怪的是,函数dgemm_()(矩阵乘法)没有任何LAPACK_dgemm()等价物。这是怎么回事?

0 投票
0 回答
139 浏览

c - MKL IPIV 索引错误

通过 MEX 运行的 C 文件使用 MKL Lapack 时,我遇到了由 LAPACKE_dgertrf 生成的 IPIV 具有无效索引的问题。LAPACKE_dgertrf 的文档指出 IPIV 的值应该在 1 和矩阵大小之间,而不是在其中一个值中得到 0。起初我以为这是为 FORTRAN 编写的文档,而 0 只是指第一行;但是,IPIV 还包含一个与矩阵大小相等的元素。

这是一个较大代码的问题,我可以在较小的测试用例中复制该代码:

C 代码(test_case.c):

要编译的 mex 命令是

当我尝试在 MATLAB 中运行 MEX 文件时,我得到

由此,我观察到当打印行数据透视表时,它同时包含 0 和 3。由于矩阵是 3 x 3,因此这两个都不是有效索引。文档说 0 条目不应该在那里。我强烈怀疑这会导致 dgetrs 中的段错误。

有谁知道这里发生了什么?

0 投票
1 回答
2821 浏览

lapack - 如何使用 dsyev 例程计算特征值?

我正在尝试编写代码来计算对称矩阵的特征向量和特征值。我了解如何使用笔和纸计算 evalues,但我对api有点困惑!我是初学者,所以我在解释 api 参数时可能是错误的。

输出: -1.000000 -1.000000 8.000000

0.617945 1.999713 -0.016938 0.010468 0.033876 0.999857 1.381966 0.618034 0.000000

而我期望k= -1 : [1,-2,0] ,[4,2,-5] 和k=8 : [2,1,2]在输出中的某处!

我是在错误地使用 api 还是我错误地读取了输出?还请建议我如何使用 fortran api 执行相同的任务?与 fortran 一样,我无法获得正确的 eign 值!即我用fortran获得的eign值:-0.134742 0.050742 0.523036

外部向量:0.617945 1.999713 -0.016938 0.010468 0.033876 0.999857 1.381966 0.618034 0.000000

0 投票
0 回答
497 浏览

c - 如何调用 LAPACKE 的 cgemv 函数将矩阵和来自 c 的向量相乘?

我正在尝试使用 cgemv_ 函数将复数矩阵与复数向量相乘,但结果不是我所期望的。我尝试使用简单的单位矩阵乘法运行该函数:

但我得到的结果不是我所期望的 (1, 3, 2) ,而是:

我尝试使用的参考:http: //www.netlib.org/lapack/explore-html/d6/dee/group__complex__blas__level2.html#ga0983da08821bec7701e90fb1e65c8cd7