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); }
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; } }
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); }
internal override Zahl f(Zahl x) { return(x.Equals(Zahl.ZERO) ? Zahl.ONE : Zahl.ZERO); }