以逻辑方式求解方程的问题

时间:2011-05-13 16:15:58

标签: 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。然后我按此顺序恢复所有操作:

+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)

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

1 个答案:

答案 0 :(得分:0)

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

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

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