【问题标题】:How to solve equation system by using Java? [closed]如何使用Java求解方程组? [关闭]
【发布时间】:2016-05-17 07:30:31
【问题描述】:

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

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

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

据我了解,我无法在这里使用 Craner 规则,所以我迷路了,我不知道如何编程。手工很简单,但是如何为此编写算法呢? 有什么建议吗?

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

【问题讨论】:

  • 您需要提供实现算法的尝试。
  • @BinaryNerd 很抱歉,但我不知道应该从哪里开始。我不知道如何解决这个问题,这就是我寻求帮助的原因。我用谷歌搜索并找到了克兰纳的规则。有一分钟我很高兴,直到我意识到我的方程是二次的,所以 Craner 规则不是一个解。
  • @Tom 是的,但再一次,他们不是在谈论二次线性方程。
  • 为了使计算机能够在系统上工作,您需要对它们进行概括。在这种情况下,作为人类的您很容易进行更广泛的思考并直观地了解采用哪种方法以及这两个方程如何相关。至于计算机,它严格按照您需要提供的简单逻辑运行。因此,您需要建立计算机可以遵循的规则,这对于任何输入情况都是通用的。这些规则将成为算法的基础。首先找到任何输入方程的一般形式,以便告诉机器将应用哪些规则。然后您可以添加更多规则。

标签: java algorithm equation


【解决方案1】:

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

在数学上,这两个方程描述了圆。

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

(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 - sqrt(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-formula 或 abc-formula)求解。

希望这能给你一些想法。

【讨论】:

  • 非常感谢。我认为这对我来说是一个很好的起点:)
  • @Marius 实际上,上述内容甚至都不是最佳的。这里的关键字就是我在第一行中所说的:这是一个 CIRCLE-CIRCLE INTERSECTION 问题。谷歌搜索可以为您提供大量其他资源(math.stackexchange.com/questions/256100/…stackoverflow.com/questions/3349125/…)。答案应该在这些链接之一中。有时当您知道正确的术语时会更容易>_>。
  • 我知道如何手动解决这个问题,这不是问题。我只是不知道如何为此编写算法。嗯,算了,没关系。这里的大多数 stackoverflow 用户都认为我来这里是为了解决我的家庭作业或类似的事情。正如我所看到的,我将不得不自己解决这个问题。非常感谢你:)
  • 当您“手动”解决问题时,您是在使用算法。当你用手解决问题时,清楚而准确地思考你在做什么;然后让计算机执行此操作。
猜你喜欢
  • 1970-01-01
  • 2012-05-17
  • 1970-01-01
  • 1970-01-01
  • 2019-01-19
  • 1970-01-01
  • 2014-02-06
  • 1970-01-01
相关资源
最近更新 更多