问题标签 [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.
lapack - libatlas3、liblapacke 和 libopenblas0 如何相互交互?
我试图弄清楚 Debian 11 和 Ubuntu 20.04 中以下库包之间的交互:
- libatlas3-base
- 库包
- 开放式BLAS
- libopenblas0-openmp
- libopenblas0-pthread
- libopenblas0-串行
看起来 OpenBLAS 包一次只能使用一个,因为它们位于此处显示的不同子目录中。如何选择活跃的?
- /usr/lib/x86_64-linux-gnu/openblas-openmp/libopenblas.so.0
- /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblas.so.0
- /usr/lib/x86_64-linux-gnu/openblas-serial/libopenblas.so.0
一旦我选择了活动的 OpenBLAS 实现,libatlas3 或 liblapacke 会使用活动的实现吗?你怎么知道他们在用什么?
c++ - 如何获取调用c接口的LAPACKE_dgesvd的左奇异向量的前n列?
我有一个 m * 3 的矩阵,其中 m >> 3,存储在行主要的一维数组 [xyzxyzxy z...] 中。我调用LAPACKE_dgesvd函数来获取矩阵的左奇异向量 U 的前 n 列,但它引发了异常。
我引用了这个页面:
这个页面提到如果我们只获取左左奇异向量的n列,我们可以让jobu为S,jobvt为N。在我的示例中,我只想获取U的前3列,所以我分配9你的数量,我这样调用函数:
此代码引发异常。我猜原因是 u 和 vt 没有分配足够的内存。我的意思是,如果我只想获取 U 的子向量,但我必须用 m * m 分配 U 的全部内存,用 n * n 分配 vt?
gpu - LAPACKE 或 MAGMA GPU - 使用 Cholesky 分解的矩阵求逆 - 函数 magma_dpotrf_gpu 和 magma_dpotri_gpu
我有一个函数的第一个版本,它反转一个大小矩阵并m
使用
如下:magma_dgetrf_gpu
magma_dgetri_gpu
现在,我也想使用 Cholesky 分解进行逆运算。该功能看起来像第一个版本,除了使用的功能是:
这是反转的整个函数:
不幸的是,在检查了输出数据之后,我的实现出现了错误的反转。
我对这一行的使用有疑问:
谁能一眼看出我使用dpotrf
anddpotri
函数(实际上是magma_dpotrf_gpu
and magma_dpotri_gpu
)的错误来自哪里?
编辑1:
根据 Damir Tenishev 的建议,我举了一个使用 LAPACKE 对矩阵求逆的函数示例:
如您所见,这是矩阵求逆的经典版本,它使用LAPACKE_dgetrf
和LAPACKE_dgetri
编辑2:版本MAGMA
是:
如您所见,我使用了magma_dgetrf_gpu
和magma_dgetri_gpu
函数。
现在,我想用LAPACKE
or MAGMA+LAPACK
、使用dpotrf
anddpotri
函数来做同样的事情。我记得我逆的矩阵是对称的。
编辑 3:我的尝试来自此文档链接
特别是,请参见magma dpotri - invert a positive definite matrix in double precision, CPU interface
第 325 页的第 4.4.21 节。
c - 为什么 QR 分解不能正常工作?(Lapacke,复杂案例)
我用拉帕克。我正在尝试在 C 中对复杂数据进行 QR 分解。为此,我编写了函数(基于 Haatschii 代码How to get the Q from the QR factorization output?):
值得注意的是,Alireza 的作者也遇到了函数znugqr的问题,但他切换到函数zunmqr似乎幸福来了(LAPACK QR 分解)。我相信我的问题也与LAPACKE_zungqr
矩阵 R 与其他方法相同,因此LAPACKE_zgeqrf
可以成功运行。
但是最后,用 Mathematica(QRDecomposition
函数)和 Python(numpy.linalg.qr
函数)比较相似的结果(QR 分解),我看到矩阵 Q 是不同的,而矩阵 R 是相同的。
输入矩阵,为简单起见 5×5:
输出 Q 矩阵(来自我的 C 代码):前 3 列:
最后两列:
输出 Q 矩阵(来自 Python 代码):
(这里我只列出这个矩阵的最后 2 列。前 3 列是相同的)。
我计算了这些矩阵中各列的最大和平均差异。结论是这样的:前三列在水平上10^-11
不同,后两列的差异分别是10^-3
, 10^-2
(肉眼可见的差异)。
随着矩阵大小的增加,观察到差异的增加,并且通常前 2-3 列很好地吻合。
也许有人可以帮助我?
multithreading - 对于带状矩阵,有没有比 LAPACKE_zgeev() 更快的替代方法?
我目前正在将 Matlab 脚本的时序与用 C 编写的脚本进行比较。其中一个主要部分是计算特征值和三对角矩阵的特征向量矩阵(稍后我将使用 9 个对角矩阵)。目前,C 实现使用 LAPACKE_zgeev()。
当使用相同的三对角矩阵时,Matlab 的 eig() 在 1 个 openmp 线程(在 C 中)下比 LAPACKE_zgeev() 高出两倍,在使用 4 个线程(在这台机器上都可用)运行时比 LAPACKE_zgeev() 高出 10%。
LAPACKE_zgeev() 有更快的替代方法吗?最好是通过带状矩阵使用较少内存的一种。