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

Zsum Class Reference

Zsums form a Hopf algebra. More...

#include <Zsum.h>

Inheritance diagram for Zsum:

Euler_Zagier_sum multiple_polylog multiple_zeta_value harmonic_polylog multiple_zeta_value nielsen_polylog classical_polylog List of all members.

Public Member Functions

 Zsum (const GiNaC::ex &nc)
 Zsum (const GiNaC::ex &nc, const GiNaC::ex &llc)
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 convert_to_Ssum_exvector (const GiNaC::exvector &Z0, const GiNaC::exvector &Z1) const
virtual GiNaC::ex shuffle_exvector (const GiNaC::exvector &Z0, const GiNaC::exvector &Z1, const GiNaC::exvector &Z2) const
virtual GiNaC::ex set_index (const GiNaC::ex &i) const
virtual GiNaC::ex shift_plus_one (void) const
virtual GiNaC::ex shift_minus_one (void) const
virtual GiNaC::ex adjust_upper_limit_downwards (const GiNaC::ex &i) const
virtual GiNaC::ex adjust_upper_limit_upwards (const GiNaC::ex &i) const
virtual GiNaC::ex adjust_upper_limit_plus_one (void) const
virtual GiNaC::ex index_eq_one (void) const
virtual GiNaC::ex get_head (int k) const
virtual GiNaC::ex get_tail (int k) const
virtual GiNaC::ex antipode (void) const
virtual GiNaC::ex expand_members (int level=0) const
virtual GiNaC::ex eval_explicit (int level=0) const
virtual GiNaC::ex get_first_letter (void) const
virtual GiNaC::ex remove_first_letter (void) const
virtual GiNaC::ex remove_first_letter (const GiNaC::ex &nc) const
virtual GiNaC::ex prepend_letter (const GiNaC::ex &lc) const
virtual GiNaC::ex prepend_letter (const GiNaC::ex &nc, const GiNaC::ex &lc) const
virtual GiNaC::ex append_letter (const GiNaC::ex &lc) const
virtual GiNaC::ex append_letter_list (const GiNaC::ex &lc) const
GiNaC::ex get_index (void) const
GiNaC::ex get_letter_list (void) const
unsigned get_depth (void) const
GiNaC::ex get_weight (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
virtual GiNaC::ex cast_to_Ssum (void) const
virtual GiNaC::ex multiply_letter_with_last_letter (const GiNaC::ex &lc) const
virtual GiNaC::ex multiply_letter_with_first_letter (const GiNaC::ex &lc) const
virtual GiNaC::ex concat_two_sums (const GiNaC::ex &Z1, const GiNaC::ex &Z2) const

Protected Attributes

GiNaC::ex n
GiNaC::ex letter_list

Friends

GiNaC::ex shuffle_Zsum (const GiNaC::ex &Z1, const GiNaC::ex &Z2)
GiNaC::ex convert_Zsum_to_Ssum (const GiNaC::ex &Z1)
GiNaC::ex remove_trivial_Zsum (const GiNaC::ex &expr)

Detailed Description

Zsums form a Hopf algebra.

A Zsum is recursively defined by

\[ Z(n;m_1,...,m_k;x_1,...,x_k) = \sum\limits_{i=1}^n \frac{x_1^i}{i^{m_1}} Z(i-1;m_2,...,m_k;x_2,...,x_k) \]

with

\[ Z(n) = 1 \]

for $ n \ge 0 $ and

\[ Z(n) = 0 \]

for $ n < 0 $

All letters should have their index set to _default_index.


Member Function Documentation

ex adjust_upper_limit_downwards const GiNaC::ex &  i  )  const [virtual]
 

Adjusts the upper summation limit $n$ down to $i$, e.g.

\[ Z(n;m_1,...;x_1,...) = Z(i;m_1,...;x_1,...) + \sum\limits_{j=1}^{n-i} x_1^j \frac{x_1^i}{(i+j)^{m_1}} Z(i-1+j;m_2,...;x_2,...) \]

