有人将如何在 Java 中实现数学公式?
我的意思是,用户输入一个包含多个变量的字符串。就像一个简单的二次公式:x^2 + 5x + 10。或者在 Java 中:(Math.pow(x,2)) + (x * 5) + 10
. 然后用户将输入它,然后程序将求解 x。我将使用BeanShell Interpreter 类将字符串解释为等式。但是我将如何解决 x 呢?
正如@nuriaion 建议的那样,您可以使用计算机代数系统,尽管我认为 Mathematica 或 Maple 或 Sage 或 Macsyma 会是更好的建议。还有其他人。我不确定很多人会将 Matlab 或 Octave 视为 CAS,它们更像是数值计算环境。尽管 Matlab 符号工具箱可能会提供足够的 CAS 能力来满足您的需求。
将 Mathematica 集成到 Java 编程系统中相对容易。可能不便宜请注意。
我不认为这是一个家庭作业(太难了!),我也不认为这是一个研究问题(什么是新的?),所以根据问题的上下文,最简单的解决方案可能就是利用沃尔夫拉姆阿尔法。
WolframAlpha:
solve x^2 + 5x + 10
x = -1/2 i (sqrt(15)-5 i) ~~ -2.5-1.93649 i
x = 1/2 i (sqrt(15)+5 i) ~~ -2.5+1.93649 i
您可以将 x 的系数映射到 x 的幂。例如; 假设您有这样的公式:3x^2 - 5x + C = 0 但这种简单的方法仅适用于小度数方程。例如,我给出的等式是 2 次方(最大 x 幂);所以它有 2 个 x 的解值,可以用 Vieta 方程计算。
PS:我在大学学习数学工程,我对 Gnu Octave 非常满意。
一种可能性是使用用 ABCL 编译的 Maxima 来求解方程(并做你需要的任何其他代数)。ABCL 是 Java 中 Common Lisp 的一个实现。您的前端程序将获取输入并将其传递给 Maxima 来解决它,然后显示结果。本质上,您可以将 Maxima 用作大型数学库。
如果您研究将表达式从中缀转换为后缀和来回的数据结构算法,那就更好了。然后在数据结构中有一个评估表达式的算法。此评估是通过使用堆栈完成的。
您可以研究数据结构书籍。其中一些书籍是Ellis Horowitz的“数据结构基础” 、Schaum 的 Java 数据结构大纲等。