Package jmathexpr

Examples of jmathexpr.Expression


        super(lhs, rhs, Sign.Division);
    }

    @Override
    public Expression evaluate() {
        Expression simplified = simplify();
       
        if (!(simplified instanceof Division)) return simplified;
       
        Expression l = ((Division) simplified).lhs;
        Expression r = ((Division) simplified).rhs;

        if (l instanceof ANumber && r instanceof ANumber) {
            if (((ANumber) r).isZero()) {
                throw new IllegalArgumentException("Division by 0");
            } else {
View Full Code Here


       
        return new Division(l, r);
    }

    private Expression simplify() {
        Expression l = lhs.evaluate();
        Expression r = rhs.evaluate();
       
        if (l.equals(r) && !(r instanceof ANumber && ((ANumber) r).isZero())) { // a/a = 1 (a != 0)
            return Naturals.one();
        }
       
        if (l instanceof Multiplication) {
            Multiplication dividend = (Multiplication) l;

            if (dividend.lhs().equals(r)) { // simplification of a*b/a
                return dividend.rhs();
            } else if (dividend.rhs().equals(r)) { // simplification of b*a/a
                return dividend.lhs();
            }
        } else if (l instanceof Division) { // (a / b) / c = a / (bc)
            Expression a = ((Division) l).lhs();
            Expression b = ((Division) l).rhs();
           
            return new Division(a, new Multiplication(b, r)).evaluate();
        } else if (l instanceof Negation) { // -(a)/b = -(a/b)
            return new Negation(new Division(((Negation) l).getChild(), r)).evaluate();
        } else if (l instanceof Addition || l instanceof Subtraction) { // simplifying (a +- b) / r
View Full Code Here

        return new Division(l, r);
    }
   
    private Expression simplifyAdditive(BinaryOperation sum, NaturalNumber denominator) {
        PrimeFactorization factors = denominator.factorize();
        Expression l = sum.lhs();
        Expression r = sum.rhs();
        NaturalNumber divisor = Naturals.one();
       
        for (NaturalNumber p : factors.primeFactors()) {
            if (isDivisibleBy(l, p) && isDivisibleBy(r, p)) {
                l = new Division(l, p).evaluate();
                r = new Division(r, p).evaluate();
                divisor = (NaturalNumber) divisor.multiply(p);
            }
        }
       
        ANumber simplifiedDenominator = denominator.divide(divisor);
        Expression numerator;
       
        if (sum instanceof Addition) {
            numerator = new Addition(l, r).evaluate();
        } else if (sum instanceof Subtraction) {
            numerator = new Subtraction(l, r).evaluate();
View Full Code Here

        @Override
        public boolean matches(Expression expr) {
            p = (Polynomial) ((Equality) expr).lhs();
           
            Expression linear = p.getCoefficient(1);

            return linear instanceof ANumber && ((ANumber) linear).isZero();
        }
View Full Code Here

            return linear instanceof ANumber && ((ANumber) linear).isZero();
        }

        @Override
        public Expression apply() {
            Expression a = p.getCoefficient(2);
            Expression c = p.getCoefficient(0);
           
            if (c instanceof ANumber) {
                if (((ANumber) c).isZero()) {
                    Expression x1 = Naturals.zero();
                   
                    ExpressionContext.getInstance().addExpression(new Equality(x, x1));
                   
                    return new FiniteSet(x1);
                } else if (!((ANumber) c).isNegative()) {
                    return new EmptySet();
                }
            }
           
            Expression x1 = new Sqrt(new Division(new Negation(c), a));
            Expression x2 = new Negation(x1);
           
            ExpressionContext.getInstance().addExpression(new Equality(Numbers.variable("x", 1), x1));
            ExpressionContext.getInstance().addExpression(new Equality(Numbers.variable("x", 2), x2));
           
            x1 = x1.evaluate();
            x2 = x2.evaluate();
           
            ExpressionContext.getInstance().addExpression(new Equality(Numbers.variable("x", 1), x1));
            ExpressionContext.getInstance().addExpression(new Equality(Numbers.variable("x", 2), x2));
           
            return new FiniteSet(x1, x2);
View Full Code Here

    }

    @Override
    public Expression evaluate() {
        List<NaturalNumber> naturals = new ArrayList();
        Expression n;
       
        for (int i = 1; i <= args.length(); i++) {
            n = args.at(i);
           
            if (n instanceof NaturalNumber) {
View Full Code Here

        @Override
        public boolean matches(Expression expr) {
            p = (Polynomial) ((Equality) expr).lhs();
           
            Expression constant = p.getTerm(Naturals.zero());

            return constant instanceof ANumber && ((ANumber) constant).isZero();
        }
View Full Code Here

        return rhs;
    }
   
    @Override
    public Expression evaluate() {
        Expression simplified = simplify();
       
        if (!(simplified instanceof Exponentiation)) return simplified;
       
        Expression base = ((Exponentiation) simplified).lhs;
        Expression exp = ((Exponentiation) simplified).rhs;
       
        if (base instanceof ANumber && exp instanceof ANumber) {
            return ((ANumber) base).pow((ANumber) exp);
        }
View Full Code Here

        return new Exponentiation(base, exp);
    }
   
    private Expression simplify() {
        Expression base = lhs.evaluate();
        Expression exp = rhs.evaluate();
        NaturalNumber two = Naturals.getInstance().create(2);
       
        if (exp.equals(two)) {
            if (base instanceof Sqrt) {
                return ((Sqrt) base).argument();
            } else if (base instanceof Addition) {
                Expression a = ((Addition) base).lhs();
                Expression b = ((Addition) base).rhs();

                return new Sum(new Exponentiation(a, two), new Exponentiation(b, two),
                        new Multiplication(two, new Multiplication(a, b))).evaluate();
            } else if (base instanceof Subtraction) {
                Expression a = ((Subtraction) base).lhs();
                Expression b = ((Subtraction) base).rhs();

                return new Sum(new Exponentiation(a, two), new Exponentiation(b, two),
                        new Negation(new Multiplication(two, new Multiplication(a, b)))).evaluate();
            } else if (base instanceof Negation) {
                return new Exponentiation(((Negation) base).getChild(), exp).evaluate();
            }
        }
       
        if (base instanceof Multiplication) {
            Expression a = ((Multiplication) base).lhs();
            Expression b = ((Multiplication) base).rhs();

            return new Multiplication(new Exponentiation(a, exp),
                    new Exponentiation(b, exp)).evaluate();
        } else if (base instanceof Division) {
            Expression a = ((Division) base).lhs();
            Expression b = ((Division) base).rhs();

            return new Division(new Exponentiation(a, exp),
                    new Exponentiation(b, exp)).evaluate();
        }
       
View Full Code Here

    }

    @Override
    public boolean isApplicable(Rule rule) {
        boolean isApplicable = false;
        Expression transformed = this;
       
        if (rule.isRecursive()) {
            if (operand.isApplicable(rule)) {
                isApplicable = true;
                transformed = create(rule.subapply());
View Full Code Here

TOP

Related Classes of jmathexpr.Expression

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.