Несовместимые формулы при решении рекуррентных уравнений с помощью sympy.rsolve_poly - PullRequest
0 голосов
/ 01 мая 2020

Я получаю противоречивые формулы при использовании 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...