#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 |
| void | read_archive (const GiNaC::archive_node &node, GiNaC::lst &sym_lst) |
| unsigned | return_type (void) const |
| void | print (const GiNaC::print_context &c, unsigned level=0) const |
| unsigned | precedence (void) const |
| GiNaC::ex | eval (int level=0) const |
| GiNaC::ex | subs (const GiNaC::exmap &m, unsigned options=0) const |
| virtual GiNaC::ex | eval_explicit (int level=0) 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 |
| GiNaC::ex | derivative (const GiNaC::symbol &s) const |
| unsigned | calchash (void) const |
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 |
Here,
,
and all
and
are integers. In addition
is non-negative or
.
|
|
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. |
|
|
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:
|
|
|
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 If flag_expand_status == expand_status::evaluated, the sum is in the form
and is converted to a Zsum. |
|
|
Explicit evaluation |
|
|
No automatic simplifications |
|
|
The hash key is calculated from the hash_data. |
|
|
The summation index is a redundant variable and does not influence the hash_data. |
|
|
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. |
|
|
This routine assumes sums of the form
and performs the substitution index -> index + 1.
If
If the depth of the subsum is zero, we have
The last term contributes only if
If the depth of the subsum is not equal to zero and
If
This routine is called from eval/adjust_summation_index only for |
|
|
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. |
|
|
No substitutions necessary. |
1.3.7