2012-08-16 116 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都快速發展。