public Generic selfElementary() { return selfExpand(); }
public Generic substitute(@Nonnull Variable variable, @Nonnull Generic generic) { Root v = (Root) newInstance(); for (int i = 0; i < parameters.length; i++) { v.parameters[i] = parameters[i].substitute(variable, generic); } v.subscript = subscript.substitute(variable, generic); if (v.isIdentity(variable)) return generic; else return v.selfExpand(); }
public Generic expand() { Root v = (Root) newInstance(); for (int i = 0; i < parameters.length; i++) { v.parameters[i] = parameters[i].expand(); } v.subscript = subscript.expand(); return v.selfExpand(); }
public Generic selfExpand() { final Variable variable = parameters[1].variableValue(); int subscript = parameters[2].integerValue().intValue(); if (parameters[0].isPolynomial(variable)) { return new Root((UnivariatePolynomial) Polynomial.factory(variable).valueOf(parameters[0]), subscript).selfExpand(); } return expressionValue(); }
@Nonnull public Generic derivative(@Nonnull Variable variable) { if (compareTo(variable) == 0) { return JsclInteger.valueOf(1); } else { Variable t = new TechnicalVariable("t"); Generic a[] = new Generic[parameters.length]; for (int i = 0; i < parameters.length; i++) a[i] = parameters[i].derivative(variable); UnivariatePolynomial fact = (UnivariatePolynomial) Polynomial.factory(this); UnivariatePolynomial p = fact.valueof(parameters); UnivariatePolynomial q = (UnivariatePolynomial) p.derivative().multiply(t.expressionValue()).add(fact.valueof(a)); UnivariatePolynomial r = (UnivariatePolynomial) Polynomial.factory(t).valueOf(p.resultant(q)); return new Root(r.elements(), subscript).selfExpand(); } }
Generic trager(Generic a, Generic d) { Debug.println("trager(" + a + ", " + d + ")"); Variable t = new TechnicalVariable("t"); UnivariatePolynomial pd = (UnivariatePolynomial) factory.valueOf(d); UnivariatePolynomial pa = (UnivariatePolynomial) factory.valueOf(a).subtract(pd.derivative().multiply(t.expressionValue())); UnivariatePolynomial rs[] = pd.remainderSequence(pa); Polynomial fact = UnivariatePolynomial.factory(t); for (int i = 0; i < rs.length; i++) if (rs[i] != null) rs[i] = (UnivariatePolynomial) fact.valueOf((i > 0 ? rs[i].normalize() : rs[i]).genericValue()); UnivariatePolynomial q[] = rs[0].squarefreeDecomposition(); int m = q.length - 1; Generic s = JsclInteger.valueOf(0); for (int i = 1; i <= m; i++) { for (int j = 0; j < q[i].degree(); j++) { Generic a2 = new Root(q[i], j).selfExpand(); s = s.add(a2.multiply(new Ln(i == pd.degree() ? d : rs[i].substitute(a2)).selfExpand())); } } return s; }