【问题标题】:Solve system of polynomials (4, second order) in C在 C 中求解多项式系统(4,二阶)
【发布时间】:2012-08-16 19:59:41
【问题描述】:

我正在尝试使用 C++ 求解 4 个二阶多项式方程组。解决系统最快的方法是什么,如果可能的话,你能链接或写一点伪代码来解释它吗?我知道涉及 Groebners 基础或 QR 分解的解决方案,但我找不到关于它们如何工作以及如何实现它们的清晰描述。也许有关多项式的有用信息:

  • 解决方案可能存在也可能不存在,但我只对特定范围内的解决方案感兴趣(例如 [0,1] 中的 x,y,z,t)
  • 多项式的形式为:a + bx + cy + d*x*y = e + fz + gt + h*z*t(求解 x,y,z,t)。所有系数都是唯一的。
  • 多项式方程来自双线性插值。
  • 我已尝试找到精确的解析解,但正如其他人所发布的那样,在 Mathematica 中求解大型多项式系统非常耗时

【问题讨论】:

  • 谢谢,但我正在尝试解决四个多项式的系统 - Jenkins Traub 算法描述了如何找到一个多项式的根。如何将两者放在一起找到系统根的算法,而无需使用替换将四个方程重写为一个(因为它很乏味)?
  • 别介意我,你没有替代地问。忘记我评论了。不过,为了记录,制作一个自动替换的包装程序并不难。
  • 对了。错过了。玩得开心。 :)

标签: c++ math polynomial-math equation-solving


【解决方案1】:

我会简单地使用用 C++ 编写的通用求解器 IPOPT。您可以使用 [0, 1] 绑定约束来提供它,它实际上有助于 IPOPT 并使求解过程更快。

系统的稀疏模式会改变吗?如果没有,那么您可能可以保存一个初始化步骤。不过,我不是 100% 确定。无论哪种方式,与 Mathematica 中的解析解相比,IPOPT 都快得惊人。

【讨论】:

    【解决方案2】:

    您可以查看描述非线性方程组解的数值食谱书(c 版本中的第 9 章)。从他们的网站http://www.nr.com/ 可以查看在线版本。

    由于他们的许可非常严格,您可能可以查看该方法,然后使用诸如 gsl 之类的库对其进行调整。我没有尝试,但是这个页面 http://na-inet.jp/na/gslsample/nonlinear_system.html 给出了一个关于如何使用 gsl 做到这一点的示例。

    【讨论】:

      猜你喜欢
      • 2023-03-06
      • 2021-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-05
      • 1970-01-01
      • 2018-09-20
      • 1970-01-01
      相关资源
      最近更新 更多