2

有人将如何在 Java 中实现数学公式?

我的意思是,用户输入一个包含多个变量的字符串。就像一个简单的二次公式:x^2 + 5x + 10。或者在 Java 中:(Math.pow(x,2)) + (x * 5) + 10. 然后用户将输入它,然后程序将求解 x。我将使用BeanShell Interpreter 类将字符串解释为等式。但是我将如何解决 x 呢?

4

8 回答 8

5

这是一个难题,除非您将自己限制为简单的方程类型。

这里有一些链接供您追逐:

通过第二个链接,我发现了 3 个开源 Java 系统。

于 2010-06-16T06:42:08.943 回答
1

正如@nuriaion 建议的那样,您可以使用计算机代数系统,尽管我认为 Mathematica 或 Maple 或 Sage 或 Macsyma 会是更好的建议。还有其他人。我不确定很多人会将 Matlab 或 Octave 视为 CAS,它们更像是数值计算环境。尽管 Matlab 符号工具箱可能会提供足够的 CAS 能力来满足您的需求。

将 Mathematica 集成到 Java 编程系统中相对容易。可能不便宜请注意。

于 2010-06-16T07:16:51.100 回答
1

我不认为这是一个家庭作业(太难了!),我也不认为这是一个研究问题(什么是新的?),所以根据问题的上下文,最简单的解决方案可能就是利用沃尔夫拉姆阿尔法。

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

链接

于 2010-06-16T07:25:19.400 回答
1

我在Symja项目中使用Java 代数系统 (JAS) 库来求解单变量多项式。

符号模式的示例输入:

Roots[x^2 + 5x + 10]
于 2010-06-17T18:18:54.320 回答
0

也许您可以使用MATLABOctaveCAS

Octave 是开源的,我相信它有一个 Java 绑定 (joPas)。

编辑:带有符号工具箱的 MATLAB 可以解决很多问题。Octave 也有一些符号工具箱,但我不知道它有多好。

我推荐 Octave,因为它是开源的。大多数 CAS 都非常昂贵。

于 2010-06-16T06:59:03.110 回答
0

您可以将 x 的系数映射到 x 的幂。例如; 假设您有这样的公式:3x^2 - 5x + C = 0 但这种简单的方法仅适用于小度数方程。例如,我给出的等式是 2 次方(最大 x 幂);所以它有 2 个 x 的解值,可以用 Vieta 方程计算。

PS:我在大学学习数学工程,我对 Gnu Octave 非常满意。

http://mathworld.wolfram.com/PolynomialRoots.html

http://en.wikipedia.org/wiki/Root-finding_algorithm

于 2010-06-16T11:21:38.777 回答
0

一种可能性是使用用 ABCL 编译的 Maxima 来求解方程(并做你需要的任何其他代数)。ABCL 是 Java 中 Common Lisp 的一个实现。您的前端程序将获取输入并将其传递给 Maxima 来解决它,然后显示结果。本质上,您可以将 Maxima 用作大型数学库。

于 2010-08-18T20:59:48.983 回答
0

如果您研究将表达式从中缀转换为后缀和来回的数据结构算法,那就更好了。然后在数据结构中有一个评估表达式的算法。此评估是通过使用堆栈完成的。

您可以研究数据结构书籍。其中一些书籍是Ellis Horowitz的“数据结构基础” 、Schaum 的 Java 数据结构大纲等。

于 2010-11-19T11:44:03.997 回答