Получение математического выражения с переменными из строки - PullRequest
0 голосов
/ 19 октября 2019

Я хочу создать простой Java-плоттер, в котором пользователь может ввести некоторую функцию, такую ​​как 2x + 3, в JTextField, а затем программа будет оценивать выражение в цикле for для каждого отображаемого значения x. Я уже добился того, чтобы закодировать плоттер, в котором я поместил функцию в двойное число следующим образом:

private static double f(double x){
    //here i define my expression which shell be plotted
    return 2.0*x+3.0;
}

Им я оцениваю это для многих значений x и так далее ...

Однако я не могувыяснить, как пользователь может ввести такое выражение в JTextField. Я уже пытался использовать ScriptEngine

String func = textField.getText();
//...
double x = 1.21;
double value = f(func, x);

private static double f(String in, double p){
    ScriptEngineManager m = new ScriptEngineManager();
    ScriptEngine e = m.getEngineByName("JavaScript");

    //replace the var x with its value p
    return Double.parseDouble(e.eval(in.replace("x",String.valueOf(p)));
    //this however does not work, I dont know how to handle the Object e.eval()
}

Я могу вывести значение, но я не знаю, как извлечь из него двойное значение

System.out.println(e.eval(in.replace("x",String.valueOf(p)));

Далее яне уверен, как продлить это. Например, очень важно, чтобы пользователь вводил выражение типа 2 * x, а не 2x. Я также не знаю, как заставить exp (x) работать и так далее.

Есть ли лучший способ сделать это?

Пользователь должен иметь возможность писать такие вещи, как

  • cos (x)
  • exp (cos (x ^ 2))
  • x ^ 2 / (2x-1.32)

и так далее ..

...