with $n > i $.

For the empty sum we have

\[ Z(n) = Z(i) \]

This routine assumes $ i \ge 0 $.

Reimplemented in Euler_Zagier_sum.

ex adjust_upper_limit_plus_one void   )  const [virtual]
 

Adjusts the upper summation limit $n$ to $n+1$, e.g.

\[ Z(n;m_1,...;x_1,...) = Z(n+1;m_1,...;x_1,...) \mbox{} - \frac{x_1^{n+1}}{(n+1)^{m_1}} Z(n;m_2,...;x_2,...). \]

Reimplemented in Euler_Zagier_sum.

ex adjust_upper_limit_upwards const GiNaC::ex &  i  )  const [virtual]
 

Adjusts the upper summation limit $n$ up to $i$, e.g.

\[ Z(n;m_1,...;x_1,...) = Z(i;m_1,...;x_1,...) \mbox{} - \sum\limits_{j=0}^{i-n-1} x_1^{-j} \frac{x_1^i}{(i-j)^{m_1}} Z(i-j-1;m_2,...;x_2,...) \]

with $n < i $.

For the empty sum we have

\[ Z(n) = Z(i) \]

This routine assumes $ n \ge 0 $.

This routine might give rise to poles for some values of $i$ and should be used with care.

Reimplemented in Euler_Zagier_sum.

ex antipode void   )  const [virtual]
 

Calculates the antipode.

Only for Zsums.

ex append_letter const GiNaC::ex &  lc  )  const [virtual]
 

Appends the letter lc to the letter_list.

ex append_letter_list const GiNaC::ex &  lc  )  const [virtual]
 

Appends the list lc to the letter_list.

ex cast_to_Ssum void   )  const [protected, virtual]
 

Creates a Ssum with the same upper summation index and the same letter_list.

This is a crude cast, something like reinterpret_cast.

ex concat_two_sums const GiNaC::ex &  Z1,
const GiNaC::ex &  Z2
const [protected, virtual]
 

Takes Z1 as head and Z2 as tail and forms a new sum as the concatenation of the two.

ex convert_to_Ssum_exvector const GiNaC::exvector &  Z0,
const GiNaC::exvector &  Z1
const [virtual]
 

Method to convert a Zsum to a Ssum.

An efficient version for the conversion to Ssums, based on exvector (e.g. std::vector<GiNaC::ex> ). Z0 contains the result. Z1 is reversed order, so that we can use pop_back.

The basic formula is

\[ Z(n;m_1,...;x_1,...) = \sum\limits_{i=1}^n \frac{x_1^i}{i^{m_1}} Z(i;m_2,...;x_2,...) \mbox{} - Z(n;m_1+m_2,...;x_1 x_2, ...) \]

Reimplemented in Euler_Zagier_sum.

ex eval int  level = 0  )  const
 

The simplifications are done in the following order:

  • If the upper summation limit is equal to infinity, we have a multiple polylog.

  • If all $x_j$'s are equal to 1, we have a Euler-Zagier sum.

  • If the upper summation index is an integer, perform the sum explicitly.

Reimplemented in classical_polylog, Euler_Zagier_sum, harmonic_polylog, multiple_polylog, multiple_zeta_value, and nielsen_polylog.

ex eval_explicit int  level = 0  )  const [virtual]
 

Explicit evaluation

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

A product of Zsums is simplified, if the last two have the same upper summation index. The function shuffle_Zsum is called for the multiplication.

A product is also simplified if the difference between the two upper summation indices is an integer. The factor with the "larger" upper summation index is converted to the "smaller" index with the help of the function Zsum::adjust_upper_limit_downwards. Note that the algorithm returns a product, where both factors have the "smaller" index.

unsigned get_depth void   )  const [inline]
 

Returns the depth.

ex get_first_letter void   )  const [virtual]
 

Returns the first letter from the letter_list.

ex get_head int  k  )  const [virtual]
 

