如何用Java实现数学公式?
我的意思是,用户输入一个包含多个变量的字符串。就像一个简单的二次公式:x ^ 2 + 5x + 10.或者在Java中:(Math.pow(x,2)) + (x * 5) + 10
。然后用户输入,然后程序将解决x。我将使用BeanShell Interpreter类将字符串解释为方程式。但是我如何解决x?
答案 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)
答案 4 :(得分:0)
也许您可以使用CAS,MATLAB,Octave等<{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非常满意。
答案 6 :(得分:0)
一种可能性是使用用ABCL编译的Maxima来求解方程(并做你需要的任何其他代数)。 ABCL是Java中Common Lisp的一个实现。您的前端程序将获取输入并将其传递给Maxima以解决它,然后显示结果。基本上你可以使用Maxima作为一个大数学库。
答案 7 :(得分:0)
最好是研究用于将表达式从中缀转换为后缀和数据的数据结构算法。到&amp;来回。然后在数据结构中有一种用于评估表达式的算法。此评估通过使用堆栈完成。
您可以学习数据结构书籍。有些书是“Fundamentals of data structures”,Ellis Horowitz,Schaum's Outline of Data Structures with Java等。