如何在不评估的情况下分发数学表达式

How to Distribute a math expression without evaluating it

我正在尝试创建两个数字的线性组合来创建它们的 GCD。我到目前为止的代码可以找到扩展的解决方案。我已经为它完成了所有(硬)数学运算(即使用欧几里德算法找到 GCD,然后基本上向后工作)并且它会产生类似这样的结果(两个起始数字是 1215 和 960):

((960-(3*(1215-(1*960))))-(3*((1215-(1*960))-(1*(960-(3*(1215-(1*960))))))))

在我的实际解决方案中,每个组件之间都有一个 space(例如 '( ( 960 - (3 * '...) 但我试图将其简化为等式:

((-15*1215)+(19*960))

我觉得最好的方法是创建一个表达式树,但如果不实际评估答案,我不知道该怎么做。

听起来你正在寻找一个符号计算系统。这是使用 Maxima (https://maxima.sourceforge.net) 的一种方法。我将启用 stardisp 以在产品条款之间显示 *。我还将输入像 960 这样的数字作为符号,以便通过将它们写成 0 等来抑制对它们的算术运算。请注意 13 是作为普通数字输入的所以对它们进行了算术运算。

(%i13) stardisp:true;
(%o13)                        true
(%i14) 2*3;
(%o14)                          6
(%i15) *;
(%o15)                         2*3
(%i16) ((0-(3*(15-(1*0))))-(3*((15-(1*0))-(1*(0-(3*(15-(1*0))))))));
(%o16) 960 - 3*(1215 - 960) - 3*((- 2*960) + 3*(1215 - 960)
                                                          + 1215)
(%i17) factor(%);
(%o17)                  19*960 - 15*1215

也许您想用符号 abc 等替换数字以获得更通用的解决方案。

还有许多其他符号计算系统,网络搜索会找到它们。祝你好运,玩得开心。