Afortunadamente ese término de suma z+z^2+...+z^(n+1)
se puede poner en una forma cerrada. De lo contrario, puede que tengas que combinar lo que se puede considerar como un par mixto de recurrencias.
Ese término de suma puede ser tratado por rsolve
o, más sencillamente, el sum
comando.
palt:=rsolve({b(n)=b(n-1)+z^(n),b(1)=z},b(n));
2 n
z z z
palt := z - ------ + ------
-1 + z -1 + z
p:=suma(z^i,i=1..n);
(n + 1)
z z
p := -------- - ------
-1 + z -1 + z
simplificar( p - palt );
0
Ahora podemos resolver el problema. A continuación, me centraré en encontrar h(n).
sol:=rsolve({h(n)=h(n-1)*z*p+z,h(0)=z},h(n)):
donde sol
tiene productos y sumas (con n
en los límites del índice) pero ya no es una relación de recurrencia.
lprint(sol);
(z^2/(-1+z))^n*(-1+z)*(product(z^(n0+1)-1, n0 = 0 .. n))*(sum((z^2/(-1+z))^
(-n1)/(product(z^(n0+1)-1, n0 = 0 .. n1)), n1 = 0 .. n-1))/((z^(n+1)-1)*z)
+(product(z^(n0+1)-1, n0 = 0 .. n))*(z^2/(-1+z))^n*z/(z^(n+1)-1)
Podemos probar este resultado para algunos casos de n
comparando con un procedimiento recursivo establecido para calcular de forma similar a la recurrencia original.
Tú eliges si quieres poner los resultados en forma expandida, factorizada o simplificada.
seq(factor(simplify(eval(sol,n=i))),i=0..3);
/ 2 \ / 5 4 3 2 \
z, z \z + 1/, z \z + z + z + z + 1/,
/ 9 8 7 6 5 4 3 2 \
\z + 2 z + 3 z + 3 z + 2 z + 2 z + z + z + 1/ z
makeh:=proc(n::nonnegint)
if n=0 then z;
else z*procname(n-1)*add(z^i,i=1..n)+z;
end if;
end proc:
seq(factor(simplify(makeh(i))),i=0..3);
/ 2 \ / 5 4 3 2 \
z, z \z + 1/, z \z + z + z + z + 1/,
/ 9 8 7 6 5 4 3 2 \
\z + 2 z + 3 z + 3 z + 2 z + 2 z + z + z + 1/ z
seq( simplify( makeh(i) - eval(sol,n=i) ), i=0..10 );
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0