12 #include <Eigen/Dense>
13 #include <Eigen/Sparse>
16 #include "helperFunctions.hpp"
17 #include "HODLR_Tree.hpp"
19 #include "matrixIO.hpp"
22 double fullPivACA_LowRankApprox(
const T & matrixData,Eigen::MatrixXd & W,Eigen::MatrixXd & V,
const int min_i,
const int min_j,
const int numRows,
const int numCols,
const double tolerance,
int & calculatedRank,
const int minRank = -1,
const int minPivot = 0);
25 double partialPivACA_LowRankApprox(
const T & matrixData,Eigen::MatrixXd & W,Eigen::MatrixXd & V,
const int min_i,
const int min_j,
const int numRows,
const int numCols,
const double tolerance,
int & calculatedRank,
const int minRank = -1,
const int maxRank = -1,
const int minPivot = 0);
27 void PS_LowRankApprox(
const Eigen::MatrixXd & matrixData,Eigen::MatrixXd & W, Eigen::MatrixXd & V,
const int min_i,
const int min_j,
const int numRows,
const int numCols,
const double tolerance,
int & calculatedRank,
const std::string pointChoosingMethod =
"Chebyshev",
const int minRank = -1);
29 void PS_LowRankApprox_Sp(
const Eigen::SparseMatrix<double> & matrixData_Sp,Eigen::MatrixXd & W, Eigen::MatrixXd & V,
const int min_i,
const int min_j,
const int numRows,
const int numCols,
const double tolerance,
int &calculatedRank);
32 void SVD_LowRankApprox(
const T & matrixData,Eigen::MatrixXd & W, Eigen::MatrixXd & V, Eigen::MatrixXd & K,
const int min_i,
const int min_j,
const int numRows,
const int numCols,
const double tolerance,
int & calculatedRank,
const int minRank = -1);
34 int SVD_LowRankApprox(
const Eigen::MatrixXd & matrixData,
const double accuracy, Eigen::MatrixXd* Wptr = NULL, Eigen::MatrixXd* Vptr = NULL, Eigen::MatrixXd* Kptr = NULL,
int minRank = -1);
37 void PS_Boundary_LowRankApprox(
const T & matrixData,
const Eigen::SparseMatrix<double> graphData,Eigen::MatrixXd & W, Eigen::MatrixXd & V,
const int min_i,
const int min_j,
const int numRows,
const int numCols,
const double tolerance,
int & calculatedRank,
const int maxDepth = 2,
const std::string savePath =
"none");
40 void extractRowsCols(
const T & matrixData,
int min_i,
int min_j,
int numRows,
int numCols,Eigen::MatrixXd & W,Eigen::MatrixXd & V,
const std::vector<int> & rowIndex,
const std::vector<int> & colIndex,
const double tolerance,
int & calculatedRank,
const std::string mode =
"fullPivLU");
42 int getBoundaryRowColIdx(
const Eigen::SparseMatrix<double> & graphData,
const int min_i,
const int min_j,
const int numRows,
const int numCols,
const int depth,std::vector<int> & rowIdx,std::vector<int> & colIdx);
44 int add_LR(Eigen::MatrixXd & result_U,Eigen::MatrixXd & result_V,
const Eigen::MatrixXd & U1,
const Eigen::MatrixXd & V1,
const Eigen::MatrixXd & U2,
const Eigen::MatrixXd & V2,
double tol,std::string mode);
46 int PS_PseudoInverse(Eigen::MatrixXd & colMatrix,Eigen::MatrixXd & rowMatrix, Eigen::MatrixXd & U, Eigen::MatrixXd & V,std::vector<int> rowIdxVec,
const double tol,
const std::string mode);