如何用Java解方程组?

How to solve equation system by using Java?

这是问题所在,我有这个方程组(作为示例),我需要求解并找到 x 和 y 值:

(x-0)^2+(y-5)^2=12,25
(x-0)^2+(y-0)^2=2,25

不用担心 0'os,这会根据检测到的点而变化,这只是一个示例。

据我所知,我不能在这里使用 Craner 的规则,所以我是 lost,我不知道如何编程。手工做起来很简单,但是如何为此编写算法呢? 有什么建议吗?

编辑:这是一张方程式的图片以及我如何手动求解它们的图片:http://i.imgur.com/Gm29Cfw.jpg (step by step solution: http://i.imgur.com/ZvraQoZ.jpg) 手工求解的过程非常简单:我有二次方程组。然后,我采用第二个方程并找出 x 在该方程中等于什么。所以,现在通过这样做我知道 x 等于什么。在这一步之后,我将 x 值放入第一个值中。通过这样做,我确保第一个方程式只有一个缺失变量。我正常解决它并得到 y 等于什么。然后,我将 y 值赋给 x 值,然后得到答案。

好的,这是一个想法,但我还没有实现它并检查它是否真的有效。

从数学上讲,这两个方程描述的是圆。

设(a,b)为第一个圆的圆心,sqrt(r_1)为半径,(c,d)为第二个圆的圆心,sqrt(r_2) 它的半径。然后,在笛卡尔坐标系中,圆上的点 fullfull 分别

(x - a)^2 + (y-b)^2 = r_1

(x - c)^2 + (y-d)^2 = r_2

我们现在用两个函数来描述圆:上半部分和下半部分。这些是涉及平方根的函数。所以如果我们有

(x - a)^2 + (y-b)^2 = r_1

然后求解 y 给出(通过 wolfram alpha)

(y-b)^2 = r_1 - (x-a)²

y = b + sqrt(-a²+2ax+r_1-x²)

y = b - sqrt(-a²+2ax+r_1-x²)

我们也可以通过将(a,b)与(c,d)交换,r_1与r_2交换,用这两个方程表示另一个圆的下部和上部。

关键是,一旦我们有两个图 y_1 = f(x) 和 y_2 = g(x),我们就可以找到它们与 f(x) = g 的交集(x) 或等效的 f(x) - g(x) = 0。为此,我们可以使用牛顿迭代法找到的近似解!我们还可以计算所需的导数:

所以,整个想法是我们将每个圆分成两个功能:上部和下部。然后,我们检查第一个圆的上部是否与描述第二个圆的上部或第二个圆的下部的函数相交。与下部相同,我们再次检查其他功能的上部和下部。而求交点,我们可以用近似牛顿法。

所以,对于上面的例子:

(x-0)^2+(y-5)^2=12,25

我们得到上下函数为

y = 5 + sqrt(12.25-x^2) y = 5 - sqrt(12.25 -x^2)

我们可以很好地绘制它们

相反,第二个圆((x-0)^2+(y-0)^2=2,25)由等式

描述

y = 0 + sqrt(2.25-x^2) y = 0 - sqrt(2.25-x^2)

现在,如果我们同时查看所有这些图表:

我们发现有一个路口! :).在第一个圆的下部和第二个圆的上部之间。如果我们现在形成这两个函数之间的差异,我们将得到以下函数图:

f(x) = 5 - 平方根 (12.25 -x^2) g(x) = 0 + sqrt(2.25-x^2)

f(x)-g(x) = 5 - sqrt(12.25 -x^2) - sqrt(2.25-x^2)

如果我们绘制那个

我们可以看到,如果找到该图的零点,我们将得到正确的解 x = 0! :)

一旦我们有了这个解,我们就可以消去任一方程中的一个变量

(x-a)^2 + (y-b)^2 = r_1

并且我们将收到一个关于 y 的二次方程,可以通过通解公式(pq-公式或 abc-公式)求解。

希望这能给你一些想法。