Задача Явакалькулята с вычислением выводов - PullRequest
0 голосов
/ 02 марта 2019

У меня проблема с библиотекой javacalculus:

Javacalculus работает нормально, но

Если число переменных нечетное (3, 5, 7, 9, ..), производная не вычисляетсяи нет вывода

Если я ввожу 3 умноженные переменные (p1 * p2 * p3), это не будет работать.

Если я введу умноженные 4 переменные (p1 * p2 * p3 * p4), ОНО РАБОТАЕТ.

Если я введу 5 умноженных переменных (p1 * p2 * p3 * p4 * p5), это не сработает

Если я введу 6 переменных, умноженных (p1 * p2 * p3 * p4 * p5)* p6), ЭТО РАБОТАЕТ.

Кто-нибудь знает, где может быть проблема с ним?

Вот мой код:

import java.util.Scanner;
import javacalculus.core.CALC;
import javacalculus.core.CalcParser;
import javacalculus.evaluator.CalcSUB;
import javacalculus.struct.CalcDouble;
import javacalculus.struct.CalcObject;
import javacalculus.struct.CalcSymbol;

public class Main {

    public static void main(String[] args) throws Exception {

        Scanner in = new Scanner(System.in);

        System.out.println("Enter expression:");
        String expression = in.nextLine();
        // javacalculus uses uppercase function names

        System.out.println("Differentiate with respect to:");
        String variable = in.nextLine();

        // differentiate
        String command = "DIFF(" + expression + ", " + variable + ")";
        CalcParser parser = new CalcParser();
        CalcObject parsed = parser.parse(command);
        CalcObject result = parsed.evaluate();

        // compute numerical value
        result = subst(result, "p1", 1-0.069727798);
        result = subst(result, "p2", 1-0.205574309);
        result = subst(result, "p3", 1-0.022450503);
        result = subst(result, "p4", 1-0.010557907);
        result = CALC.SYM_EVAL(result);

        System.out.println("Result:");
        System.out.println(result);
    }

    static CalcObject subst(CalcObject input, String var, double number)
    {
        CalcSymbol symbol = new CalcSymbol(var);
        CalcDouble value = new CalcDouble(number);
        return CalcSUB.numericSubstitute(input, symbol, value);
    }
}
...