]> www.ginac.de Git - ginac.git/blobdiff - ginac/inifcns_gamma.cpp
Be more careful with conjugate(f(x)) -> f(conjugate(x)).
[ginac.git] / ginac / inifcns_gamma.cpp
index 0fabbca7157a7bfc5363a203ebbdd4a3fc7fd362..46c8ea9e00e717652b188a0979f18224bc639fa0 100644 (file)
@@ -110,10 +110,26 @@ static ex lgamma_series(const ex & arg,
 }
 
 
+static ex lgamma_conjugate(const ex & x)
+{
+       // conjugate(lgamma(x))==lgamma(conjugate(x)) unless on the branch cut
+       // which runs along the negative real axis.
+       if (x.info(info_flags::positive)) {
+               return lgamma(x);
+       }
+       if (is_exactly_a<numeric>(x) &&
+           !x.imag_part().is_zero()) {
+               return lgamma(x.conjugate());
+       }
+       return conjugate_function(lgamma(x)).hold();
+}
+
+
 REGISTER_FUNCTION(lgamma, eval_func(lgamma_eval).
                           evalf_func(lgamma_evalf).
                           derivative_func(lgamma_deriv).
                           series_func(lgamma_series).
+                          conjugate_func(lgamma_conjugate).
                           latex_name("\\log \\Gamma"));
 
 
@@ -207,10 +223,18 @@ static ex tgamma_series(const ex & arg,
 }
 
 
+static ex tgamma_conjugate(const ex & x)
+{
+       // conjugate(tgamma(x))==tgamma(conjugate(x))
+       return tgamma(x.conjugate());
+}
+
+
 REGISTER_FUNCTION(tgamma, eval_func(tgamma_eval).
                           evalf_func(tgamma_evalf).
                           derivative_func(tgamma_deriv).
                           series_func(tgamma_series).
+                          conjugate_func(tgamma_conjugate).
                           latex_name("\\Gamma"));
 
 
@@ -329,7 +353,7 @@ REGISTER_FUNCTION(beta, eval_func(beta_eval).
                         derivative_func(beta_deriv).
                         series_func(beta_series).
                         latex_name("\\mathrm{B}").
-                                               set_symmetry(sy_symm(0, 1)));
+                        set_symmetry(sy_symm(0, 1)));
 
 
 //////////