|
Nestedsums library
|
#include <transcendental_A.h>
Public Member Functions | |
| transcendental_sum_type_A (const GiNaC::ex &nn, const GiNaC::ex &i, const GiNaC::ex &l, const GiNaC::ex &v, const GiNaC::ex &ss, const GiNaC::ex &eps, int o, int f) | |
| void | archive (GiNaC::archive_node &node) const override |
| void | read_archive (const GiNaC::archive_node &node, GiNaC::lst &sym_lst) override |
| unsigned | return_type (void) const override |
| void | print (const GiNaC::print_context &c, unsigned level=0) const override |
| unsigned | precedence (void) const override |
| GiNaC::ex | eval () const override |
| GiNaC::ex | subs (const GiNaC::exmap &m, unsigned options=0) const override |
| virtual GiNaC::ex | eval_explicit () const |
| virtual unsigned | get_key (void) const |
| virtual GiNaC::ex | hash_data (void) const |
| virtual GiNaC::ex | subst_data (void) const |
| GiNaC::ex | set_expansion (void) const |
| GiNaC::ex | distribute_over_subsum (void) const |
| GiNaC::ex | distribute_over_letter (void) const |
| GiNaC::ex | shift_plus_one (void) const |
| GiNaC::ex | shift_minus_one (void) const |
Protected Member Functions | |
| GiNaC::ex | eval_ncmul (const GiNaC::exvector &v) const override |
| GiNaC::ex | derivative (const GiNaC::symbol &s) const override |
| unsigned | calchash (void) const override |
Protected Attributes | |
| GiNaC::ex | n |
| GiNaC::ex | index |
| GiNaC::ex | letter |
| GiNaC::ex | lst_of_gammas |
| GiNaC::ex | subsum |
| GiNaC::ex | expansion_parameter |
| int | order |
| int | flag_expand_status |
The class transcendental_sum_type_A is a sum over a basic_letter and a product of ratio_of_tgamma . Additionally it may contain subsums of type Zsum. The definition is
![\[
\frac{\Gamma(1+d_1\varepsilon)}{\Gamma(1+b_1\varepsilon)}
\frac{\Gamma(1+d_2\varepsilon)}{\Gamma(1+b_2\varepsilon)} ...
\frac{\Gamma(1+d_k\varepsilon)}{\Gamma(1+b_k\varepsilon)}
\]](form_225.png)
![\[
\sum\limits_{i=1}^n \frac{x^i}{(i+c)^m}
\frac{\Gamma(i+a_1+b_1\varepsilon)}{\Gamma(i+c_1+d_1\varepsilon)}
\frac{\Gamma(i+a_2+b_2\varepsilon)}{\Gamma(i+c_2+d_2\varepsilon)} ...
\frac{\Gamma(i+a_k+b_k\varepsilon)}{\Gamma(i+c_k+d_k\varepsilon)}
Z(i+o-1,m_1,...,m_l,x_1,...,x_l)
\]](form_226.png)
Here, 





| ex distribute_over_letter | ( | void | ) | const |
letter is allowed to contain a sum of products (e.g. an expression in expanded form). Each term can contain scalars and basic_letters.
This routine converts the transcendental_sum_type_A to a canonical form, so that afterwards letter only contains a basic_letter.
| ex distribute_over_subsum | ( | void | ) | const |
subsum is allowed to contain a sum of products (e.g. an expression in expanded form). Each term can contain scalars, basic_letters, list_of_tgammas, Zsums or Ssums.
This routine converts the transcendental_sum_type_A to a canonical form, so that afterwards subsum only contains a Zsum.
The algorithm is based on the following steps:
|
override |
Simplifications, which are always performed are:
If flag_expand_status == expand_status::expansion_required, the evaluation routine performs a set of consistency checks:





If one of the tests fails, the object is put into a zombie state.
If flag_expand_status == expand_status::check_for_poles, it assures that the Gamma functions in the numerator do not give rise to poles (by taking out the critical part and shifting the summation index). The function shift_plus_one() is used.
If flag_expand_status == expand_status::expand_gamma_functions, the Gamma functions are expanded into Euler Zagier sums. This is done by setting the expansion_required flag in the ratio_of_tgamma class.
If flag_expand_status == expand_status::adjust_summation_index, we deal with sums of the form
![\[
\sum\limits_{i=1}^n \frac{x^i}{(i+c)^m} Z(i-1,...)
\]](form_209.png)
Here eval adjusts the offset. In the case 

