有两个步骤:解析和微分/简化。
有多种方法可以进行解析。您可以使用现有的东西,或者我所做的是一个简单的递归下降解析器。无论哪种方式,结果都是解析树数据结构。
为了区分/简化,可以编写相当简单的递归函数。
(如果您只需要答案,我是Maxima的忠实粉丝。)
否则,您可以编写以下内容:
简化器:这将解析树作为输入,并通过应用如下规则生成一个新的解析树:
- 任何乘以 0 为零
- 任何乘以 1 都是那个东西
- 任何加 0 就是那个东西
- 任何数值加/减任何其他是只是一个新的数值
- 任何数值乘以/除以任何其他只是一个新的数值
替换:这需要一个解析树 A,一个类似“n”的标记名称,以及另一个树 B,遍历树 A,并且在出现“n”的任何地方,将其替换为 B 的副本。结果是 A 的副本全部“ n"s 替换为 B 的副本。
因此,例如,要获得表达式的常数部分,您可以将“n”替换为零并简化结果。所有带有“n”的项都将退出,留下常数。
要通过“n”进行区分,您可以使用基本规则:
- d(n) = 1
- d(任何不包含 n) = 0
- d(a +/- b) = d(a) +/- d( b)
- d(a * b) = b d(a) + a d(b)
- d(a / b) = (b d(a) - a d(b))/(b^2)
因此,对于 n^2 以内的项,总体策略可能是:
- 用 x 替换 n^2,用 x 微分,得到的常数 q 是 n^2 的因数。
- 对原始表达式,减去 q n^2 并化简。那是减去 n^2 项的新表达式。
- 现在用 n 来区分它,得到的常数 p 是它的因子。
- 减去 p n 并简化,以产生最终的加法常数 r。
您可以通过编写一个简单的计算器来解释解析树来查看它是否正确。只需将一个奇怪的 n 值插入原始公式,看看你得到了什么。如果你解释 (q n^2 + p n + r),你应该得到同样的结果。
害怕的?它比看起来更容易,并且是一项很棒的技能。
编辑:这是千里马:

历史:Maxima 起源于 Macsyma(MAC 符号操作),始于 70 年代初在麻省理工学院 AI 实验室,基于 MacLisp 并从 Joel Moses 的符号集成程序开始。它可以做代数、微分和积分、矩阵和张量数学、微分方程等等。