我正在考虑用简单的面向对象来解决简单方程的方法。我找到了一种似乎适用于变量单独的所有情况的方法。参见:
对于样本,此等式:(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
?换句话说,如何添加两个变量堆栈?
答案 0 :(得分:0)
根据要求,我正在回答我之前的评论:
您不需要两个变量堆栈。您需要一个简化阶段,将其更改为2x = 4
,然后解决x
。
为了扩展它,进行一些符号计算的第一步,如术语重写和简化将是有序的。一旦你有了这个,使用你当前的解算器(记住路易斯在他的评论中所说的)。