Main Page | Namespace List | Class Hierarchy | Class List | File List | Namespace Members | Class Members

transcendental_sum_type_A Class Reference

#include <transcendental_A.h>

List of all members.

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


Detailed Description

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)} \]

\[ \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) \]

Here, $c$, $o$ and all $a_j$ and $c_j$ are integers. In addition $c$ is non-negative or $ c \ge -l+o $.


Member Function Documentation

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:

  • If an object is of type basic_letter and the difference of its index with the index member is an integer, it is combined with the letter member. Otherwise it is taken out of the sum.

  • If an object is of type list_of_tgamma and the difference of its index with the index member is an integer, it is combined with the lst_of_gammas member. Otherwise it is taken out of the sum.

  • If an object is of type Zsum and the difference of its index with the index member is an integer, it is stays inside the subsum. Otherwise it is taken out of the sum.

  • If an object is of type Ssum and the difference of its index with the index member is an integer, it is converted to an Zsum and stays inside the subsum. Otherwise it is taken out of the sum.

ex eval int  level = 0  )  const
 

Simplifications, which are always performed are:

  • If subsum is equal to 1, the subsum is replaced with Z(i-1).

  • If subsum is not of type Zsum, the routine distribute_over_subsum is called.

  • If the difference of the upper summation index of the Zsum with the index member is not an integer, the Zsum is taken out of the sum. The subsum is replaced with Z(i-1).

  • If letter is not of type basic_letter, the routine distribute_over_letter is called.

  • If the difference of the index of the basic_letter with the index member is not zero, the index in basic_letter is adjusted.

  • If the difference of the index of lst_of_gammas with the index member is not zero, the index in lst_of_gammas is adjusted.

If flag_expand_status == expand_status::expansion_required, the evaluation routine performs a set of consistency checks:

  • It adjusts the upper summation limit in subsum to index-1. If $ o > 0 $ the function Zsum::adjust_upper_limit_downwards(index-1) is used. If $ o < 0 $ the function shift_plus_one() is called.

  • It checks, that letter does not give rise to poles (e.g. that the offset $c$ is a non-negative integer or a negative integer larger or equal to $c \ge -l+o $).

  • It checks, that the $a_j$ in the Gamma functions are integers.

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,...) \]

Here eval adjusts the offset. In the case $c > 0$ 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 $c < 0$ shift_plus_one() is called.

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,...) \]

and is converted to a Zsum.

ex eval_explicit int  level = 0  )  const [virtual]
 

Explicit evaluation

ex eval_ncmul const GiNaC::exvector &  v  )  const [protected]
 

No automatic simplifications

unsigned get_key void   )  const [virtual]
 

The hash key is calculated from the hash_data.

ex hash_data void   )  const [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,...) \]

and performs the substitution index -> index + 1.

If $m \le 0 $ we use the binomial formula

\[ \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,...) \]

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) \]

The last term contributes only if $n$ is not equal to infinity.

If the depth of the subsum is not equal to zero and $n \neq \infty $, we have

\[ \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,...) \]

If $n = \infty $ we have instead

\[ \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,...) \]

This routine is called from eval/adjust_summation_index only for $c>0$.

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;...) \]

\[ = 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;...) \]

\[ + \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) \]

\[ \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) \]

This routine is called from eval/expansion_required, eval/check_for_poles and eval/adjust_summation_index.

ex subst_data void   )  const [virtual]
 

No substitutions necessary.


The documentation for this class was generated from the following files:
Generated on Wed Jun 10 22:59:11 2009 for Nestedsums library by doxygen 1.3.7