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

📄 syfd.h

📁 LAPACK++ (Linear Algebra PACKage in C++) is a software library for numerical linear algebra that sol
💻 H
字号:
//      LAPACK++ (V. 1.1)//      (C) 1992-1996 All Rights Reserved.#ifndef _LA_SYMM_FACT_DOUBLE_H_#define _LA_SYMM_FACT_DOUBLE_H_/** @file    Deprecated. Class for the LU factorization of a matrix. Note: This    class is probably broken by design, because the matrices L and U    do not exist separately in the internal lapack but they are part    of the modified input matrix A.    Do not use this unless you are really sure you understand what    this class does.*/#include "lafnames.h"#include LA_VECTOR_INT_H#include LA_SYMM_MAT_DOUBLE_H#include "lapack.h"/** Class for the LU factorization of a matrix. Note: This class is    probably broken by design, because the matrices L and U do not    exist separately in the internal lapack but they are part of the    modified input matrix A.     Do not use this unless you are really sure you understand what    this class does. */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 + -