用Eigen库计算C++中的多项式根

2024-10-01 00:29:40 发布

您现在位置:Python中文网/ 问答频道 /正文

<如何用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++中用特征库尝试,但得到不同的结果:

#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}}

Tags: importnumpyasnpdynamic特征arraydouble
1条回答
网友
1楼 · 发布于 2024-10-01 00:29:40

感谢@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();

相关问题 更多 >