def mittag_leffler_e(alpha, beta=1): alpha = QQ.coerce(alpha) if alpha <= QQ.zero(): raise ValueError num, den = alpha.numerator(), alpha.denominator() dop0 = prod(alpha * x * Dx + beta - num + t for t in range(num)) - x**den expo = dop0.indicial_polynomial(x).roots(QQ, multiplicities=False) pre = prod((x * Dx - k) for k in range(den) if QQ(k) not in expo) dop = pre * dop0 # homogenize dop = dop.numerator().primitive_part() expo = sorted(dop.indicial_polynomial(x).roots(QQ, multiplicities=False)) assert len(expo) == dop.order() ini = [(1 / funs.gamma(alpha * k + beta) if k in ZZ else 0) for k in expo] return IVP(0, dop, ini)