Anterior: , Subir: solve_rec   [Índice general][Índice]

73.2 Funciones y variables para solve_rec

Función: reduce_order (rec, sol, var)

Reduce el orden de la expresión recurrente lineal rec cuando se conoce una solución particular sol. La recurrencia reducida puede utilizarse para obterner más soluciones.

Ejemplo:

(%i3) rec: x[n+2] = x[n+1] + x[n]/n;
                                      x
                                       n
(%o3)               x      = x      + --
                     n + 2    n + 1   n
(%i4) solve_rec(rec, x[n]);
WARNING: found some hypergeometrical solutions! 
(%o4)                    x  = %k  n
                          n     1
(%i5) reduce_order(rec, n, x[n]);
(%t5)                    x  = n %z
                          n       n

                           n - 1
                           ====
                           \
(%t6)                %z  =  >     %u
                       n   /        %j
                           ====
                           %j = 0

(%o6)             (- n - 2) %u     - %u
                              n + 1     n
(%i6) solve_rec((n+2)*%u[n+1] + %u[n], %u[n]);
                                     n
                            %k  (- 1)
                              1
(%o6)                 %u  = ----------
                        n    (n + 1)!

So the general solution is

             n - 1
             ====        j
             \      (- 1)
       %k  n  >    -------- + %k  n
         2   /     (j + 1)!     1
             ====
             j = 0
Variable opcional: simplify_products

Valor por defecto: true

Si simplify_products vale true, solve_rec intentará simplificar los productos del resultado.

Véase también solve_rec.

Función: simplify_sum (expr)

Intenta reducir todas las sumas que aparecen en expr a una forma cerrada.

Para utilizar esta función cárguese previamente el paquete simplify_sum ejecutando la instrucción load("simplify_sum").

Ejemplo:

(%i1) load("simplify_sum")$
(%i2) sum(binomial(n+k,k)/2^k,k,1,n)+sum(binomial(2*n,2*k),k,1,n);
        n                          n
       ====                       ====
       \     binomial(n + k, k)   \
(%o2)   >    ------------------ +  >    binomial(2 n, 2 k)
       /              k           /
       ====          2            ====
       k = 1                      k = 1
(%i3) simplify_sum(%);

                         2 n - 1    n
(%o3)                   2        + 2  - 2
Función: solve_rec (eqn, var, [init])

Obtiene las soluciones hipergeométricas de la expresión recurrente eqn con coeficientes lineales en la variable var. Los argumentos opcionales init son condiciones iniciales.

La función solve_rec puede resolver expresiones recurrentes con coeficientes constantes, encuentra soluciones hipergeométricas de expresiones recurrentes lineales homogéneas con coeficientes polinomiales, obtiene soluciones racionales de expresiones recurrentes lineales con coeficientes lineales y resuelve también expresiones recurrentes de Ricatti.

Nótese que el tiempo de ejecución del algoritmo para encontrar soluciones hipergeométricas es exponencial respecto del grado del coeficiente principal.

Para hacer uso de esta función ejecútese previamente load("solve_rec");.

Ejemplo de recurrencia lineal con coeficientes constantes:

(%i2) solve_rec(a[n]=a[n-1]+a[n-2]+n/2^n, a[n]);
                        n          n
           (sqrt(5) - 1)  %k  (- 1)
                            1           n
(%o2) a  = ------------------------- - ----
       n               n                  n
                      2                5 2
                                                n
                                   (sqrt(5) + 1)  %k
                                                    2    2
                                 + ------------------ - ----
                                            n              n
                                           2            5 2

Ejemplo de recurrencia lineal con coeficientes polinomiales:

(%i7) 2*x*(x+1)*y[x] - (x^2+3*x-2)*y[x+1] + (x-1)*y[x+2];
                         2
(%o7) (x - 1) y      - (x  + 3 x - 2) y      + 2 x (x + 1) y
               x + 2                   x + 1                x
(%i8) solve_rec(%, y[x], y[1]=1, y[3]=3);
                              x
                           3 2    x!
(%o9)                 y  = ---- - --
                       x    4     2

Ejemplo de recurrencia de Ricatti:

(%i2) x*y[x+1]*y[x] - y[x+1]/(x+2) + y[x]/(x-1) = 0;
                            y         y
                             x + 1     x
(%o2)         x y  y      - ------ + ----- = 0
                 x  x + 1   x + 2    x - 1
(%i3) solve_rec(%, y[x], y[3]=5)$
(%i4) ratsimp(minfactorial(factcomb(%)));
                                   3
                               30 x  - 30 x
(%o4) y  = - -------------------------------------------------
       x        6      5       4       3       2
             5 x  - 3 x  - 25 x  + 15 x  + 20 x  - 12 x - 1584

Véanse también solve_rec_rat, simplify_products y product_use_gamma.

Función: solve_rec_rat (eqn, var, [init])

Calcula las soluciones racionales de las expresiones recurrentes lineales. Véase solve_rec para la descripción de sus argumentos.

Para hacer uso de esta función ejecútese previamente load("solve_rec");.

Ejemplo:

(%i1) (x+4)*a[x+3] + (x+3)*a[x+2] - x*a[x+1] + (x^2-1)*a[x];
(%o1)  (x + 4) a      + (x + 3) a      - x a
                x + 3            x + 2      x + 1
                                                   2
                                               + (x  - 1) a
                                                            x
(%i2) solve_rec_rat(% = (x+2)/(x+1), a[x]);
                       1
(%o2)      a  = ---------------
            x   (x - 1) (x + 1)

Véase también solve_rec.

Variable opcional: product_use_gamma

Valor por defecto:true

Si product_use_gamma vale true, solve_rec introduce la función gamma en la expresión del resultado cuando se simplifican productos.

Véanse también simplify_products y solve_rec.

Función: summand_to_rec (summand, k, n)

Devuelve la expresión recurrente que satisface la suma

    inf
    ====
    \
     >     sumando
    /
    ====
  k = minf

donde el sumando es hipergeométrico en k y n.

Para hacer uso de esta función deben cargarse previamente los paquetes zeilberger y solve_rec mediante la ejecución de las sentencias load("solve_rec") y load("zeilberger").

(%i17) load("zeilberger")$
(%i18) summand: binom(3*k+1,k)*binom(3*(n-k),n-k)/(3*k+1)$
(%i19) summand_to_rec(summand, k, n);
Dependent equations eliminated:  (3 2)
(%o19) - 4 (n + 2) (2 n + 3) (2 n + 5) sm
                                         n + 2
                    2
 + 12 (2 n + 3) (9 n  + 27 n + 22) sm
                                     n + 1
 - 81 (n + 1) (3 n + 2) (3 n + 4) sm
                                    n
(%i21) sum(''summand, k, 0, n), n=0;
(%o21)                       1
(%i22) sum(''summand, k, 0, n), n=1;
(%o22)                       4
(%i23) product_use_gamma: false$
(%i24) solve_rec(%o19, sm[n], sm[0]=1, sm[1]=4);
              n - 1               n - 1
              /===\               /===\
               ! !                 ! !                n
             ( ! !   (3 %j + 2)) ( ! !   (3 %j + 4)) 3
               ! !                 ! !
              %j = 0              %j = 0
(%o24) sm  = ------------------------------------------
         n            n - 1
                      /===\
                       ! !                n
                     ( ! !   (2 %j + 3)) 2  n!
                       ! !
                      %j = 0

Anterior: , Subir: solve_rec   [Índice general][Índice]