]> www.ginac.de Git - ginac.git/blobdiff - ginac/inifcns.cpp
added example for namespace bracing
[ginac.git] / ginac / inifcns.cpp
index 7b9a0c68d3e5f7e0f75027a3a6b38aacc08b3dc7..443022a556da6c9f48e062e2381b4be05b0e0ae3 100644 (file)
@@ -59,8 +59,21 @@ static ex abs_eval(const ex & arg)
                return abs(arg).hold();
 }
 
+static void abs_print_latex(const ex & arg, const print_context & c)
+{
+       c.s << "{|"; arg.print(c); c.s << "|}";
+}
+
+static void abs_print_csrc_float(const ex & arg, const print_context & c)
+{
+       c.s << "fabs("; arg.print(c); c.s << ")";
+}
+
 REGISTER_FUNCTION(abs, eval_func(abs_eval).
-                       evalf_func(abs_evalf));
+                       evalf_func(abs_evalf).
+                       print_func<print_latex>(abs_print_latex).
+                       print_func<print_csrc_float>(abs_print_csrc_float).
+                       print_func<print_csrc_double>(abs_print_csrc_float));
 
 
 //////////
@@ -355,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
 //////////