If flag_expand_status == expand_status::evaluated, the sum is in the form
![\[
\sum\limits_{i=1}^n \frac{x^i}{i^m} Z(i-1,...)
\]](form_212.png)
and is converted to a Zsum.
|
virtual |
Explicit evaluation
|
overrideprotected |
No automatic simplifications
|
virtual |
The hash key is calculated from the hash_data.
|
virtual |
The summation index is a redundant variable and does not influence the hash_data.
| ex set_expansion | ( | void | ) | const |
Sets the flag flag_expand_status to expand_status::expansion_required. The object is then automatically expanded up to the order specified in the member variable order.
| ex shift_minus_one | ( | void | ) | const |
This routine assumes sums of the form
![\[
\sum\limits_{i=1}^n \frac{x^i}{(i+c)^m} Z(i-1,...)
\]](form_209.png)
and performs the substitution index -> index + 1.
If 
![\[
\sum\limits_{i=1}^n \frac{x^i}{(i+c)^m} Z(i-1,...)
=
\sum\limits_{j=0}^{-m}
\left( \begin{array}{c} -m \\ j \\ \end{array} \right)
c^{-m-j}
\sum\limits_{i=1}^n \frac{x^i}{i^{-j}} Z(i-1,...)
\]](form_218.png)
If the depth of the subsum is zero, we have
![\[
\sum\limits_{i=1}^n \frac{x^i}{(i+c)^m}
=
\frac{1}{x} \sum\limits_{i=1}^n \frac{x^i}{(i+c-1)^m}
\mbox{} - \frac{1}{c^m} Z(n-1) + \frac{x^n}{(n+c)^m} Z(n-1)
\]](form_219.png)
The last term contributes only if 
If the depth of the subsum is not equal to zero and 
![\[
\sum\limits_{i=1}^n \frac{x^i}{(i+c)^m} Z(i-1,...)
=
\frac{1}{x} \sum\limits_{i=1}^n \frac{x^i}{(i+c-1)^m} Z(i-1,...)
\mbox{} - \sum\limits_{i=1}^{n-1} \frac{x^i}{(i+c)^m} \frac{x_1^i}{i^{m_1}} Z(i-1,m_2,...)
\mbox{} + \frac{x^n}{(n+c)^m} Z(n-1,...)
\]](form_221.png)
If 
![\[
\sum\limits_{i=1}^n \frac{x^i}{(i+c)^m} Z(i-1,...)
=
\frac{1}{x} \sum\limits_{i=1}^n \frac{x^i}{(i+c-1)^m} Z(i-1,...)
\mbox{} - \sum\limits_{i=1}^{n} \frac{x^i}{(i+c)^m} \frac{x_1^i}{i^{m_1}} Z(i-1,m_2,...)
\]](form_223.png)
This routine is called from eval/adjust_summation_index only for 
| ex shift_plus_one | ( | void | ) | const |
This routine performs the substitution index -> index - 1. The formula used is
![\[
\sum_{i=1}^n \frac{x^i}{(i+c)^m} \frac{\Gamma(i+a_1+b_1 \varepsilon)}{\Gamma(i+c_1+d_1 \varepsilon)} ...
Z(i+o-1;...)
\]](form_213.png)
![\[
=
x \sum_{i=1}^n \frac{x^i}{(i+c+1)^m} \frac{\Gamma(i+a_1+1+b_1 \varepsilon)}{\Gamma(i+c_1+1+d_1 \varepsilon)} ...
Z(i+o;...)
\]](form_214.png)
![\[
+ \frac{x}{(c+1)^m} \frac{\Gamma(a_1+1+b_1 \varepsilon)}{\Gamma(c_1+1+d_1 \varepsilon)} ...
Z(o;...) Z(n-1)
\]](form_215.png)
![\[
\mbox{} - x \frac{x^n}{(n+c+1)^m} \frac{\Gamma(n+a_1+1+b_1 \varepsilon)}{\Gamma(n+c_1+1+d_1 \varepsilon)} ...
Z(n+o;...) Z(n-1)
\]](form_216.png)
This routine is called from eval/expansion_required, eval/check_for_poles and eval/adjust_summation_index.
|
virtual |
No substitutions necessary.