Beispiel #1
0
    public static Algebraic[] reduce_exp(Algebraic[] p)
    {
        ArrayList   v    = new ArrayList();
        ArrayList   vars = new ArrayList();
        GetExpVars2 g    = new GetExpVars2(v);

        for (int i = 0; i < p.Length; i++)
        {
            g.f_exakt(p[i]);
        }
        for (int i = 0; i < v.Count; i++)
        {
            Algebraic a = (Algebraic)v[i];
            Variable  x = null;
            if (a is Polynomial)
            {
                x = ((Polynomial)a).v;
            }
            else
            {
                continue;
            }
            if (vars.Contains(x))
            {
                continue;
            }
            else
            {
                vars.Add(x);
            }
            Zahl gcd = exp_gcd(v, x);
            if (!gcd.Equals(Zahl.ZERO) && !gcd.Equals(Zahl.ONE))
            {
                SubstExp sb = new SubstExp(gcd, x);
                for (int k = 0; k < p.Length; k++)
                {
                    p[k] = sb.f_exakt(p[k]);
                }
            }
        }
        return(p);
    }
Beispiel #2
0
    public SubstExp(Variable @var, Algebraic expr)
    {
        this.@var = @var;
        ArrayList v = new ArrayList();

        (new GetExpVars2(v)).f_exakt(expr);
        this.gcd = Exponential.exp_gcd(v, @var);
        if (gcd.Equals(Zahl.ZERO))
        {
            t = @var;
        }
    }
Beispiel #3
0
    public virtual Algebraic ratsubst(Algebraic expr)
    {
        if (gcd.Equals(Zahl.ZERO))
        {
            return(expr);
        }
        if (!expr.depends(@var))
        {
            return(expr);
        }
        if (expr is Rational)
        {
            return(ratsubst(((Rational)expr).nom).div(ratsubst(((Rational)expr).den)));
        }

        if (expr is Polynomial && ((Polynomial)expr).v is FunctionVariable &&
            ((FunctionVariable)((Polynomial)expr).v).fname.Equals("exp") &&
            ((FunctionVariable)((Polynomial)expr).v).arg is Polynomial &&
            ((Polynomial)((FunctionVariable)((Polynomial)expr).v).arg).v.Equals(@var) &&
            ((Polynomial)((FunctionVariable)((Polynomial)expr).v).arg).degree() == 1 &&
            ((Polynomial)((FunctionVariable)((Polynomial)expr).v).arg).a[0].Equals(Zahl.ZERO))
        {
            Polynomial  pexpr  = (Polynomial)expr;
            int         degree = pexpr.degree();
            Algebraic[] a      = new Algebraic[degree + 1];
            for (int i = 0; i <= degree; i++)
            {
                Algebraic cf = pexpr.a[i];
                if (cf.depends(@var))
                {
                    throw new JasymcaException("Rationalize failed: 2");
                }
                a[i] = cf;
            }
            return(new Polynomial(t, a));
        }
        throw new JasymcaException("Could not rationalize " + expr);
    }
Beispiel #4
0
 internal override Zahl f(Zahl x)
 {
     return(x.Equals(Zahl.ZERO) ? Zahl.ONE : Zahl.ZERO);
 }