Я получаю противоречивые формулы при использовании sympy.rsolve_poly
для решения повторяющихся уравнений.
Этот первый фрагмент кода решает a(n+1) = a(n) + 4n^3
с a(0) = 0
from sympy import rsolve_poly, symbols
n = symbols('n',integer=True)
formula = rsolve_poly([-1, 1], 4*n**3, n)
print(formula)
# output:
# C0 + n**4 - 2*n**3 + n**2
Эта формула правильно вычисляет :
a(0)=0
a(1)=0
a(2)=4
a(3)=36
a(4)=144
a(5)=400
Однако при добавлении небольшого изменения: a(n+1) = 2*a(n) + 4n^3
с помощью a(0) = 0
со следующим кодом для получения формулы:
from sympy import rsolve_poly, symbols
n = symbols('n',integer=True)
formula = rsolve_poly([-2, 1], 4*n**3, n)
print(formula)
# output:
# -4*n**3 - 12*n**2 - 36*n - 52
Это совершенно неверно. Я изо всех сил пытался понять это безрезультатно.
Решение с использованием http://wolframalpha.com
Ввод: a (n + 1) = 2 a (n) + 4 п ^ 3 | a (0) = 0
Альтернативная форма: {a (n + 1) = 2 (2 n ^ 3 + a (n)), a (0) = 0}
Повторение Решение уравнения: a (n) = 4 (-n (n (n + 3) + 9) + 13 2 ^ n - 13)
Рассчитано правильно:
a(0)=0
a(1)=4
a(2)=40
a(3)=188
a(4)=632
[ПРАВИТЬ 04/03/2020] Пытался использовать rsolve вместо rsolve_poly, как предложил Йохан C:
from sympy import Function, symbols, rsolve
y = Function('y')
n = symbols('n')
f = y(n)-2*y(n-1)-4*n**3
sol = rsolve(f,y(n))
print(sol)
# Output:
2**n*C0 + C0*(4*n**3 + 12*n**2 + 12*n + 4)
Интересно, что решение с y(0) = 0
возвращает None
, но решение с y(1) = 4
возвращает вывод:
from sympy import Function, symbols, rsolve
y = Function('y')
n = symbols('n')
f = y(n)-2*y(n-1)-4*n**3
sol = rsolve(f, y(n), {y(1) : 4})
print(sol)
# Output:
2*2**n/17 + 8*n**3/17 + 24*n**2/17 + 24*n/17 + 8/17
a(0)=0.5882352941176471
a(1)=4.0
a(2)=13.176470588235295
a(3)=31.05882352941176
a(4)=60.70588235294118
Вопрос в том, как установить y (0) = 0?