Package jmathexpr.arithmetic.natural

Examples of jmathexpr.arithmetic.natural.NaturalNumber


        System.out.println(Q.create("-3.750"));
    }
   
    @Test(dependsOnMethods = { "testIntegerExpressions" })
    public void testVariables() {
        NaturalNumber two = N.create(2);
        Variable x = Numbers.variable("x"), a = new Variable("a", new Multiplication(two, x));
             
        for (int i = 1; i < 4; i++) {
            x.setValue(N.create(i));
            System.out.printf("  %s = %s%n", a, a.evaluate());
View Full Code Here


    }
   
    @Test
    public void testNaturalExpressions() {
        Expression evaluated;
        NaturalNumber five = N.create(5);
        NaturalNumber two = N.create(2);
        Addition seven = new Addition(five, two);
        NaturalNumber six = N.create("6");
        Expression naturalExpr = new Multiplication(six, seven);
       
        evaluated = naturalExpr.evaluate();
        System.out.printf("%s = %s%n", naturalExpr, evaluated);       
        assertEquals(evaluated, N.create(42));
View Full Code Here

     * ax^2 + bx + c it returns b^2 - 4ac.
     *
     * @return the discriminant of this polynomial
     */
    public Expression discriminant() {
        NaturalNumber two = Naturals.getInstance().create(2);
        NaturalNumber four = Naturals.getInstance().create(4);
       
        if (degree().equals(two)) {
            Expression a = coeffs.get(two);
            Expression b = coeffs.get(ONE);
            Expression c = coeffs.get(ZERO);
View Full Code Here

            throw new IllegalArgumentException("Cannot divide by 0. Dividend: " + this);
        }
       
        NavigableMap<NaturalNumber, Expression> q = new TreeMap(); // quotient
        NavigableMap<NaturalNumber, Expression> r = new TreeMap(); // reminder
        NaturalNumber bdeg = b.degree();
        Expression bc = b.leadCoefficient();
        Expression c; // next coefficient
        NaturalNumber n; // degree of the next term in q
        Expression rp, bi; // temporary variables
        NaturalNumber p; //temporary position
       
        q.put(ZERO, ZERO);
        r.putAll(this.coeffs);
       
        while (!isZero(r) && bdeg.le(r.lastKey())) {
            c = new Division(r.lastEntry().getValue(), bc).evaluate();
            n = (NaturalNumber) r.lastKey().subtract(bdeg);
           
            q.put(n, c);
           
            for (NaturalNumber i : b.coeffs.descendingKeySet()) {
                p = (NaturalNumber) n.add(i);
               
                rp = r.get(p);
                bi = b.coeffs.get(i);
               
                rp = rp != null ? new Subtraction(rp, new Multiplication(c, bi)).evaluate()
                        : new Negation(new Multiplication(c, bi)).evaluate();

                if (rp instanceof ANumber && ((ANumber) rp).isZero() && !p.isZero()) {
                    r.remove(p);
                } else {
                    r.put(p, rp);
                }
            }
View Full Code Here

   
    private NavigableMap<NaturalNumber, Expression> extractCoefficients(
            List<Expression> terms, Variable x) {
        NavigableMap<NaturalNumber, Expression> map = new TreeMap(); // order -> coefficient
        PolynomialTermPattern pt = new PolynomialTermPattern(x);
        NaturalNumber n;
        Expression c, c0;
       
        for (Expression t : terms) {
            if (pt.matches(t)) {
                n = pt.exponent();
View Full Code Here

                || (rhsIsQuadratic
                && (lhs.isConstant() || LinearEquation.isLinear(lhs, x) || lhsIsQuadratic));
    }
   
    private static boolean isQuadratic(Expression expr, Variable x) {
        NaturalNumber two = Naturals.getInstance().create(2);
        ExpressionPattern pattern = new PolynomialTermPattern(x, 2);
       
        if (pattern.matches(expr)) {
            return true;
        } else if (expr instanceof Negation) {
View Full Code Here

        } else if (l instanceof Addition || l instanceof Subtraction) { // simplifying (a +- b) / r
            if (r instanceof NaturalNumber) {
                return simplifyAdditive((BinaryOperation) l, (NaturalNumber) r);
            } else if (r instanceof IntegerNumber) {
                if (!((IntegerNumber) r).isNegative()) {
                    NaturalNumber n = ((IntegerNumber) r).toNatural();
                   
                    return simplifyAdditive((BinaryOperation) l, n);
                }
            }
        }
View Full Code Here

   
    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;
View Full Code Here

    }
   
    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) {
View Full Code Here

    private final AnyPattern denominator = new AnyPattern();
   
    @Override
    public boolean matches(Expression expr) {
        if (expr instanceof RationalNumber) {
            NaturalNumber d = ((RationalNumber) expr).denominator();
           
            return !d.isOne() && numerator.matches(((RationalNumber) expr).numerator())
                    && denominator.matches(d);
        } else if (expr instanceof Division) {
            return numerator.matches(((Division) expr).lhs())
                    && denominator.matches(((Division) expr).rhs());
        } else if (expr instanceof Multiplication) {
View Full Code Here

TOP

Related Classes of jmathexpr.arithmetic.natural.NaturalNumber

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.