python - 使用 Eigen 库在 C++ 中计算多项式的根

标签 python c++ matlab numpy eigen

如何使用 Eigen 库在 C++ 中获取带系数的多项式的根?

在 Python 中:

>>> import numpy as np
>>> coeff = [0.708563939215852, -0.3111717537041549, -0.2151830138973625]
>>> np.roots(coeff)
array([ 0.81279407, -0.37363574])

在 Matlab 中:

>> coeff = [0.708563939215852, -0.3111717537041549, -0.2151830138973625]
>> roots(coeff)
ans = 
   0.812794068532020
   -0.373635742116877

我在 C++ 中尝试使用 Eigen 库,但收到不同的结果:

#include <unsupported/Eigen/Polynomials>

Eigen::Vector3d coeff(0.708563939215852, -0.3111717537041549, -0.2151830138973625);
Eigen::PolynomialSolver<double, Eigen::Dynamic> solver;
solver.compute(coeff);
const Eigen::PolynomialSolver<double, Eigen::Dynamic>::RootsType &r = solver.roots();

--> r[2] = {{1.2303239390096565, 0.000}, {-2.6764034787849331, 0.000}}

最佳答案

感谢 @rafix07 的评论,下面的代码给出了与 NumPy 和 MATLAB 中相同的结果。必须交换系数的顺序。

#include <unsupported/Eigen/Polynomials>

Eigen::Vector3d coeff(-0.2151830138973625, -0.3111717537041549, 0.708563939215852);
Eigen::PolynomialSolver<double, Eigen::Dynamic> solver;
solver.compute(coeff);
const Eigen::PolynomialSolver<double, Eigen::Dynamic>::RootsType &r = solver.roots();

关于python - 使用 Eigen 库在 C++ 中计算多项式的根,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61074378/

相关文章:

matlab - 为什么 MATLAB 中的核平滑函数 ksdenth 会产生大于 1 的值?

matlab - 如何在 MATLAB 中将日期时间设置为 5 的倍数?

python - 如何在Python中比较HTTP header 和时间字段?

c++ - Unresolved external symbol Visual Studio 2010 错误

python - 通过 Pillow 的 Image.frombytes 创建的图像与预期不同

C++ 调用不同的类构造函数,避免切换

c++ - 如何在 C 套接字上将超时设置为 "connect()"函数?

oop - 强制派生类调用 MATLAB 中的基函数?

python - 如何使用Scrapy同时运行一个蜘蛛的多个版本?

python - 替换预训练 Keras 模型中的嵌入层