c++ - LAPACKE_zheevx() 收敛失败——如何在 C++ 中使用 2*DLAMCH ('S' 增加 ABSTOL?

标签 c++ lapack lapacke

这是一个关于在 C++ 中使用 LAPACKE_zheevx() 函数为特征值计算的收敛设置适当的公差(“abstol”)的问题。

当 LAPACKE_zheev() 在使用默认值“abstol”(即 abstol=-1)计算特征值/特征向量时无法收敛时,LAPACK 手册说要设置 abstol=2*DLAMCH('S')。但是,DLAMCH 是 Fortran 函数,我使用的 C++ 无法将其识别为有效的 C++ 函数。谁能帮我在使用 C++ 的 LAPACK 时(即使用 LAPACKE 时)如何正确设置“abstol=2*DLAMCH('S')”?

非常感谢!!

背景: LAPACKE 是 LAPACK(用于数值代数的 Fortran 库)的 C++ 接口(interface)。 LAPACKE_zheevx() 是 LAPACKE 的 C++ 接口(interface),用于 LAPACK 的 ZHEEVX() 函数。

关键词: LAPACK、LAPACKE、C++、ABSTOL、DLAMCH、收敛、特征值、特征向量

最佳答案

我对这些库一无所知,但谷歌搜索显示有一个对应的 LAPACKE_dlamch()功能:

double LAPACKE_dlamch(char cmach)

因此您应该能够将 LAPACKE_dlamch('S') 作为 LAPACKE_zheevx()abstol(第 12 个)参数传递:

lapack_int LAPACKE_zheevx (
    int matrix_layout,
    char jobz,
    char range,
    char uplo,
    lapack_int n,
    lapack_complex_double *a,
    lapack_int lda,
    double vl,
    double vu,
    lapack_int il,
    lapack_int iu,
    double abstol,
//  ^^^^^^^^^^^^^
    lapack_int *m,
    double *w,
    lapack_complex_double *z,
    lapack_int ldz,
    lapack_int *ifail
)

关于c++ - LAPACKE_zheevx() 收敛失败——如何在 C++ 中使用 2*DLAMCH ('S' 增加 ABSTOL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39004426/

相关文章:

openmp - 使用 OpenMP 拆分 LAPACK 调用

c - Lapacke in C : using dsymm, 链接器错误

c++ - FindBLAS 和 FindLAPACK 在 CMake 中的使用

c++ - 创建响应式 Windows winapi c++

c++ - 在 NAT 后面实现 restful webservice

linux - 将来自英特尔 MKL 的 LAPACK 与 gfortran 链接起来

lapack - 使用 Eigen 的 BLAS 和 LAPACK

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

c++ - 连续 WASAPI 环形缓冲区采样

c# - 从 C# 运行 C++ Qt 应用程序