Esempio n. 1
0
        public virtual Algebraic ratsubst(Algebraic expr)
        {
            if (gcd.Equals(Symbol.ZERO))
            {
                return(expr);
            }

            if (!expr.Depends(vr))
            {
                return(expr);
            }

            if (expr is Rational)
            {
                return(ratsubst((( Rational )expr).nom) / ratsubst((( Rational )expr).den));
            }

            if (expr is Polynomial && (( Polynomial )expr).Var is FunctionVariable)
            {
                var pex = ( Polynomial )expr;
                var vex = ( FunctionVariable )pex.Var;

                if (vex.Name.Equals("exp") && vex.Var is Polynomial &&
                    (( Polynomial )vex.Var).Var.Equals(vr) &&
                    (( Polynomial )vex.Var).Degree() == 1 &&
                    (( Polynomial )vex.Var)[0].Equals(Symbol.ZERO))
                {
                    int degree = pex.Degree();

                    var a = new Algebraic[degree + 1];

                    for (var n = 0; n <= degree; n++)
                    {
                        var cf = pex[n];

                        if (cf.Depends(vr))
                        {
                            throw new SymbolicException("Rationalize failed: 2");
                        }

                        a[n] = cf;
                    }

                    return(new Polynomial(t, a));
                }
            }

            throw new SymbolicException("Could not rationalize " + expr);
        }
Esempio n. 2
0
        public SubstExp(Variable vr, Algebraic expr)
        {
            this.vr = vr;

            var list = new ArrayList();

            (new GetExpVars2(list)).SymEval(expr);

            gcd = Exponential.exp_gcd(list, vr);

            if (gcd.Equals(Symbol.ZERO))
            {
                t = vr;
            }
        }