Math 表达式编程

Math 表达式编程,math,expression,formula,equation,simplify,Math,Expression,Formula,Equation,Simplify,我已经建立了一个完整的工作计算器,计算任何表达式和图表。我还构建了一个符号微分器,它正确地微分了公式w.r.t.x,但我对如何以编程方式简化任何通用方程有点迷茫,因为在那一刻,答案是由许多倍数的1得出的。我意识到*1很容易简化,但我需要一个全面的简化器来覆盖任何情况。我认为简化是一种规范化的形式。您可能想实现的第一件事是简化多项式: 计算任何不包含任何变量的子表达式 定义变量的顺序,除非x是唯一有效的变量 根据变量对单项式中的项进行排序 基于此变量顺序,定义单项式的顺序,该顺序考虑变量及其度数

我已经建立了一个完整的工作计算器,计算任何表达式和图表。我还构建了一个符号微分器,它正确地微分了公式w.r.t.x,但我对如何以编程方式简化任何通用方程有点迷茫,因为在那一刻,答案是由许多倍数的1得出的。我意识到*1很容易简化,但我需要一个全面的简化器来覆盖任何情况。

我认为简化是一种规范化的形式。您可能想实现的第一件事是简化多项式:

  • 计算任何不包含任何变量的子表达式
  • 定义变量的顺序,除非x是唯一有效的变量
  • 根据变量对单项式中的项进行排序
  • 基于此变量顺序,定义单项式的顺序,该顺序考虑变量及其度数
  • 多项式按单项式的阶项
  • 识别重复的单项式并合并它们的系数
  • 删除所有结果为零的单项式
如果您还想简化包含函数的表达式,那么事情可能会变得任意复杂。一般来说,我会尝试定义一些方法来衡量一个术语的简单性,即给定两个术语,决定哪一个更简单。然后你可以考虑一些规则,看看你是否能保证这些规则只会让你的条款更简单。您可能还需要检查终止(即,对于无限多的步骤,您的术语不可能变得更简单)和合流(即,当存在两种可能的简化时,下一步执行哪种简化并不重要,因为最终结果是相同的)


你可能想阅读一些关于、和相关主题的文献。

最自由(许可证方面)的方法是使用IMHO为你简化。不,我需要自己做,反正是为iOS应用程序做的,所以我认为我无法在那里实现该库。我有简单的方程要简化,它看每个像X一样的字母,然后通过看其中其余表达式的X的幂来简化,但它不能与括号或其他函数一起工作。重点是你在找一个计算机代数系统(CAS),C++计算机代数系统虽然有GPL许可证,但它可能不适合您的需要。如果你坚持从头开始,我认为这更像是一个数学问题,而不是一个编程问题,这超出了Stackoveflow的范围。你也可以考虑在服务器上做简化,那么你就不必在邪恶公司的任意限制下工作了…谢谢你的输入,你所说的和我所需要的差不多,到目前为止,它与我自己开发的解决方案相匹配,这些功能确实是很困难的。