[英]Representing Math Equations as Java Objects
我试图设计一种将数学方程表示为Java对象的方法。 这是我到目前为止所提出的:
- 扩展Term的对象将包括诸如TrigTerm之类的东西来表示三角函数。
方程
总的想法是我能够以编程方式操纵方程式(例如,一个能够返回方程式的方向式方法,这个方程式是它所要求的方程式的导数,或者是一个评估方程式来评估一个方程式的方程式变量等于某个值)。
我对简单方程式的效果很好:
这只是两个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.