Returns from the Z-sum $ Z(n;m_1,...,m_l;x_1,...,x_l) $ the head $ Z(n;m_1,...,m_{k-1};x_1,...,x_{k-1}) $.

GiNaC::ex get_index void   )  const [inline]
 

Returns the upper summation limit.

GiNaC::ex get_letter_list void   )  const [inline]
 

Returns the letter_list.

ex get_tail int  k  )  const [virtual]
 

Returns from the Z-sum $ Z(n;m_1,...,m_l;x_1,...,x_l) $ the tail $ Z(n;m_k,...,m_l;x_k,...,x_l) $.

ex get_weight void   )  const
 

Returns the weight.

ex index_eq_one void   )  const [virtual]
 

Returns

\[ Z(1;m_1,...,m_k;x_1,...,x_k) = 0 \]

for $k>1$. For $k=1$ it returns

\[ x_1 \]

and for $k=0$ we have

\[ 1 \]

ex multiply_letter_with_first_letter const GiNaC::ex &  lc  )  const [protected, virtual]
 

Returns a Zsum, where the letter lc is multiplied with the first letter in the letter list of the original Zsum.

If the sum is empty, e.g. $Z(n)$, the result is $\frac{x^n}{n^m} Z(n)$.

ex multiply_letter_with_last_letter const GiNaC::ex &  lc  )  const [protected, virtual]
 

Returns a Zsum, where the letter lc is multiplied with the last letter in the letter list of the original Zsum.

If the sum is empty, e.g. $Z(n)$, the result is $\frac{x^n}{n^m} Z(n)$.

ex prepend_letter const GiNaC::ex &  nc,
const GiNaC::ex &  lc
const [virtual]
 

Prepends the letter lc to the letter_list and sets the upper summation index to nc.

ex prepend_letter const GiNaC::ex &  lc  )  const [virtual]
 

Prepends the letter lc to the letter_list.

ex remove_first_letter const GiNaC::ex &  nc  )  const [virtual]
 

Returns a Zsum with the first letter removed from the letter_list and the upper summation index set to nc.

Reimplemented in Euler_Zagier_sum.

ex remove_first_letter void   )  const [virtual]
 

Returns a Zsum with the first letter removed from the letter_list.

Reimplemented in Euler_Zagier_sum.

ex set_index const GiNaC::ex &  i  )  const [virtual]
 

Sets the upper summation index to $i$

Reimplemented in Euler_Zagier_sum.

ex shift_minus_one void   )  const [virtual]
 

Returns $Z(n-1,m_1,...,x_1,...)$

Reimplemented in Euler_Zagier_sum.

ex shift_plus_one void   )  const [virtual]
 

Returns $Z(n+1,m_1,...,x_1,...)$

Reimplemented in Euler_Zagier_sum.

ex shuffle_exvector const GiNaC::exvector &  Z0,
const GiNaC::exvector &  Z1,
const GiNaC::exvector &  Z2
const [virtual]
 

Method to multiply two Zsums.

An efficient version for the multiplication of Zsums, based on exvector (e.g. std::vector<GiNaC::ex> ). Z0 contains the result. Z1 and Z2 are in reversed order, so that we can use pop_back.

The basic formula is

\[ Z(n;m_1,...;x_1,...) Z(n;m_1',...;x_1',...) = \sum\limits_{i=1}^n \frac{x_1^i}{i^{m_1}} Z(i-1;m_2,...;x_2,...) Z(i-1;m_1',...;x_1',...) \]

\[ \mbox{} + \sum\limits_{i=1}^n \frac{{x_1'}^i}{i^{m_1'}} Z(i-1;m_1,...;x_1,...) Z(i-1;m_2',...;x_2',...) \mbox{} + \sum\limits_{i=1}^n \frac{(x_1 {x_1'})^i}{i^{m_1+m_1'}} Z(i-1;m_2,...;x_2,...) Z(i-1;m_2',...;x_2',...) \]

Reimplemented in Euler_Zagier_sum.


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