2017-03-15 53 views
1

我有一組二次方程的解決方案,如查找一組二次方程

x² + x + y = 7 
x + 3y = -3 
y² + x² + z = 11 

所有係數都是整數。這組方程可能沒有解決方案,一整套解決方案的一個解決方案。

有沒有人知道一個方法來找出這些方程是否有解決方案?

我的第一個想法是將這些方程一個接一個地求解,然後使用結果來求解其他方程。問題是四捨五入錯誤:如果理論上我有兩個方程

x + y = 5 
x = 5 - y 

會有很多解決方案。但如果我的方法結果爲

x + y = 4.999999 
x = 5 - y 

系統突然沒有解決方案。在下一步中,我可以添加ε來彌補舍入誤差,但我不確定它們應該有多大。任何想法或更好的方法?

PS:背景是找出平面中一組複雜的圓和線的交點。

+2

你可以嘗試使用'BigDecimal'來擺脫精度錯誤(你需要確定一個通用的最大精度)或者將這些值與一些epsilon進行比較,比如'boolean equal = Math.abs(4.999 - 5)> 0.0001;'。後一種方法通常用於幾何應用,如碰撞檢測等,其中結果在儘可能低的精度下需要數值穩定。 – Thomas

+1

epsilon值是交叉點的精確度,因此在您的情況下,它是每個曲線/曲面上最近點的最大距離,被視爲交點(同一點),通常設置爲形狀中最小細節的一小部分。 。或像素大小的一小部分,如果渲染等...但要小心它使用哪種力量...例如,如果你有線'x + c0.y = c1',那麼你使用'eps^1',但是對於圓'x^2 + y^2 = r^2'你使用'eps^2',所以你在方程之間仍然有相同的單位/度量。我解決[如何近似搜索工作](http://stackoverflow.com/a/36163847/2521214) – Spektre

回答

1

既然你有整數的確切輸入,你可以使用確切的算法。例如,您可以計算與您的方程相對應的多項式的一個Groebner basis,例如,

x² + x + y - 7 
x + 3y + 3 
y² + x² + z - 11 

本條款的字典順序你會得到一種「三角」的形式,其中第一個多項式包含儘可能少的變量可能的,例如一個Groebner基

81z² - 176z + 92 
2y + 9z - 8 
2x - 27z + 30 

這給你z的兩個實根和y和x的唯一值,一旦z是固定的。如果計算基礎的第一個多項式不包含變量,那麼您的方程組沒有任何解決方案。如果計算基數中的第一個多項式包含兩個變量,那麼您有無數個解(可能很複雜)。

您可以使用Wolfram Alpha在線實驗Groebner鹼基(例如compute the basis for your example)。 Groebner基礎可以使用Buchberger algorithm來計算,對於這些實現,Java中有一些實現可用。

注意:Buchberger算法的最壞情況複雜度是輸入最大總度的雙倍指數,但在您的應用程序中,這可能並不重要。