bfd.h
来自「完全使用C++写的高效线性代数运算库!还提供了矩阵类。」· C头文件 代码 · 共 164 行
H
164 行
// LAPACK++ (V. 1.1)// (C) 1992-1996 All Rights Reserved.#ifndef _LA_BAND_FACT_DOUBLE_H#define _LA_BAND_FACT_DOUBLE_H#include "lafnames.h"#include LA_VECTOR_LONG_INT_H#include LA_BAND_MAT_DOUBLE_H#include "lapack.h"class LaBandFactDouble{ LaBandMatDouble B_; LaVectorLongInt pivot_; int info_;public: // constructor inline LaBandFactDouble(); inline LaBandFactDouble(int,int,int); inline LaBandFactDouble(LaBandMatDouble &); inline LaBandFactDouble(LaBandFactDouble &); inline ~LaBandFactDouble(); // extraction functions for components inline LaBandMatDouble& B(); inline LaVectorLongInt& pivot(); inline int& info(); // operators inline LaBandFactDouble& ref(LaBandFactDouble &); inline LaBandFactDouble& ref(LaBandMatDouble &);}; // constructor/destructor functionsinline LaBandFactDouble::LaBandFactDouble():B_(),pivot_(){#ifdef BandFactDouble_DEBUG cout << " called LaBandFactDouble::LaBandFactDouble() " << endl; #endif info_ = 0;}inline LaBandFactDouble::LaBandFactDouble(int N, int kl, int ku) : B_(N,kl,ku),pivot_(kl+ku+1){#ifdef BandFactDouble_DEBUG cout << " called LaBandFactDouble::LaBandFactDouble(int,int,int) " << endl; #endif info_ = 0;}inline LaBandFactDouble::LaBandFactDouble(LaBandMatDouble &G):pivot_(){#ifdef BandFactDouble_DEBUG cout << " called LaBandFactDouble::LaBandFactDouble(LaBandMatDouble &)" <<endl; #endif B_.ref(G); info_ = 0;}inline LaBandFactDouble::LaBandFactDouble(LaBandFactDouble &F){#ifdef BandFactDouble_DEBUG cout << " called LaBandFactDouble::LaBandFactDouble(LaBandFactDouble &) " << endl; #endif B_.ref(F.B_); pivot_.ref(F.pivot_); info_ = F.info_;}inline LaBandFactDouble::~LaBandFactDouble(){} // member functionsinline LaBandMatDouble& LaBandFactDouble::B(){ return B_;}inline LaVectorLongInt& LaBandFactDouble::pivot(){ return pivot_;}inline int& LaBandFactDouble::info(){ return info_;} // operatorsinline LaBandFactDouble& LaBandFactDouble::ref(LaBandFactDouble& F){ B_.ref(F.B_); pivot_.ref(F.pivot_); info_ = F.info_; return *this;}inline LaBandFactDouble& LaBandFactDouble::ref(LaBandMatDouble& F){ B_.ref(F); return *this;}inline void LaBandMatFactorize(LaBandMatDouble &A, LaBandFactDouble &AF){ integer n = A.size(1), m = n, LDA = A.gdim(0); integer KL = A.subdiags(), KU = A.superdiags(), info=0; F77NAME(dgbtrf)(&m, &n, &KL, &KU, &A(0,0), &LDA, &(AF.pivot()(0)), &info);}inline void LaLinearSolve(LaBandFactDouble &AF, LaGenMatDouble &X, LaGenMatDouble &B){ char trans = 'N'; integer n = AF.B().size(1), lda = AF.B().gdim(0), nrhs = X.size(1), ldb = B.size(0), kl = AF.B().subdiags(), ku = AF.B().superdiags(), info=0; X.inject(B); F77NAME(dgbtrs)( &trans, &n, &kl, &ku, &nrhs, &(AF.B()(-kl,0)), &lda, &(AF.pivot()(0)), &X(0,0), &ldb, &info);}#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?