检查是否计算了特征分解

发布于 2025-02-11 06:36:34 字数 963 浏览 0 评论 0原文

我如何检查Compute以前是否已在eigen :: solver上运行?在 eigen/src/eigenvalues/eigensolver.h 中,有一个受保护的成员变量m_isinitialized ,但我看不到它。

下面的代码显示了如何创建矩阵并计算其上的特征分解的示例。就我而言,我有一个指向eigen :: solver的参考/指针,因此我不知道它是否已被计算出来。

#include <Eigen/Eigenvalues> 
...
Eigen::Matrix<double, 3, 3> matrix;
matrix << 1,2,3,
          1,2,3,
          1,2,3;

Eigen::Solver<double, 3, 3> eigen_decomp;

// This next line is the compute I'm referring to
eigen_decomp.compute(matrix, /* computeEigenvectors = */ true);
std::cout << eigen_decomp.eigenValues() << "\n";

How can I check to see if compute has previously been run on an Eigen::Solver? There is a protected member variable m_isInitialized in Eigen/src/EigenValues/EigenSolver.h but I don't see a getter for it.

The code below shows an example of how you would create a matrix and compute the eigen decomposition on it. In my case, I have a reference/pointer to an Eigen::Solver so I don't know if it's been previously computed or not.

#include <Eigen/Eigenvalues> 
...
Eigen::Matrix<double, 3, 3> matrix;
matrix << 1,2,3,
          1,2,3,
          1,2,3;

Eigen::Solver<double, 3, 3> eigen_decomp;

// This next line is the compute I'm referring to
eigen_decomp.compute(matrix, /* computeEigenvectors = */ true);
std::cout << eigen_decomp.eigenValues() << "\n";

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

下雨或天晴 2025-02-18 06:36:34

只是为了完整性,假设您不想等待特征的功能请求,则最简单的Wokaround是std ::可选

std::optional<Eigen::Solver<double, 3, 3>> eigen_decomp;
if(! eigen_decomp)
    eigen_decom.emplace(matrix, /* computeEigenvectors = */ true);
std::cout << eigen_decomp->eigenValues() << "\n";

Just for completeness, assuming you don't want to wait for a feature request for Eigen, the easiest wokaround is std::optional

std::optional<Eigen::Solver<double, 3, 3>> eigen_decomp;
if(! eigen_decomp)
    eigen_decom.emplace(matrix, /* computeEigenvectors = */ true);
std::cout << eigen_decomp->eigenValues() << "\n";
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文