⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 blas3++.cc

📁 完全使用C++写的高效线性代数运算库!还提供了矩阵类。
💻 CC
字号:
#include "lafnames.h"#include LA_VECTOR_DOUBLE_H#include LA_SYMM_MAT_DOUBLE_H#include LA_UNIT_UPPER_TRIANG_MAT_DOUBLE_H#include LA_UPPER_TRIANG_MAT_DOUBLE_H#include LA_UNIT_LOWER_TRIANG_MAT_DOUBLE_H#include LA_LOWER_TRIANG_MAT_DOUBLE_H#include LA_SPD_MAT_DOUBLE_H#include LA_SYMM_BAND_MAT_DOUBLE_H#include LA_TRIDIAG_MAT_DOUBLE_H#include "blas3++.h"void Blas_Mat_Mat_Mult(const LaGenMatDouble &A,             const LaGenMatDouble &B, LaGenMatDouble &C,             double alpha , double beta ){        char t = 'N';        integer m = A.size(0), k = A.size(1), n = B.size(1);        integer lda = A.gdim(0), ldb = B.gdim(0), ldc = C.gdim(0);  F77NAME(dgemm)(&t, &t, &m, &n, &k, &alpha, &A(0,0), &lda, &B(0,0),                 &ldb, &beta, &C(0,0), &ldc);    }void Blas_Mat_Trans_Mat_Mult(const LaGenMatDouble &A,             const LaGenMatDouble &B, LaGenMatDouble &C,             double alpha, double beta ){        char nt = 'N';        char t = 'T';        integer m = A.size(0), k = A.size(1), n = B.size(1);        integer lda = A.gdim(0), ldb = B.gdim(0), ldc = C.gdim(0);  F77NAME(dgemm)(&t, &nt, &m, &n, &k, &alpha, &A(0,0), &lda, &B(0,0),                 &ldb, &beta, &C(0,0), &ldc);    }void Blas_Mat_Mat_Trans_Mult(const LaGenMatDouble &A,             const LaGenMatDouble &B, LaGenMatDouble &C,             double alpha,  double beta ){        char nt = 'N';        char t = 'T';        integer m = A.size(0), k = A.size(1), n = B.size(1);        integer lda = A.gdim(0), ldb = B.gdim(0), ldc = C.gdim(0);  F77NAME(dgemm)(&nt, &t, &m, &n, &k, &alpha, &A(0,0), &lda, &B(0,0),                 &ldb, &beta, &C(0,0), &ldc);    }#ifdef _LA_UNIT_LOWER_TRIANG_MAT_DOUBLE_H_void Blas_Mat_Mat_Solve(LaUnitLowerTriangMatDouble &A,             LaGenMatDouble &B, double alpha){        char side = 'L', uplo = 'L', transa = 'N', diag = 'U';        integer m = B.size(0), n = B.size(1),                 lda = A.gdim(0), ldb = B.gdim(0);  F77NAME(dtrsm)(&side, &uplo, &transa, &diag, &m, &n, &alpha,                 &A(0,0), &lda, &B(0,0), &ldb);}#endif#ifdef _LA_UNIT_UPPER_TRIANG_MAT_DOUBLE_H_void Blas_Mat_Mat_Mult(LaUnitUpperTriangMatDouble &A,            LaGenMatDouble &B, double alpha ){        char side = 'L', uplo = 'U', transa = 'N', diag = 'U';        integer m = B.size(0), n = B.size(1),                lda = A.gdim(0), ldb = B.gdim(0);  F77NAME(dtrmm)(&side, &uplo, &transa, &diag, &m, &n, &alpha,                &A(0,0), &lda, &B(0,0), &ldb);}void Blas_Mat_Mat_Solve(LaUnitUpperTriangMatDouble &A,             LaGenMatDouble &B, double alpha ){        char side = 'L', uplo = 'U', transa = 'N', diag = 'U';        integer m = B.size(0), n = B.size(1),                 lda = A.gdim(0), ldb = B.gdim(0);  F77NAME(dtrsm)(&side, &uplo, &transa, &diag, &m, &n, &alpha,                 &A(0,0), &lda, &B(0,0), &ldb);}#endif#ifdef _LA_LOWER_TRIANG_MAT_DOUBLE_H_void Blas_Mat_Mat_Mult(LaLowerTriangMatDouble &A,            LaGenMatDouble &B, double alpha ){        char side = 'L', uplo = 'L', transa = 'N', diag = 'N';        integer m = B.size(0), n = B.size(1),                lda = A.gdim(0), ldb = B.gdim(0);  F77NAME(dtrmm)(&side, &uplo, &transa, &diag, &m, &n, &alpha,                &A(0,0), &lda, &B(0,0), &ldb);}void Blas_Mat_Mat_Solve(LaLowerTriangMatDouble &A,             LaGenMatDouble &B, double alpha ){        char side = 'L', uplo = 'L', transa = 'N', diag = 'N';        integer m = B.size(0), n = B.size(1),                 lda = A.gdim(0), ldb = B.gdim(0);  F77NAME(dtrsm)(&side, &uplo, &transa, &diag, &m, &n, &alpha,                 &A(0,0), &lda, &B(0,0), &ldb);}#endif#ifdef _LA_UPPER_TRIANG_MAT_DOUBLE_H_void Blas_Mat_Mat_Mult(LaUpperTriangMatDouble &A,            LaGenMatDouble &B, double alpha ){        char side = 'L', uplo = 'U', transa = 'N', diag = 'N';        integer m = B.size(0), n = B.size(1),                lda = A.gdim(0), ldb = B.gdim(0);  F77NAME(dtrmm)(&side, &uplo, &transa, &diag, &m, &n, &alpha,                &A(0,0), &lda, &B(0,0), &ldb);}void Blas_Mat_Mat_Solve(LaUpperTriangMatDouble &A,             LaGenMatDouble &B, double alpha ){        char side = 'L', uplo = 'U', transa = 'N', diag = 'N';        integer m = B.size(0), n = B.size(1),                 lda = A.gdim(0), ldb = B.gdim(0);  F77NAME(dtrsm)(&side, &uplo, &transa, &diag, &m, &n, &alpha,                 &A(0,0), &lda, &B(0,0), &ldb);}#endif#ifdef _LA_UNIT_LOWER_TRIANG_MAT_DOUBLE_H_void Blas_Mat_Trans_Mat_Solve(LaUnitLowerTriangMatDouble &A,            LaGenMatDouble &B, double alpha ){        char side = 'L', uplo = 'L', transa = 'T', diag = 'U';        integer m = B.size(0), n = B.size(1),                lda = A.gdim(0), ldb = B.gdim(0);  F77NAME(dtrsm)(&side, &uplo, &transa, &diag, &m, &n, &alpha,                &A(0,0), &lda, &B(0,0), &ldb);}#endif#ifdef _LA_UNIT_UPPER_TRIANG_MAT_DOUBLE_H_void Blas_Mat_Trans_Mat_Solve(LaUnitUpperTriangMatDouble &A,            LaGenMatDouble &B, double alpha ){        char side = 'L', uplo = 'U', transa = 'T', diag = 'U';        integer m = B.size(0), n = B.size(1),                lda = A.gdim(0), ldb = B.gdim(0);  F77NAME(dtrsm)(&side, &uplo, &transa, &diag, &m, &n, &alpha,                &A(0,0), &lda, &B(0,0), &ldb);}#endif#ifdef LA_LOWER_TRIANG_MAT_DOUBLE_Hvoid Blas_Mat_Mat_Mult(LaUnitLowerTriangMatDouble &A,            LaGenMatDouble &B, double alpha ){        char side = 'L', uplo = 'L', transa = 'N', diag = 'U';        integer m = B.size(0), n = B.size(1),                lda = A.gdim(0), ldb = B.gdim(0);  F77NAME(dtrmm)(&side, &uplo, &transa, &diag, &m, &n, &alpha,                &A(0,0), &lda, &B(0,0), &ldb);}void Blas_Mat_Trans_Mat_Solve(LaLowerTriangMatDouble &A,            LaGenMatDouble &B, double alpha ){        char side = 'L', uplo = 'L', transa = 'T', diag = 'N';        integer m = B.size(0), n = B.size(1),                lda = A.gdim(0), ldb = B.gdim(0);  F77NAME(dtrsm)(&side, &uplo, &transa, &diag, &m, &n, &alpha,                &A(0,0), &lda, &B(0,0), &ldb);}#endif#ifdef _LA_UPPER_TRIANG_MAT_DOUBLE_H void Blas_Mat_Trans_Mat_Solve(LaUpperTriangMatDouble &A,            LaGenMatDouble &B, double alpha ){        char side = 'L', uplo = 'U', transa = 'T', diag = 'N';        integer m = B.size(0), n = B.size(1),                lda = A.gdim(0), ldb = B.gdim(0);  F77NAME(dtrsm)(&side, &uplo, &transa, &diag, &m, &n, &alpha,                &A(0,0), &lda, &B(0,0), &ldb);}#endif#ifdef _LA_SYMM_MAT_DOUBLE_H_void Blas_Mat_Mat_Mult(LaSymmMatDouble &A, LaGenMatDouble &B,             LaGenMatDouble &C, double alpha , double beta ){        char side = 'L', uplo = 'L';        integer m = C.size(0), n = C.size(1), lda = A.gdim(0),                 ldb = B.gdim(0), ldc = C.gdim(0);  F77NAME(dsymm)(&side, &uplo, &m, &n, &alpha, &A(0,0), &lda,                 &B(0,0), &ldb, &beta, &C(0,0), &ldc);}void Blas_R1_Update(LaSymmMatDouble &C, LaGenMatDouble &A,            double alpha , double beta ){        char uplo = 'L', transa = 'N';        integer n = C.size(0), k = A.size(1),                 lda = A.gdim(0), ldc = C.gdim(0);  F77NAME(dsyrk)(&uplo, &transa, &n, &k, &alpha, &A(0,0), &lda,                 &beta, &C(0,0), &ldc);}void Blas_R2_Update(LaSymmMatDouble &C, LaGenMatDouble &A,            LaGenMatDouble &B, double alpha , double beta ){        char uplo = 'L', transa = 'N';        integer n = C.size(0), k = A.size(1), lda = A.gdim(0),                 ldb = B.gdim(0), ldc = C.gdim(0);  F77NAME(dsyr2k)(&uplo, &transa, &n, &k, &alpha, &A(0,0), &lda,                 &B(0,0), &ldb, &beta, &C(0,0), &ldc);}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -