如何以代数方式展开数学运算字符串



假设我有

String equation = "-2(3u-x)-v"

from user input

我想知道是否有一个库可以将其转换为:6 u + 2 xv

我似乎找不到任何,因此我自己解决了这个问题,但它似乎有很多工作,我做得很低效(我只考虑u, x和v)。

下面我修改了列表,将整数分组,以便于乘法。

char[] charArray = equation.toCharArray();
ArrayList<String> eq= new ArrayList<String>();

    for (int i = 0; i <= charArray.length-1; i++) {
        if (charArray[i] == 'x' || charArray[i] == 'u' || charArray[i] == 'v') {
            eq.add(String.valueOf(charArray[i]));
        }
        else if (charArray[i] == '-' || charArray[i] == '+') {
            int x = 1;
            if (charArray[i+1] != 'u' && charArray[i+1] != 'v' && charArray[i+1] != 'x')
                x = charArray[i+1]-48;
            if (charArray[i] == '-')
                x = x*-1;
            eq.add(String.valueOf(x));
        }
        else if (charArray[i] == '(' || charArray[i] == ')' || charArray[i] == '=') {
            eq.add(String.valueOf(charArray[i]));
        }
    }

PS我刚开始编程,所以它可能看起来不专业,抱歉

使用Symja库,您可以像这样展开表达式:

package org.matheclipse.core.examples;
import static org.matheclipse.core.expression.F.*;
import org.matheclipse.core.eval.ExprEvaluator;
import org.matheclipse.core.interfaces.IAST;
import org.matheclipse.core.interfaces.IExpr;
import org.matheclipse.parser.client.SyntaxError;
import org.matheclipse.parser.client.math.MathException;
public class SO_ExpandExample {
    public static void main(String[] args) {
        try {
            ExprEvaluator util = new ExprEvaluator(false, 100);
            // expand an expression by using Expand() or ExpandAll() function
            IExpr result = util.evaluate("ExpandAll(-2(3u-x)-v)");
            // print: -6*u-v+2*x
            System.out.println(result.toString());
            // Show an expression in the Java form:
            String javaForm = util.toJavaForm("ExpandAll(-2(3u-x)-v)");
            // prints: ExpandAll(Plus(Times(CN2,Plus(Times(C3,u),Negate(x))),Negate(v)))
            System.out.println(javaForm.toString());
            // use the JavaForm:
            IAST function = ExpandAll(Plus(Times(CN2, Plus(Times(C3, u), Negate(x))), Negate(v)));
            result = util.evaluate(function);
            // print: -6*u-v+2*x
            System.out.println(result.toString());
        } catch (SyntaxError e) {
            // catch Symja parser errors here
            System.out.println(e.getMessage());
        } catch (MathException me) {
            // catch Symja math errors here
            System.out.println(me.getMessage());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

最新更新