如何操纵数学符号?

6 math equation-solving

这更像是一个"教育"问题.:)

虽然,我可能最终想做这样的事情.

所以,让我说我得到了一个等式.可以是任何类型的方程,只要它不是荒谬的,也是一个擅长数学的人,可以解决它.

假设...... 0 =(x-1)(x + 2)

或者...... y =(x ^ 2),y = 1/x

或正弦函数等.基本上,像在学校一样做数学.

问题是,我如何编写计算机程序来解决这个问题?我知道这是可能的,因为像Mathematica,Maple等程序已经这样做了几十年!但是我找不到任何关于如何制作简单的方程求解器的好文档.

我不希望答案告诉我"这正是你如何做到的"因为当然这样的事情是一个完整的大型程序,而不仅仅是一个代码片段.

但只是概述,或链接到一些好的文件?那太好了!谢谢 :)

特别是所需的数据结构和算法.

如果做不到这一点,我只需要弄清楚我如何解决方程,并对其进行编码.但是这需要几个月的时间才能做到正确(我以前做过这种事情,将我自己的思维过程形式化为代码,它可以工作,但速度很慢).

duf*_*ymo 3

Wolfram Alpha将是您最容易获得的基准。

您的输入是字符串,因此第一步是编写词法分析器/解析器以将这些字符串分解为标记并将它们放入抽象语法树 (AST) 中。

您没有说明您想用什么语言来实现它,但我建议您查看ANTLR。它是一个解析器生成器,可以帮助您创建 AST。你必须为你的方程想出一个语法。

一旦你有了 AST,你的解算器就会遍历树,并将更具体的操作与“+”、“-”等符号关联起来。你可以处理的运算符越多,你的解算器就会越强大、越全面。

但您必须处理或排除许多复杂情况:

  1. 并非所有方程都有解。
  2. 并非所有方程都有闭式解。
  3. 并非所有方程都是线性的。
  4. 许多有趣的问题由许多耦合方程组成(想想线性代数)。
  5. 当封闭式无法满足您的需求时,您可能需要了解很多有关数值方法的知识。

我建议您从简单的算术和多项式开始,然后逐步提高。史蒂芬·沃尔夫勒姆 (Stephen Wolfram) 不是一天就能写出 Mathematica 的。