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

时间:2010-06-16 06:33:34

标签: java math beanshell

如何用Java实现数学公式?

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

8 个答案:

答案 0 :(得分:5)

这是一个难题,除非你将自己局限于简单的方程类型。

以下是一些供您追踪的链接:

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

我不认为这是一个功课(太难了!),我不认为这也是一个研究问题(什么是新的?),所以根据问题的背景,最简单的解决方案可能只是要利用Wolfram Alpha。

  

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

链接

答案 3 :(得分:1)

我在我的Java Algebra System (JAS) library项目中使用Symja来解决单变量多项式。

符号模式的示例输入:

Roots[x^2 + 5x + 10]

答案 4 :(得分:0)

也许您可以使用CASMATLABOctave等<{3}}。

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

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

我建议使用Octave,因为它是开源的。大多数CAS都非常昂贵。

答案 5 :(得分:0)

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

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

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

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

最好是研究用于将表达式从中缀转换为后缀和数据的数据结构算法。到&amp;来回。然后在数据结构中有一种用于评估表达式的算法。此评估通过使用堆栈完成。

您可以学习数据结构书籍。有些书是“Fundamentals of data structures”,Ellis HorowitzSchaum's Outline of Data Structures with Java等。