【发布时间】:2016-06-10 16:04:21
【问题描述】:
在具有变量 t 计算时间(相对于程序启动,而不是系统时间)的 Java 程序中,如何将用户输入的字符串转换为可以在需要时有效评估的数学公式。 (基本上,公式的准备可能会很慢,因为它发生在运行前,但每个存储的函数可能在运行时被调用多次,然后必须有效地评估)
由于我找不到一个可以加载公式以供以后参考的数学解析器,而不是找到求解 y=f(x) 方程的通用图,因此我正在考虑让我的 Java 程序生成一个脚本 ( JS、Python 等)从输入字符串中取出,然后以当前 t 作为输入参数调用所述脚本。 - 但是有人告诉我,脚本相当慢,因此对于实时应用程序来说是不切实际的。
有没有更有效的方法来做到这一点? (如果可行的话,我什至会考虑让我的 Java 应用程序为每个用户输入生成和编译 C 代码)
编辑:树结构确实可以存储表达式,但评估仍然相当慢,因为据我了解,在评估时(如遍历树对象),我需要再次将其转换为表达式链应该比直接求解方程需要更多的调用。相反,我将尝试生成额外的 java 类。
【问题讨论】:
-
高效或“多次”是什么意思?如果你有一个用 Java 编写的函数,它只会在默认情况下被调用 10,000 次后编译为本机代码。所以你说的不止这些吗?
-
一个旧的且在 ODE 可视化小程序staff.science.uu.nl/~beuke106/phase/newphase.html 中经过良好测试的解析器是 D. Bacon 的 expr 包,可在 wry.me/~darius 下找到
-
@PeterLawrey 链接到的“非常简化”版本也可以在this answer 中找到。但请注意,为了使用集成的
JavaCompiler,程序必须使用 JDK 运行。 JRE 是不够的,因为它不包含tools.jar)
标签: java performance math processing-efficiency