首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于java的代数方程解析器

用于java的代数方程解析器
EN

Stack Overflow用户
提问于 2011-01-13 23:46:23
回答 5查看 32.8K关注 0票数 20

我需要一个能够解析方程的库,并给我提供输入的结果。

例如,如下所示:

代码语言:javascript
复制
String equation = "x + y + z";
Map<String, Integer> vars = new HashMap<String, Integer>();
vars.add("x", 2);
vars.add("y", 1),
vars.add("z", 3);
EquationSolver solver = new EquationSolver(equation, vars);
int result = solver.getResult();
System.out.println("result: " + result);

并计算为:6

有没有什么java的库可以帮我做到这一点呢?

谢谢

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-01-13 23:56:38

您可以利用Java 1.6的脚本功能:

代码语言:javascript
复制
import javax.script.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
        Map<String, Object> vars = new HashMap<String, Object>();
        vars.put("x", 2);
        vars.put("y", 1);
        vars.put("z", 3);
        System.out.println("result = "+engine.eval("x + y + z", new SimpleBindings(vars)));
    }
}

这会产生:

代码语言:javascript
复制
result = 6.0

对于更复杂的表达式,JEP是一个很好的选择。

票数 29
EN

Stack Overflow用户

发布于 2011-11-15 16:31:27

还有exp4j,一个基于Dijkstra's Shunting Yard的表达式求值器。它可以在Apache License 2.0下免费获得和重新分发,大小只有25kb,并且非常容易使用。

代码语言:javascript
复制
Calculable calc = new ExpressionBuilder("3 * sin(y) - 2 / (x - 2)")
        .withVariable("x", varX)
        .withVariable("y", varY)
        .build()
double result1=calc.calculate();

还有一个在exp4j中使用定制函数的工具。

exp4j - evaluate math expressions

玩得开心!

票数 18
EN

Stack Overflow用户

发布于 2017-04-25 01:58:25

试试mXparser,在下面你会找到用法示例:

代码语言:javascript
复制
import org.mariuszgromada.math.mxparser.*;
...
...
String equation = "x + y + z";
Argument x = new Argument("x = 2");
Argument y = new Argument("y = 1");
Argument z = new Argument("z = 3");
Expression solver = new Expression(equation, x, y, z);
double result1 = solver.calculate();
System.out.println("result 1: " + result1);
x.setArgumentValue(3);
y.setArgumentValue(4);
z.setArgumentValue(5);
double result2 = solver.calculate();
System.out.println("result 2: " + result2);

结果:

代码语言:javascript
复制
result 1: 6.0
result 2: 12.0

在这里,mXparser的优点是mXparser只预编译表达式一次,然后,在参数值更改后,计算速度非常快。

沿着mXparser tutorialmXparser math collectionmXparser API行驶。

此外,此软件也使用mXparser,您可以了解Scalar Calculator app的语法。

问候

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4681959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档