0

我正在考虑一种方法来解决具有简单面向对象的简单方程。我发现了一种似乎在变量单独存在的所有情况下都有效的方法。看:

例如,这个等式:(4 / x + 3) / 2 = 2 首先,我将减号运算符 ( (4 / x + 3) / 2 - 2 = 0) 中的等号转换为将所有内容都归零。然后我以正常的优先顺序应用所有操作,就像x变成一个数字一样。第一个是4 / x,我把操作放在堆栈上:4/并返回 x。接下来是x + 3(请记住4 / x导致x)。操作进入堆栈(现在是4/ +3)并返回x。Remeating 这个最终堆栈将是4/ +3 /2 -2. 然后我按此顺序还原所有操作:

+n   -->  -n
-n   -->  +n
*n   -->  /n
/n   -->  *n
n/   -->  n/
**n  -->  **(1/n)
     (where the missing value of these binary operations is the variable)

现在堆栈是4/ -3 *2 +2. 现在我颠倒顺序并将所有操作应用为零:

堆栈:+2 *2 -3 4/ 操作:4 / ((0 + 2) * 2 - 3)

结果为 4,即 的值x

这是非常令人困惑和复杂的,但是是合乎逻辑的并且很容易用 ruby​​ 编写代码来执行任何方程式:

class Variable
  # define all numeric operators to use the stack and return self
end
def solve
  x = Variable.new
  yield(x)
  return x.value
end

x = solve do |x|
  (4 / x + 3) / 2 == 2
end

这个最终的界面很酷。

但我的问题是:如何以x + x == 4这种方式解决?换句话说,如何添加两个变量堆栈?

4

1 回答 1

0

根据要求,我将我之前的评论作为答案:

为此,您不需要两个变量堆栈。您需要一个简化阶段,将其更改为2x = 4然后求解x.

为了扩展这一点,进行一些符号计算(如术语重写和简化)的第一步是有序的。一旦你有了这个,使用你当前的求解器(记住路易斯在他的评论中所说的话)。

于 2011-05-13T22:54:30.957 回答