2

我正在尝试使用 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 中解决大型多项式系统非常耗时
4

2 回答 2

1

I would simply use the general-purpose solver IPOPT, written in C++. You can feed it with the [0, 1] bound constraints, it actually helps IPOPT and makes the solution procedure faster.

Does the sparsity pattern of the system change? If not, then you can probably save an initialization step. I am not 100% sure though. Either way, IPOPT is blazing fast compared to the analytic solution in Mathematica.

于 2012-08-16T21:29:48.377 回答
0

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

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

于 2012-08-16T20:18:37.120 回答