2012-08-16 117 views
2

我试图用C++来求解4个二阶多项式方程组。什么是最快的解决方法,如果可能的话,你可以链接或写一个小伪码来解释它?我知道涉及Groebners基础或QR分解的解决方案,但我无法找到他们如何工作以及如何实施它们的明确说明。关于多项式也许有用的信息:在C中求解多项式(4,二阶)的系统

  • 加入(S)可能存在或可能不,但我只在一定范围内的解决方案(如X,Y,Z,T在[0,1]兴趣)
  • 多项式的形式为:a + bx + cy + d * x * y = e + fz + gt + h * z * t(求解x,y,z,t)。所有系数都是唯一的。
  • 多项式方程来自双线性插值。
  • 我试图找到一个确切的解析解,但其他人发布,解决数学多项式的大型系统否则是耗时
+1

http://www.dreamincode.net/forums/topic/192199-polynomial-root-solver-link-to-code/ – Almo 2012-08-16 20:03:22

+0

谢谢,但我试图解决四个多项式的系统 - 詹金斯Traub算法描述如何找到一个的根。我如何将这两者放在一起找到系统根源的算法中,而不用将替换项重写为一个方程(因为它很单调乏味)? – Kurt 2012-08-16 20:10:45

+0

不介意我,你问没有替换。忘记我评论。尽管如此,为了记录,制作一个可以自动替换的包装程序并不困难。 – AlexLordThorsen 2012-08-16 20:13:40

回答

0

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

由于他们的许可限制性很强,可能您可以查看该方法,然后使用库(如gsl)对其进行调整。我没有尝试,但这个页面http://na-inet.jp/na/gslsample/nonlinear_system.html给出了一个关于如何使用gsl来做到这一点的例子。

1

我会简单地使用通用求解器IPOPT,用C++编写。你可以用[0,1]边界约束来提供它,它实际上可以帮助IPOPT并使解决方案过程更快。

系统的稀疏模式是否改变?如果没有,那么你可以保存一个初始化步骤。但我不是100%确定的。无论哪种方式,与Mathematica中的分析解决方案相比,IPOPT都快速发展。