繁体   English   中英

将数学方程表示为Java对象

[英]Representing Math Equations as Java Objects

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

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

  • 方程

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

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


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


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


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

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

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

x = 3

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

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

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

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

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

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

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

有关如何编写将输入转换为表达式树的编译器部分的详细信息,请参阅一本好的编译器书。

您可能会发现这个系列鼓舞人心: http//compilers.iecc.com/crenshaw/

如果您“只是”想要评估输入字符串,那么请查看Javassist库中的代码段编译器。

在这里,我将解析的数学表达式的表示描述为Symja项目中的抽象语法树

D.java文件中的D[f,x]函数通过从System.mep文件中读取初始Derivative[]规则来实现派生函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM