2012-09-12 37 views
-2

我在尋找一些幫助在Java解決以下方程x1y1r1x2y2r2 & ,y3r3已知解決方程圈

(a-x1)^2 + (b-y1)^2 = r1^2 + r^2 
(a-x2)^2 + (b-y2)^2 = r2^2 + r^2 
(a-x3)^2 + (b-y3)^2 = r3^2 + r^2 

值。 我需要解決的問題a,b,r

如何在Java中這樣做呢?我檢查了Commons Maths library,但沒有找到我如何實現這一目標。它雖然幫助線性方程。

+3

http://en.wikipedia.org/wiki/Gaussian_elimination –

+0

可能要問[Math.StackExchange](http://math.stackexchange.com/)而不是 – Landric

回答

3

我認爲你需要線性方程來消除高斯。

如果a,b和r是您需要解決的問題,很明顯這些是非線性方程。

您將需要一個非線性求解器,如Newton-Raphson。

你必須線性化你的方程。計算差分da,db和dr的Jacobean。

您就會開始與最初的猜測

a = a(old) 
b = b(old) 
r = r(old) 

使用方程組的線性化版本來計算增量

2*(a(old)-x1)*da + 2*(b(old)-y1)*db = 2*r(old)*dr 
2*(a(old)-x2)*da + 2*(b(old)-y2)*db = 2*r(old)*dr 
2*(a(old)-x3)*da + 2*(b(old)-y3)*db = 2*r(old)*dr 

更新你的猜測

a(new) = a(old) + da 
b(new) = b(old) + db 
r(new) = r(old) + dr 

和重複,直到它收斂(如果收斂)。

你永遠不應該使用高斯消元來求解線性方程:它會遇到很多問題。更好的想法是做LU分解和前向替換。

如果我的線性化方程是正確的,它們的形式爲A(dx) = 0。邊界條件應該是什麼?

(a, b)是圓心的座標; r是半徑。

你真的有三分(x1, y1),(x2, y2)(x3, y3)?或者你有更多的積分?如果是後者,則需要最小二乘擬合。

+0

這將進一步探討並更新。謝謝 –

+0

+ 1高斯消除絕對不會工作。與編程問題相比,這更像是一個數學/數值計算問題。大多數SO讀者可能從來沒有或已經忘記如何做相關的數學。 (我自己包括!) –

+0

@duffymo - 我只有3分 –