Ruby 用逻辑方法解方程的问题

Ruby 用逻辑方法解方程的问题,ruby,math,equation,Ruby,Math,Equation,我在想一种用简单的面向对象的方法来解简单的方程。我发现了一种方法,它似乎在变量单独存在的所有情况下都有效。见: 对于样本,该方程:(4/x+3)/2=2 首先,我将减号运算符((4/x+3)/2-2=0)中的相等值转换为等于所有值为零。 然后我按照正常的优先顺序应用所有操作,就像x变成一个数字一样。第一个是4/x,我将操作放在堆栈上:4/并返回x。下一个是x+3(请记住4/x导致了x)。操作进入堆栈(现在是4/+3)并返回x。重新计算此值,最终堆栈将为4/+3/2-2。然后,我按以下顺序还原所有

我在想一种用简单的面向对象的方法来解简单的方程。我发现了一种方法,它似乎在变量单独存在的所有情况下都有效。见:

对于样本,该方程:
(4/x+3)/2=2
首先,我将减号运算符(
(4/x+3)/2-2=0
)中的相等值转换为等于所有值为零。 然后我按照正常的优先顺序应用所有操作,就像
x
变成一个数字一样。第一个是
4/x
,我将操作放在堆栈上:
4/
并返回x。下一个是
x+3
(请记住
4/x
导致了
x
)。操作进入堆栈(现在是
4/+3
)并返回
x
。重新计算此值,最终堆栈将为
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-34/
操作:
4/((0+2)*2-3)

结果是四,值为
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
?换句话说,如何添加两个变量堆栈?

根据要求,我将回答我之前的评论:


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


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

你不需要两个变量堆栈。您需要一个简化阶段,将其更改为
2x=4
,然后求解
x
“我正在考虑一种用简单的对象定向来求解简单方程的方法。”-这里有一些固有的错误。您可以通过算法(并在一定程度上通过程序)解决此问题。不要关注OO(无论多么简单),而是关注这里需要的算法步骤。我是说,你怎么解这样的方程?您通常使用哪些步骤?把它们写下来,然后分析它们,寻找一种将它们写成算法的方法。正如Michael所说,你的堆栈方法缺乏简化方程的能力。您需要一个简化算法,该算法接受原始方程并创建一个规范化的方程,您可以将其输入到基于堆栈的流程中。但是,还有一些限制,因为如果自变量只出现一次,那么原始算法只能处理方程。它不能处理变量多次出现的方程(如在x^2+x中)。可能重复@Michael,你应该回答这个问题。