Macaulay2 Engine
Loading...
Searching...
No Matches

◆ SVD() [4/4]

bool EigenM2::SVD ( const LMatrixRRR * A,
LMatrixRRR * Sigma,
LMatrixRRR * U,
LMatrixRRR * VT )

Definition at line 349 of file eigen.cpp.

354{
355 auto old_prec = Real::get_default_prec();
356 Real::set_default_prec(A->ring().get_precision());
357
358 MatrixXmpRRR AXmp(A->numRows(), A->numColumns());
359
360 fill_to_MatrixXmp(*A, AXmp);
361
362 Eigen::JacobiSVD<MatrixXmpRRR> svd(AXmp, Eigen::ComputeThinU | Eigen::ComputeThinV);
363
364 auto& eigenU = svd.matrixU();
365 auto& eigenVT = svd.matrixV().adjoint();
366 auto& eigenSigma = svd.singularValues();
367
368 fill_from_MatrixXmp(eigenU, *U);
369 fill_from_MatrixXmp(eigenVT, *VT);
370 fill_from_MatrixXmp(eigenSigma, *Sigma);
371
372 Real::set_default_prec(old_prec);
373 return true;
374}
size_t numRows() const
Definition dmat.hpp:144
const ACoeffRing & ring() const
Definition dmat.hpp:143
size_t numColumns() const
Definition dmat.hpp:145
unsigned long get_precision() const
Definition aring-RRR.hpp:82
Eigen::Matrix< Real, Eigen::Dynamic, Eigen::Dynamic > MatrixXmpRRR
Definition eigen.cpp:25
void fill_to_MatrixXmp(const LMatrixRRR &orig, MatrixXmpRRR &result)
Definition eigen.cpp:313
void fill_from_MatrixXmp(const MatrixXmpRRR &orig, LMatrixRRR &result)
Definition eigen.cpp:327

References fill_from_MatrixXmp(), fill_to_MatrixXmp(), M2::ARingRRR::get_precision(), DMat< ACoeffRing >::numColumns(), DMat< ACoeffRing >::numRows(), and DMat< ACoeffRing >::ring().

Referenced by MatrixOps::SVD(), MatrixOps::SVD(), MatrixOps::SVD(), and MatrixOps::SVD().