From def23d34c68a383ce3d7da0227b984c8291a3bf9 Mon Sep 17 00:00:00 2001 From: Jens Vollinga Date: Mon, 17 Nov 2003 22:16:08 +0000 Subject: [PATCH] * zeta(n,x) is now zetaderiv(n,s) --- ginac/Makefile.am | 2 +- ginac/inifcns.cpp | 31 +++++++++++++++++++ ginac/inifcns.h | 26 ++++++++-------- ginac/inifcns_zeta.cpp | 70 ------------------------------------------ 4 files changed, 45 insertions(+), 84 deletions(-) delete mode 100644 ginac/inifcns_zeta.cpp diff --git a/ginac/Makefile.am b/ginac/Makefile.am index 520ca4b6..6b6604d6 100644 --- a/ginac/Makefile.am +++ b/ginac/Makefile.am @@ -4,7 +4,7 @@ lib_LTLIBRARIES = libginac.la libginac_la_SOURCES = add.cpp archive.cpp basic.cpp clifford.cpp color.cpp \ constant.cpp ex.cpp expair.cpp expairseq.cpp exprseq.cpp fail.cpp \ fderivative.cpp function.cpp idx.cpp indexed.cpp inifcns.cpp \ - inifcns_trans.cpp inifcns_zeta.cpp inifcns_gamma.cpp inifcns_nstdsums.cpp \ + inifcns_trans.cpp inifcns_gamma.cpp inifcns_nstdsums.cpp \ lst.cpp matrix.cpp mul.cpp ncmul.cpp normal.cpp numeric.cpp operators.cpp \ power.cpp registrar.cpp relational.cpp remember.cpp pseries.cpp print.cpp \ structure.cpp symbol.cpp symmetry.cpp tensor.cpp utils.cpp wildcard.cpp \ diff --git a/ginac/inifcns.cpp b/ginac/inifcns.cpp index e9c93938..443022a5 100644 --- a/ginac/inifcns.cpp +++ b/ginac/inifcns.cpp @@ -368,6 +368,37 @@ static ex Li3_eval(const ex & x) REGISTER_FUNCTION(Li3, eval_func(Li3_eval). latex_name("\\mbox{Li}_3")); +////////// +// Derivatives of Riemann's Zeta-function zetaderiv(0,x)==zeta(x) +////////// + +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); + } + + return zetaderiv(n, x).hold(); +} + +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); +} + +REGISTER_FUNCTION(zetaderiv, eval_func(zetaderiv_eval). + derivative_func(zetaderiv_deriv). + latex_name("\\zeta^\\prime")); + ////////// // factorial ////////// diff --git a/ginac/inifcns.h b/ginac/inifcns.h index 3531c8a0..e68bd175 100644 --- a/ginac/inifcns.h +++ b/ginac/inifcns.h @@ -88,6 +88,9 @@ DECLARE_FUNCTION_1P(Li2) /** Trilogarithm. */ DECLARE_FUNCTION_1P(Li3) +/** Derivatives of Riemann's Zeta-function. */ +DECLARE_FUNCTION_2P(zetaderiv) + // overloading at work: we cannot use the macros here /** Multiple zeta value including Riemann's zeta-function. */ class zeta1_SERIAL { public: static unsigned serial; }; @@ -95,7 +98,7 @@ template inline function zeta(const T1 & p1) { return function(zeta1_SERIAL::serial, ex(p1)); } -/** Derivatives of Riemann's Zeta-function. */ +/** Alternating Euler sum or colored MZV. */ class zeta2_SERIAL { public: static unsigned serial; }; template inline function zeta(const T1 & p1, const T2 & p2) { @@ -107,6 +110,15 @@ template<> inline bool is_the_function(const ex & x) return is_the_function(x) || is_the_function(x); } +/** Polylogarithm and multiple polylogarithm. */ +DECLARE_FUNCTION_2P(Li) + +/** Nielsen's generalized polylogarithm. */ +DECLARE_FUNCTION_3P(S) + +/** Harmonic polylogarithm. */ +DECLARE_FUNCTION_2P(H) + /** Gamma-function. */ DECLARE_FUNCTION_1P(lgamma) DECLARE_FUNCTION_1P(tgamma) @@ -142,18 +154,6 @@ DECLARE_FUNCTION_2P(binomial) /** Order term function (for truncated power series). */ DECLARE_FUNCTION_1P(Order) -/** Polylogarithm and multiple polylogarithm. */ -DECLARE_FUNCTION_2P(Li) - -/** Nielsen's generalized polylogarithm. */ -DECLARE_FUNCTION_3P(S) - -/** Harmonic polylogarithm. */ -DECLARE_FUNCTION_2P(H) - -/** Multiple zeta value. */ -DECLARE_FUNCTION_1P(mZeta) - ex lsolve(const ex &eqns, const ex &symbols, unsigned options = solve_algo::automatic); /** Check whether a function is the Order (O(n)) function. */ diff --git a/ginac/inifcns_zeta.cpp b/ginac/inifcns_zeta.cpp deleted file mode 100644 index 2dba976b..00000000 --- a/ginac/inifcns_zeta.cpp +++ /dev/null @@ -1,70 +0,0 @@ -/** @file inifcns_zeta.cpp - * - * Implementation of the Zeta-function and some related stuff. */ - -/* - * GiNaC Copyright (C) 1999-2003 Johannes Gutenberg University Mainz, Germany - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include - -#include "inifcns.h" -#include "constant.h" -#include "numeric.h" -#include "power.h" -#include "symbol.h" -#include "operators.h" -#include "utils.h" - -namespace GiNaC { - -////////// -// Derivatives of Riemann's Zeta-function zeta(0,x)==zeta(x) -////////// - -static ex zeta2_eval(const ex & n, const ex & x) -{ - if (n.info(info_flags::numeric)) { - // zeta(0,x) -> zeta(x) - if (n.is_zero()) - return zeta(x); - } - - return zeta(n, x).hold(); -} - -static ex zeta2_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 zeta(n,x) with respect to n")); - } - // d/dx psi(n,x) - return zeta(n+1,x); -} - -unsigned zeta2_SERIAL::serial = - function::register_new(function_options("zeta"). - eval_func(zeta2_eval). - derivative_func(zeta2_deriv). - latex_name("\\zeta"). - overloaded(2)); - -} // namespace GiNaC -- 2.44.0