python - 使用 Eigen 库计算 C++ 中多项式的根
问题描述
如何使用 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 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}}
解决方案
感谢@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();
推荐阅读
- bash - 如何比较默认列表中的用户输入值?
- asp.net-core - Ocelot ApiGateway 无法访问 Kubernetes 上的其他服务
- python - pip3 vs python3 -m pip vs python3.7 -m pip
- excel - excel 中的 SEARCH 功能无法正常工作
- linux - 如何将变量设置为shell脚本中变量内的变量
- c# - 使用 specsync 将 Specflow 方案(功能文件方案)与 Azure DevOps 测试计划同步
- python - 用来自另一个数据框的值填充一列
- c# - 需要在 C# 中使用用户名和密码创建登录窗口,但是当我输入不正确的用户名或密码时出现错误
- maven - 如何将 Keycloak 旧版本 4.1.0 转换为“独立服务器分发”?
- powershell - 提取嵌套档案以获取内容