1 @c English version: 2010-11-01
3 * Introducción a solve_rec::
4 * Funciones y variables para solve_rec::
7 @node Introducción a solve_rec, Funciones y variables para solve_rec, solve_rec, solve_rec
8 @section Introducción a solve_rec
10 El paquete @code{solve_rec} resuelve expresiones recurrentes lineales con
11 coeficientes polinomiales.
13 Ejecútese @code{demo(solve_rec);} para ver una demostración sobre
14 la utilización de este paquete.
19 (%i1) load("solve_rec")$
20 (%i2) solve_rec((n+4)*s[n+2] + s[n+1] - (n+1)*s[n], s[n]);
24 (%o2) s = -------------------- + ---------------
25 n (n + 1) (n + 2) (n + 1) (n + 2)
28 @node Funciones y variables para solve_rec, , Introducción a solve_rec, solve_rec
30 @section Funciones y variables para solve_rec
33 @deffn {Función} reduce_order (@var{rec}, @var{sol}, @var{var})
35 Reduce el orden de la expresión recurrente lineal @var{rec} cuando
36 se conoce una solución particular @var{sol}. La recurrencia
37 reducida puede utilizarse para obterner más soluciones.
42 (%i3) rec: x[n+2] = x[n+1] + x[n]/n;
47 (%i4) solve_rec(rec, x[n]);
48 WARNING: found some hypergeometrical solutions!
51 (%i5) reduce_order(rec, n, x[n]);
63 (%o6) (- n - 2) %u - %u
65 (%i6) solve_rec((n+2)*%u[n+1] + %u[n], %u[n]);
72 So the general solution is
77 %k n > -------- + %k n
85 @defvr {Variable opcional} simplify_products
86 Valor por defecto: @code{true}
88 Si @code{simplify_products} vale @code{true}, @code{solve_rec} intentará
89 simplificar los productos del resultado.
91 Véase también @code{solve_rec}.
97 @deffn {Función} simplify_sum (@var{expr})
99 Intenta reducir todas las sumas que aparecen en @var{expr} a una forma
102 Para utilizar esta función cárguese previamente el paquete @code{simplify_sum}
103 ejecutando la instrucción @code{load("simplify_sum")}.
108 @c load("simplify_sum")$
109 @c sum(binomial(n+k,k)/2^k, k, 1, n) + sum(binomial(2*n, 2*k), k, 1,n);
113 (%i1) load("simplify_sum")$
115 (%i2) sum(binomial(n+k,k)/2^k,k,1,n)+sum(binomial(2*n,2*k),k,1,n);
118 \ binomial(n + k, k) \
119 (%o2) > ------------------ + > binomial(2 n, 2 k)
125 (%i3) simplify_sum(%);
136 @deffn {Función} solve_rec (@var{eqn}, @var{var}, [@var{init}])
138 Obtiene las soluciones hipergeométricas de la expresión recurrente @var{eqn}
139 con coeficientes lineales en la variable @var{var}. Los argumentos opcionales
140 @var{init} son condiciones iniciales.
142 La función @code{solve_rec} puede resolver expresiones recurrentes con
143 coeficientes constantes, encuentra soluciones hipergeométricas de
144 expresiones recurrentes lineales homogéneas con coeficientes
145 polinomiales, obtiene soluciones racionales de expresiones recurrentes
146 lineales con coeficientes lineales y resuelve también expresiones
147 recurrentes de Ricatti.
149 Nótese que el tiempo de ejecución del algoritmo para encontrar soluciones
150 hipergeométricas es exponencial respecto del grado del coeficiente principal.
152 Para hacer uso de esta función ejecútese previamente @code{load("solve_rec");}.
154 Ejemplo de recurrencia lineal con coeficientes constantes:
157 (%i2) solve_rec(a[n]=a[n-1]+a[n-2]+n/2^n, a[n]);
159 (sqrt(5) - 1) %k (- 1)
161 (%o2) a = ------------------------- - ----
167 + ------------------ - ----
172 Ejemplo de recurrencia lineal con coeficientes polinomiales:
175 (%i7) 2*x*(x+1)*y[x] - (x^2+3*x-2)*y[x+1] + (x-1)*y[x+2];
177 (%o7) (x - 1) y - (x + 3 x - 2) y + 2 x (x + 1) y
179 (%i8) solve_rec(%, y[x], y[1]=1, y[3]=3);
186 Ejemplo de recurrencia de Ricatti:
189 (%i2) x*y[x+1]*y[x] - y[x+1]/(x+2) + y[x]/(x-1) = 0;
192 (%o2) x y y - ------ + ----- = 0
194 (%i3) solve_rec(%, y[x], y[3]=5)$
195 (%i4) ratsimp(minfactorial(factcomb(%)));
198 (%o4) y = - -------------------------------------------------
200 5 x - 3 x - 25 x + 15 x + 20 x - 12 x - 1584
204 Véanse también @code{solve_rec_rat}, @code{simplify_products} y @code{product_use_gamma}.
208 @deffn {Función} solve_rec_rat (@var{eqn}, @var{var}, [@var{init}])
210 Calcula las soluciones racionales de las expresiones recurrentes lineales.
211 Véase @code{solve_rec} para la descripción de sus argumentos.
213 Para hacer uso de esta función ejecútese previamente @code{load("solve_rec");}.
218 (%i1) (x+4)*a[x+3] + (x+3)*a[x+2] - x*a[x+1] + (x^2-1)*a[x];
219 (%o1) (x + 4) a + (x + 3) a - x a
224 (%i2) solve_rec_rat(% = (x+2)/(x+1), a[x]);
226 (%o2) a = ---------------
230 Véase también @code{solve_rec}.
234 @defvr {Variable opcional} product_use_gamma
235 Valor por defecto:@code{true}
237 Si @code{product_use_gamma} vale @code{true}, @code{solve_rec}
238 introduce la función gamma en la expresión del resultado
239 cuando se simplifican productos.
241 Véanse también @code{simplify_products} y @code{solve_rec}.
245 @deffn {Función} summand_to_rec (@var{summand}, @var{k}, @var{n})
247 Devuelve la expresión recurrente que satisface la suma
259 donde el sumando es hipergeométrico en @var{k} y @var{n}.
261 Para hacer uso de esta función deben cargarse previamente los paquetes
262 @code{zeilberger} y @code{solve_rec} mediante la ejecución de las sentencias
263 @code{load("solve_rec")} y @code{load("zeilberger")}.
266 (%i17) load("zeilberger")$
267 (%i18) summand: binom(3*k+1,k)*binom(3*(n-k),n-k)/(3*k+1)$
268 (%i19) summand_to_rec(summand, k, n);
269 Dependent equations eliminated: (3 2)
270 (%o19) - 4 (n + 2) (2 n + 3) (2 n + 5) sm
273 + 12 (2 n + 3) (9 n + 27 n + 22) sm
275 - 81 (n + 1) (3 n + 2) (3 n + 4) sm
277 (%i21) sum(''summand, k, 0, n), n=0;
279 (%i22) sum(''summand, k, 0, n), n=1;
281 (%i23) product_use_gamma: false$
282 (%i24) solve_rec(%o19, sm[n], sm[0]=1, sm[1]=4);
286 ( ! ! (3 %j + 2)) ( ! ! (3 %j + 4)) 3
289 (%o24) sm = ------------------------------------------
293 ( ! ! (2 %j + 3)) 2 n!