static ex zetaderiv_eval(const ex & n, const ex & x) { if (n.info(info_flags::numeric)) { // zetaderiv(0,x) -> zeta(x) if (n.is_zero()) return zeta(x).hold(); } return zetaderiv(n, x).hold(); }
static ex zeta1_deriv(const ex& m, unsigned deriv_param) { GINAC_ASSERT(deriv_param==0); if (is_exactly_a<lst>(m)) { return _ex0; } else { return zetaderiv(_ex1, m); } }
static ex zetaderiv_deriv(const ex & n, const ex & x, unsigned deriv_param) { GINAC_ASSERT(deriv_param<2); if (deriv_param==0) { // d/dn zeta(n,x) throw(std::logic_error("cannot diff zetaderiv(n,x) with respect to n")); } // d/dx psi(n,x) return zetaderiv(n+1,x); }
static ex zeta2_deriv(const ex& m, const ex& s, unsigned deriv_param) { GINAC_ASSERT(deriv_param==0); if (is_exactly_a<lst>(m)) { return _ex0; } else { if ((is_exactly_a<lst>(s) && s.op(0).info(info_flags::positive)) || s.info(info_flags::positive)) { return zetaderiv(_ex1, m); } return _ex0; } }