本文整理汇总了C++中DMat::set_factmode方法的典型用法代码示例。如果您正苦于以下问题:C++ DMat::set_factmode方法的具体用法?C++ DMat::set_factmode怎么用?C++ DMat::set_factmode使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DMat
的用法示例。
在下文中一共展示了DMat::set_factmode方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: qr
//---------------------------------------------------------
DMat& qr(DMat& A, bool in_place)
//---------------------------------------------------------
{
// Form orthogonal QR factorization of A(m,n).
// The result Q is represented as a product of
// min(m, n) elementary reflectors.
int M=A.num_rows(), N=A.num_cols(), LDA=A.num_rows();
int min_mn = A.min_mn(), info=0; DVec tau(min_mn);
if (in_place)
{
// factorize arg
GEQRF(M, N, A.data(), LDA, tau.data(), info);
if (info) { umERROR("qr(A)", "dgeqrf reports: info = %d", info); }
//A.set_qrtau(tau); // H(i) = I - tau * v * v'
A.set_factmode(FACT_QR); // indicate factored state
return A;
}
else
{
// factorize copy of arg
DMat* tmp = new DMat(A, OBJ_temp, "qr(A)");
GEQRF (M, N, tmp->data(), LDA, tau.data(), info);
if (info) { umERROR("qr(A)", "dgeqrf reports: info = %d", info); }
//tmp->set_qrtau(tau); // H(i) = I - tau * v * v'
tmp->set_factmode(FACT_QR); // indicate factored state
return (*tmp);
}
}
示例2: lu
//---------------------------------------------------------
DMat& lu(DMat& A, bool in_place)
//---------------------------------------------------------
{
// Given square matrix A, return its lu-factorization
// for use later in solving (multiple) linear systems.
if (!A.is_square()) { umERROR("lu(A)", "matrix is not square."); }
int rows=A.num_rows(); int N=rows, LDA=rows, info=0;
int* ipiv = umIVector(rows);
if (in_place)
{
// factorize arg
GETRF(N, N, A.data(), LDA, ipiv, info);
if (info) { umERROR("lu(A)", "dgetrf reports: info = %d", info); }
A.set_pivots(ipiv); // store pivots
A.set_factmode(FACT_LUP); // indicate factored state
return A;
}
else
{
// factorize copy of arg
DMat* tmp = new DMat(A, OBJ_temp, "lu(A)");
GETRF(N, N, tmp->data(), LDA, ipiv, info);
if (info) { umERROR("lu(A)", "dgetrf reports: info = %d", info); }
tmp->set_pivots(ipiv); // store pivots
tmp->set_factmode(FACT_LUP); // indicate factored state
return (*tmp);
}
}
示例3: chol
//---------------------------------------------------------
DMat& chol(DMat& A, bool in_place)
//---------------------------------------------------------
{
// Given symmetric positive-definite matrix A,
// return its Cholesky-factorization for use
// later in solving (multiple) linear systems.
int M=A.num_rows(), LDA=A.num_rows(), info=0;
char uplo = 'U';
if (in_place)
{
// factorize arg
POTRF (uplo, M, A.data(), LDA, info);
if (info) { umERROR("chol(A)", "dpotrf reports: info = %d", info); }
A.zero_below_diag();
A.set_factmode(FACT_CHOL); // indicate factored state
return A;
}
else
{
// factorize copy of arg
DMat* tmp = new DMat(A, OBJ_temp, "chol(A)");
POTRF (uplo, M, tmp->data(), LDA, info);
if (info) { umERROR("chol(A)", "dpotrf reports: info = %d", info); }
tmp->zero_below_diag();
tmp->set_factmode(FACT_CHOL); // indicate factored state
#if (0)
// compare with Matlab
tmp->print(g_MSGFile, "chol", "lf", 4, 8);
#endif
return (*tmp);
}
}
示例4: DMat
//---------------------------------------------------------
DMat& NDG2D::CurvedDGJump2D
(
const DMat& gU, // [in]
const IVec& gmapD, // [in]
const DVec& bcU // [in]
)
//---------------------------------------------------------
{
// function [jumpU] = CurvedDGJump2D(gU, gmapD, bcU)
// purpose: compute discontinuous Galerkin jump applied
// to a field given at cubature and Gauss nodes
DMat mmCHOL; DVec gUM,gUP,fx;
DMat *tmp = new DMat("jumpU", OBJ_temp);
DMat &jumpU(*tmp);
// shorthand references
Cub2D& cub = this->m_cub; Gauss2D& gauss = this->m_gauss;
// surface traces at Gauss nodes
gUM = gU(gauss.mapM);
gUP = gU(gauss.mapP);
if (gmapD.size()>0) { gUP(gmapD) = bcU(gmapD); }
// compute jump term and lift to triangle interiors
fx = gUM - gUP;
jumpU = -gauss.interpT*(gauss.W.dm(fx));
// multiply straight sided triangles by inverse mass matrix
jumpU(All,straight) = VVT * dd(jumpU(All,straight), J(All,straight));
// multiply by custom inverse mass matrix for each curvilinear triangle
int Ncurved = curved.size(), k=0;
for (int m=1; m<=Ncurved; ++m) {
k = curved(m);
mmCHOL.borrow(Np,Np, cub.mmCHOL.pCol(k));
mmCHOL.set_factmode(FACT_CHOL); // indicate factored state
jumpU(All,k) = chol_solve(mmCHOL, jumpU(All,k));
}
// these parameters may be OBJ_temp (allocated on the fly)
if (OBJ_temp == gU.get_mode()) { delete (&gU); }
if (OBJ_temp == bcU.get_mode()) { delete (&bcU); }
return jumpU;
}