MPLAPACK 笔记

                     

贡献者: addis

  • 本文处于草稿阶段。
预备知识 Lapack 笔记

1. __float128

// 包含 mplapack_utils__Float128.h
#include <mplapack/mpblas__Float128.h>
// 包含 mplapack__config.h 和 quadmath.h
#include <mplapack/mplapack__Float128.h>

typedef int64_t mplapackint;
typedef mplapackint mplapacklogical;

// 普通矩阵相乘
// cblas (mkl)
void cblas_zgemm(const CBLAS_LAYOUT Layout,
    const CBLAS_TRANSPOSE transa, const CBLAS_TRANSPOSE transb,
    const MKL_INT m, const MKL_INT n, const MKL_INT k,
    const void *alpha, const void *a,
    const MKL_INT lda, const void *b,
    const MKL_INT ldb, const void *beta,
    void *c, const MKL_INT ldc);
// mplapack
// transa="N" 表示不转置, "T" 表示转置
// 注意 alpha, beta 不是 pointer
void Cgemm(const char *transa, const char *transb,
    mplapackint const m, mplapackint const n,
    mplapackint const k, complex<_Float128> const alpha,
    complex<_Float128> *a, mplapackint const lda,
    complex<_Float128> *b, mplapackint const ldb,
    complex<_Float128> const beta, complex<_Float128> *c,
    mplapackint const ldc);

// 带对角矩阵乘以矢量
void Cgbmv(const char *trans, mplapackint const m,
    mplapackint const n, mplapackint const kl,
    mplapackint const ku, complex<_Float128> const alpha,
    complex<_Float128> *a, mplapackint const lda,
    complex<_Float128> *x, mplapackint const incx,
    complex<_Float128> const beta, complex<_Float128> *y,
    mplapackint const incy);


// 从 LU 分解计算逆矩阵
// 所以 mplapack 中的参数和 LAPACKE 并不完全一致, 需要手动查看。
    // lapacke 的版本
lapack_int LAPACKE_zgetri
    (int matrix_layout , lapack_int n , lapack_complex_double *a,
    lapack_int lda , const lapack_int *ipiv);
    // mplapack 的版本
void Cgetri(mplapackint const n, complex<_Float128> *a,
    mplapackint const lda, mplapackint *ipiv,
    complex<_Float128> *work, mplapackint const lwork,
    mplapackint &info);

// 解带对角矩阵
    // lapacke 的版本
lapack_int LAPACKE_zgbsv(int matrix_layout, lapack_int n,
    lapack_int kl, lapack_int ku, lapack_int nrhs,
    lapack_complex_double *ab, lapack_int ldab, lapack_int *ipiv,
    lapack_complex_double *b, lapack_int ldb);
    // mplapack 的版本
void Cgbsv(mplapackint const n, mplapackint const kl,
    mplapackint const ku, mplapackint const nrhs,
    complex<_Float128> *ab, mplapackint const ldab,
    mplapackint *ipiv, complex<_Float128> *b,
    mplapackint const ldb, mplapackint &info);


致读者: 小时百科一直以来坚持所有内容免费,这导致我们处于严重的亏损状态。 长此以往很可能会最终导致我们不得不选择大量广告以及内容付费等。 因此,我们请求广大读者热心打赏 ,使网站得以健康发展。 如果看到这条信息的每位读者能慷慨打赏 10 元,我们一个星期内就能脱离亏损, 并保证在接下来的一整年里向所有读者继续免费提供优质内容。 但遗憾的是只有不到 1% 的读者愿意捐款, 他们的付出帮助了 99% 的读者免费获取知识, 我们在此表示感谢。

                     

友情链接: 超理论坛 | ©小时科技 保留一切权利