java - 定义简单的数学函数并评估结果

标签 java math

我有一个用 Java 给出的数学公式,如下所示(当然不像这个那么简单):

String equation = "x^2 + 3*y + 1";

我想从具有相同大小 n 的 x 和 y 数组生成 z 值,使得 z =equation(x,y) 也具有大小 n。例如 z = { x[0]^2 + 3 * y [0] + 1 , ..... , x[n-1]^2 + 3 * y[n-1] + 1 }。

在没有外部库的情况下,Java 中最好的方法是什么,可以帮助我评估关于任意数量变量(例如 x 和 y)的每个整数集的每个方程?

最佳答案

如果您想从头开始做所有事情,您需要拿出一个方程解析器。

从那里你可以使用枚举:

    enum Operation{ADD, SUBTRACT;

        public int evaluate(int operand1, int operand2) throws IllegalOperationException {
            switch(this) {
            case ADD: return operand1 + operand2;
            case SUBTRACT: return operand1 - operand2;
            default:
                break;
            }
            throw new IllegalOperationException();
        }

        public static Operation getOperator(String operator) throws IllegalOperationException{
            for(Operation o: Operation.values()){
                if(o.toString().equals(operator)){
                    return o;
                }
            }
            throw new IllegalOperationException();
        }
    }; 

因此,使用堆栈/队列解析您的方程,然后对于每个运算符(op)基本上执行以下操作:

Operation.getOperator(op).evaluate(r1, r2);

如果您使用的是 jdk1.6 或更高版本,请将 x 和 y 替换为 x[i] 和 y[i],并将构造的字符串传递给内置 JavaScript 引擎。

ScriptEngineManager sm = new ScriptEngineManager();
ScriptEngine en = sm.getEngineByName("JavaScript");
String expression = //your expression with values;
System.out.println(engine.eval(expression));

关于java - 定义简单的数学函数并评估结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17940600/

相关文章:

java - 有没有在Java中实现NavigableSet的HashSet?

java - hibernate:父级的子ID检索列表

java - Libgdx 矩形检测触摸

python - 在给定时间/样本量下,频率 f1 和 f2 之间呈指数变化的正弦波

java - ssl handShake 失败 SOAP

java - android studio Sqlite 数据库 java.lang.IllegalStateException : getDatabase called recursively

Python - 生成具有特定模式的特定排列列表(添加到 itertools)

javascript - 计算不在范围集之间的最小值

c - 编译器如何显示 float 的*不准确*值?

python - 椭圆曲线点乘有时会产生错误的结果