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

📄 syfd.h

📁 完全使用C++写的高效线性代数运算库!还提供了矩阵类。
💻 H
字号:
//      LAPACK++ (V. 1.1)//      (C) 1992-1996 All Rights Reserved.#ifndef _LA_SYMM_FACT_DOUBLE_H_#define _LA_SYMM_FACT_DOUBLE_H_#include "lafnames.h"#include LA_VECTOR_INT_H#include LA_SYMM_MAT_DOUBLE_H#include "lapack.h"class LaSymmFactDouble{    LaSymmMatDouble             S_;    LaVectorLongInt             pivot_;    int                      info_;    char                     uplo_;    int                     size_;    int                     gdim_;public:    // constructor    inline LaSymmFactDouble();    inline LaSymmFactDouble(int,int);    inline LaSymmFactDouble(const LaSymmFactDouble &);    inline ~LaSymmFactDouble();    // extraction functions for components    inline LaSymmMatDouble& S() { return S_; }    inline LaVectorLongInt& pivot() { return pivot_; }    inline int info() { return info_; }    inline char uplo(){ return uplo_; }    inline int size() { return size_; }    inline int gdim() { return gdim_; }    // operators    inline LaSymmFactDouble ref(LaSymmFactDouble &);    inline LaSymmFactDouble ref(LaSymmMatDouble &);    inline LaSymmFactDouble& copy(const LaSymmFactDouble &);    inline LaSymmFactDouble& copy(const LaSymmMatDouble &);};    // constructor/destructor functionsinline LaSymmFactDouble::LaSymmFactDouble():S_(),pivot_(),info_(0),uplo_('L'){}inline LaSymmFactDouble::LaSymmFactDouble(int n, int m):S_(n,m),pivot_(n*m),                    info_(0),uplo_('L'){}inline LaSymmFactDouble::LaSymmFactDouble(const LaSymmFactDouble &F){    S_.copy(F.S_);    pivot_.copy(F.pivot_);    info_ = F.info_;    uplo_ = F.uplo_;    size_ = F.size_;    gdim_ = F.gdim_;}inline LaSymmFactDouble::~LaSymmFactDouble(){}    // operatorsinline LaSymmFactDouble LaSymmFactDouble::ref(LaSymmFactDouble& F){    S_.ref(F.S_);    pivot_.ref(F.pivot_);    info_ = F.info_;    uplo_ = F.uplo_;    size_ = F.size_;    gdim_ = F.gdim_;        return *this;}inline LaSymmFactDouble& LaSymmFactDouble::copy(const LaSymmFactDouble& F){    S_.copy(F.S_);    pivot_.copy(F.pivot_);    info_ = F.info_;    uplo_ = F.uplo_;    size_ = F.size_;    gdim_ = F.gdim_;        return *this;}inline LaSymmFactDouble LaSymmFactDouble::ref(LaSymmMatDouble &G){    S_.ref(G);    info_ = 0;    uplo_ = 'L';    size_ = G.size(0);    gdim_ = G.gdim(0);    return *this;}inline LaSymmFactDouble& LaSymmFactDouble::copy(const LaSymmMatDouble &G){    S_.copy(G);    info_ = 0;    uplo_ = 'L';    size_ = G.size(0);    gdim_ = G.gdim(0);    return *this;}#if 0inline void LaSymmMatFactorize(LaSymmMatDouble &A, LaSymmFactDouble &AF){    char UPLO = 'L';    integer N = A.size(0), LDA = A.gdim(0), info = 0;//    integer M = DSYTRF;//    integer NB = F77NAME(get_nb)(&N,&M);    integer LWORK = N*NB;    double *WORK = new double[LWORK];    LaVectorLongInt piv(N);    AF.pivot().copy(piv); // make copies of A and pivot information    AF.copy(A);    F77NAME(dsytrf)(&UPLO, &N, &(AF.S()(0,0)), &LDA, &(AF.pivot()(0)), WORK,                    &LWORK, &info);    delete [] WORK;}#endifinline void LaLinearSolve(LaSymmFactDouble &AF, LaGenMatDouble &X,                           LaGenMatDouble &B){    char uplo = 'L';    integer N = AF.size(), nrhs = X.size(1), lda = AF.gdim(),            ldb = B.size(0), info = 0;    X.inject(B);    F77NAME(dsytrs)(&uplo, &N, &nrhs, &(AF.S()(0,0)), &lda,            &(AF.pivot()(0)), &X(0,0), &ldb, &info);}#endif // _LA_SYMM_FACT_DOUBLE_H_

⌨️ 快捷键说明

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