PolyDiM
C++ library for POLYtopal DIscretization Methods
Loading...
Searching...
No Matches
LAPACK_utilities.hpp
Go to the documentation of this file.
1// _LICENSE_HEADER_
2//
3// Copyright (C) 2019 - 2025.
4// Terms register on the GPL-3.0 license.
5//
6// This file can be redistributed and/or modified under the license terms.
7//
8// See top level LICENSE file for more details.
9//
10// This file can be used citing references in CITATION.cff file.
11
12#ifndef LAPACK_UTILITIES_HPP
13#define LAPACK_UTILITIES_HPP
14
15#include "Eigen/Eigen"
16
17namespace LAPACK_utilities
18{
20{
21 Eigen::MatrixXd Q;
22 Eigen::MatrixXd R;
23 Eigen::MatrixXd P;
24 unsigned int Space_Dimension;
25};
26
28void svd(Eigen::MatrixXd A, Eigen::MatrixXd &U, Eigen::MatrixXd &V, Eigen::VectorXd &S);
29
31void svd(Eigen::MatrixXd A, Eigen::MatrixXd &V, Eigen::VectorXd &S);
32
34Eigen::VectorXd svd(Eigen::MatrixXd A);
35
38inline double cond(const Eigen::VectorXd &s)
39{
40 return s[0] / s[s.size() - 1];
41}
42
44unsigned int rank(const Eigen::VectorXd &s, const double &tolerance = std::numeric_limits<double>::epsilon());
45
47void MGS(const Eigen::MatrixXd &X, Eigen::MatrixXd &Q, Eigen::MatrixXd &R);
48
50QR_Factorization MGS(const Eigen::MatrixXd &X, const double &tolerance = std::numeric_limits<double>::epsilon());
51
53QR_Factorization QR(const Eigen::MatrixXd &X, const double &tolerance = std::numeric_limits<double>::epsilon());
54
56QR_Factorization QRP(const Eigen::MatrixXd &X, const double &tolerance = std::numeric_limits<double>::epsilon());
57
59Eigen::MatrixXd triu(const Eigen::MatrixXd &X, const unsigned int &i);
60
62void eig(const Eigen::MatrixXd A, Eigen::VectorXd &D, Eigen::MatrixXd &R);
63
65void inverseTri(const Eigen::MatrixXd A, Eigen::MatrixXd &InvA, const char &UPLO, const char &DIAG);
66
67double rcondest(const Eigen::SparseMatrix<double> &sparseA);
68} // namespace LAPACK_utilities
69
70#endif // LAPACK_UTILITIES_HPP
Definition LAPACK_utilities.cpp:90
unsigned int rank(const Eigen::VectorXd &s, const double &tolerance)
Definition LAPACK_utilities.cpp:477
void inverseTri(const Eigen::MatrixXd A, Eigen::MatrixXd &InvA, const char &UPLO, const char &DIAG)
Compute inverse of triangular matrix.
Definition LAPACK_utilities.cpp:198
void eig(const Eigen::MatrixXd A, Eigen::VectorXd &D, Eigen::MatrixXd &R)
Compute eigenvalues and eigenvectors of A = R * D * R'.
Definition LAPACK_utilities.cpp:215
double cond(const Eigen::VectorXd &s)
Compute condition number in norm 2 given singular values.
Definition LAPACK_utilities.hpp:38
void MGS(const Eigen::MatrixXd &X, Eigen::MatrixXd &Q, Eigen::MatrixXd &R)
Compute the modified Gram-Schmidt factorization of matrix X.
Definition LAPACK_utilities.cpp:92
double rcondest(const Eigen::SparseMatrix< double > &sparseA)
Definition LAPACK_utilities.cpp:117
Eigen::MatrixXd triu(const Eigen::MatrixXd &X, const unsigned int &i)
Extract upper triangular part of matrix X.
Definition LAPACK_utilities.cpp:149
void svd(Eigen::MatrixXd A, Eigen::MatrixXd &V, Eigen::VectorXd &S)
Given A = U * S * V' returns only S and V'.
Definition LAPACK_utilities.cpp:166
QR_Factorization QR(const Eigen::MatrixXd &X, const double &tolerance)
Compute the QR matrix based on Householder reflectors.
Definition LAPACK_utilities.cpp:346
QR_Factorization QRP(const Eigen::MatrixXd &X, const double &tolerance)
Compute the QR with pivoting matrix based on Householder reflectors.
Definition LAPACK_utilities.cpp:405
Definition LAPACK_utilities.hpp:20
Eigen::MatrixXd P
Definition LAPACK_utilities.hpp:23
Eigen::MatrixXd R
Definition LAPACK_utilities.hpp:22
Eigen::MatrixXd Q
Definition LAPACK_utilities.hpp:21
unsigned int Space_Dimension
Definition LAPACK_utilities.hpp:24