文档管理中心

使用PolyRoot求解多项式根

多项式零点求解器(Polynomial Root Solver)用于计算一元多项式的实数根。其接收稀疏格式的多项式描述作为输入进行零点求解,适用于计算机辅助设计、信号处理、控制理论等需要高精度多项式根计算的场景。

其相关定义如下:多项式由稀疏格式的FAST_Poly结构体描述,其中coeff数组存储各项系数,pow数组存储对应指数,且需按指数升序排列。例如多项式可表示为coeff={1, -2, 3},pow={0, 1, 2}。

接口说明

具体API说明详见接口文档

展开
名称 描述
FAST_ErrorCode HMS_FAST_PolyRoot_ComputeRoots (const FAST_Poly *poly, const size_t maxRootCount, double *root, size_t *rootCount) 计算多项式的给定数量的实根。
FAST_ErrorCode HMS_FAST_PolyRoot_ComputeSingle (const FAST_Poly *poly, double *root) 计算多项式的单个主导(绝对值最大)实根。
FAST_ErrorCode HMS_FAST_PolyRoot_ComputeRootIntervals (const FAST_Poly *poly, const size_t maxRootCount, double *leftBoundary, double *rightBoundary, size_t *rootCount) 计算多项式给定数量实根的隔离区间,输出每个实根的左右边界。

开发步骤

  1. 在CMake脚本中链接相关动态库。

    收起
    自动换行
    深色代码主题
    复制
    1. find_library(
    2. lib_fast_solver
    3. NAMES fast_solver
    4. )
    5. target_link_libraries(entry PRIVATE ${lib_fast_solver})
  2. 构造FAST_Poly结构体,填充系数数组coeff和指数数组pow(需按指数升序排列)。

  3. 调用API(HMS_FAST_PolyRoot_ComputeRoots)计算多项式的根。

收起
自动换行
深色代码主题
复制
  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include "FASTKit/fast_solver_polynomial.h"
  4. int main() {
  5. // 构造多项式 f(x) = x^2 - 3x + 2 = (x-1)(x-2),根为 1.0 和 2.0
  6. // 系数数组:[常数项, 一次项系数, 二次项系数]
  7. double coeff[] = {2.0, -3.0, 1.0};
  8. // 指数数组:[对应项的指数]
  9. uint32_t pow[] = {0, 1, 2};
  10. size_t length = 3;
  11. // 初始化FAST_Poly结构体
  12. FAST_Poly poly;
  13. poly.coeff = coeff;
  14. poly.pow = pow;
  15. poly.length = length;
  16. // 定义存储根的数组和根的数量
  17. double roots[2];
  18. size_t rootCount = 0;
  19. FAST_ErrorCode ret;
  20. // 调用API计算多项式的根
  21. ret = HMS_FAST_PolyRoot_ComputeRoots(&poly, 2, roots, &rootCount);
  22. if (ret != FAST_ERROR_CODE_SUCCESS) {
  23. printf("Failed to compute roots: %d\n", ret);
  24. return ret;
  25. }
  26. printf("Found %zu roots:\n", rootCount);
  27. for (size_t i = 0; i < rootCount; ++i) {
  28. printf(" root[%zu] = %f\n", i, roots[i]);
  29. }
  30. /*
  31. * Found 2 roots:
  32. * root[0] = 1.000000
  33. * root[1] = 2.000000
  34. */
  35. printf("ret = %d\n", ret);
  36. return 0;
  37. }

注意事项

  1. 构造FAST_Poly结构体,填充系数数组coeff和指数数组pow(需按指数升序排列)。

  2. 若pow数组未按指数升序排列,则函数将返回错误码FAST_ERROR_CODE_ILLEGAL_INPUT,表示输入参数非法。

搜索
请输入您想要搜索的关键词