[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

# 79. zeilberger

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

## 79.1 Introducción a zeilberger

El paquete `zeilberger` implementa el algoritmo de Zeilberger para la suma hipergeométrica definida y el algoritmo de Gosper para la suma hipergeométrica indefinida. Además, hace uso del método de optimización por filtrado desarrollado por Axel Riese.

El autor de este paquete es Fabrizio Caruso.

Antes de hacer uso de las funciones aquí definidas, ejecútese la sentencia `load (zeilberger)`.

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### 79.1.1 El problema de la suma indefinida

El paquete `zeilberger` implementa el algoritmo de Gosper para la suma hipergeométrica indefinida. Dado el término general hipergeométrico F_k de índice k, se plantea el problema de encontrar su antidiferencia hipergeométrica, esto es, el término hipergeométrico tal que

F_k = f_(k+1) - f_k.

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### 79.1.2 El problema de la suma definida

El paquete `zeilberger` implementa el algoritmo de Zeilberger para la suma hipergeométrica definida. Dados el término hipergeométrico propio F_(n,k), de índices n y k, y el entero positivo d, se plantea el problema de encontrar una expresión recurrente lineal de orden d con coeficientes polinomiales en n y una función racional R en n y k tales que

a_0 F_(n,k) + ... + a_d F_(n+d),k = Delta_K(R(n,k) F_(n,k))

donde Delta_k es el k-ésimo operador diferencia hacia adelante, esto es, Delta_k(t_k) := t_(k+1) - t_k.

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### 79.1.3 Niveles de información

Hay versiones extendidas de los nombres de las instrucciones, que se construyen añadiendo uno de los siguientes prefijos:

`Summary`

  Tan solo muestra un sumario al final

`Verbose`

  Alguna información en los niveles intermedios

`VeryVerbose`

  Más información

`Extra`

  Aún más información, incluida alguna sobre el sistema lineal en el algoritmo de Zeilberger.

Por ejemplo: `GosperVerbose`, `parGosperVeryVerbose`, `ZeilbergerExtra`, `AntiDifferenceSummary`.

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

## 79.2 Funciones y variables para zeilberger

Función: AntiDifference (F_k, k)

  Returns the hypergeometric anti-difference of F_k, if it exists. Otherwise `AntiDifference` returns `no_hyp_antidifference`.

Función: Gosper (F_k, k)

  Devuelve, si existe, el elemento racional asociado a F_k, esto es, la función racional que verifica

  F_k = R(k+1) F_(k+1) - R(k) F_k,

  En caso de no existir este elemento, `Gosper` devuelve `no_hyp_sol`.

Función: GosperSum (F_k, k, a, b)

  Devuelve la suma de los términos F_k desde k = a hasta k = b si F_k tiene una antidiferencia hipergeométrica. En caso contrario, `GosperSum` devuelve `nongosper_summable`.

  Ejemplos:

      (%i1) load (zeilberger)$
      (%i2) GosperSum ((-1)^k*k / (4*k^2 - 1), k, 1, n);
      Dependent equations eliminated:  (1)
                                 3       n + 1
                            (n + -) (- 1)
                                 2               1
      (%o2)               - ------------------ - -
                                        2        4
                            2 (4 (n + 1)  - 1)
      (%i3) GosperSum (1 / (4*k^2 - 1), k, 1, n);
                                      3
                                - n - -
                                      2       1
      (%o3)                  -------------- + -
                                      2       2
                             4 (n + 1)  - 1
      (%i4) GosperSum (x^k, k, 1, n);
                                n + 1
                               x          x
      (%o4)                    ------ - -----
                               x - 1    x - 1
      (%i5) GosperSum ((-1)^k*a! / (k!*(a - k)!), k, 1, n);
                                      n + 1
                      a! (n + 1) (- 1)              a!
      (%o5)       - ------------------------- - ----------
                    a (- n + a - 1)! (n + 1)!   a (a - 1)!
      (%i6) GosperSum (k*k!, k, 1, n);
      Dependent equations eliminated:  (1)
      (%o6)                     (n + 1)! - 1
      (%i7) GosperSum ((k + 1)*k! / (k + 1)!, k, 1, n);
                        (n + 1) (n + 2) (n + 1)!
      (%o7)             ------------------------ - 1
                                (n + 2)!
      (%i8) GosperSum (1 / ((a - k)!*k!), k, 1, n);
      (%o8)                  NON_GOSPER_SUMMABLE

Función: parGosper (F_{n,k}, k, n, d)

  Intenta calcular una recurrecia de orden d para F_{n,k}.

  El algoritmo devuelve una secuencia [s_1, s_2, ..., s_m] de soluciones, cada una de las cuales tiene la forma

  [R(n, k), [a_0, a_1, ..., a_d]].

  La función `parGosper` devuelve `[]` si no encuentra ninguna recurrencia.

Función: Zeilberger (F_{n,k}, k, n)

  Intenta calcular la suma hipergeométrica indefinida de F_{n,k}.

  La función `Zeilberger` invoca en primer lugar a `Gosper`, y en caso de no encontrar una solución, llama después a `parGosper` con los órdenes 1, 2, 3, ..., hasta `max_ord`. Si `Zeilberger` encuentra una solución antes de alcanzar `max_ord`, se detiene su ejecución y devuelve el resultado.

  El algoritmo devuelve una secuencia [s_1, s_2, ..., s_m] de soluciones, cada una de las cuales tiene la forma

  [R(n, k), [a_0, a_1, ..., a_d]].

  La función `Zeilberger` devuelve `[]` si no encuentra ninguna solución.

  La función `Zeilberger` llama a `Gosper` sólo si `Gosper_in_Zeilberger` tiene el valor `true`.

Variable opcional: max_ord

  Valor por defecto: 5

  `max_ord` es el máximo orden de recurrencia que ensayará la función `Zeilberger`.

Variable opcional: simplified_output

  Valor por defecto: `false`

  Si `simplified_output` vale `true`, las funciones del paquete `zeilberger` tratan de presentar las soluciones simplificadas.

Variable opcional: linear_solver

  Valor por defecto: `linsolve`

  La variable `linear_solver` guarda el nombre de la función que se utilizará para resolver el sistema de ecuaciones del algoritmo de Zeilberger.

Variable opcional: warnings

  Valor por defecto: `true`

  Si `warnings` vale `true`, las funciones del paquete `zeilberger` emiten mensajes de aviso durante su ejecución.

Variable opcional: Gosper_in_Zeilberger

  Valor por defecto: `true`

  Si `Gosper_in_Zeilberger` vale `true`, la función `Zeilberger` llama a la función `Gosper` antes de llamar a `parGosper`. En caso contrario, `Zeilberger` invoca inmediatamente a `parGosper`.

Variable opcional: trivial_solutions

  Valor por defecto: `true`

  Si `trivial_solutions` vale `true`, la función `Zeilberger` devuelve soluciones triviales.

Variable opcional: mod_test

  Valor por defecto: `false`

  Si `mod_test` vale `true`, la función `parGosper` ejecuta una prueba modular para descartar sistemas sin soluciones.

Variable opcional: modular_linear_solver

  Valor por defecto: `linsolve`

  La variable `modular_linear_solver` guarda el nombre de la función que deberá ser llamada por la prueba modular de `parGosper` para resolver sistemas lineales.

Variable opcional: ev_point

  Valor por defecto: `big_primes[10]`

  La variable `ev_point` guarda el valor para el que debe evaluarse n durante la ejecución de la prueba modular de `parGosper`.

Variable opcional: mod_big_prime

  Valor por defecto: `big_primes[1]`

  La variable `mod_big_prime` guarda el módulo utilizado por la prueba modular de `parGosper`.

Variable opcional: mod_threshold

  Valor por defecto: 4

  La variable `mod_threshold` es el máximo orden que ensaya la prueba modular de `parGosper`.

[ << ] | [ >> ] |  |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

This document was generated by Viktor T. Toth on septiembre, 27 2018 using texi2html 1.76.