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
Here, , and all and are integers. In addition is non-negative or .
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
Here eval adjusts the offset. In the case the function shift_minus_one() is called. The function shift_minus_one() does not change the upper summation limit of the subsum (this avoids an infinite recursion). In the case shift_plus_one() is called.
If flag_expand_status == expand_status::evaluated, the sum is in the form
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
and performs the substitution index -> index + 1.
If we use the binomial formula
If the depth of the subsum is zero, we have
The last term contributes only if is not equal to infinity.
If the depth of the subsum is not equal to zero and , we have
If we have instead
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
This routine is called from eval/expansion_required, eval/check_for_poles and eval/adjust_summation_index.
|
virtual |
No substitutions necessary.