将数学方程表示为Java对象

knp*_*wrs 4 java math

我试图设计一种将数学方程表示为Java对象的方法.这是我到目前为止所提出的:

  • 术语
  • - 包括诸如系数(可以是负数),指数和变量(x,y,z等)之类的字段.有些字段甚至可能完全符合他们自己的条件,引入递归.
  • - 扩展Term的对象将包括诸如TrigTerm之类的东西来表示三角函数.

  • 方程

  • - 这是Term的集合
  • - Equation的toString()方法将调用其所有Term的toString()方法并连接结果.

总的想法是我能够以编程方式操纵方程式(例如,一个能够返回方程式的方向式方法,这个方程式是它所要求的方程式的导数,或者是一种评估方程式的方法变量等于某个值).


我对简单方程式的效果很好:
x ^ 2 + 3
这只是两个Term s:一个带有变量"x"和一个指数"2",另一个带有一个常量"3".


但对于更复杂的方程式而言并非如此:
替代文字
是的,这是一个可怕的例子,但我只是说明一点.


那么现在问题是:将数学方程表示为Java对象的最佳方法是什么?有没有图书馆已经这样做了?

Mal*_*lio 13

将数学方程表示为Java对象的最佳方法是什么?

我要你注意,你没有任何方程式.方程看起来像这样;

x = 3

你所拥有的是表达式:在某些情况下可以评估某些特定值的符号集合.

你应该写一个类Expression.表达式有三个子类:常量(例如3),变量(例如x)和操作.

操作具有类型(例如"取幂"或"否定")以及要处理的表达式列表.这是关键的想法:一个操作,这一种表达,也表达的一些数字.

所以你的 是SUM(EXP(X,2),3) - 即SUM操作,取两个表达式,第一个是表达式变量X和常量2的指数,第二个是常量3.

这个概念可以无限细化,以表示您可以在纸上书写的任何表达.

困难的部分是评估表示表达式的字符串并生成一个Expression对象 - 正如有人建议的那样,阅读一些关于解析的文章.这是最难的部分,但仍然很容易.

评估表达式(给出所有变量的固定值)并打印出一个实际上很容易.更复杂的变换(如差异化和整合)可能具有挑战性,但仍然不是火箭科学.