Вычисление корней полинома в C ++ с помощью библиотеки Eigen - PullRequest
1 голос
/ 07 апреля 2020

Как мне получить корни многочлена с коэффициентами в C ++, используя библиотеку Eigen?

В 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 Library, но получил другой результат:

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

1 Ответ

2 голосов
/ 07 апреля 2020

Благодаря комментарию @ rafix07, следующий код дает мне тот же результат, что и в NumPy и MATLAB. Порядок коэффициентов нужно поменять местами.

#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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...