使用symphy.rsolve_poly求解回归方程时的不一致公式

2024-09-27 17:31:52 发布

您现在位置:Python中文网/ 问答频道 /正文

当我用sympy.rsolve_poly解循环方程时,得到了不一致的公式

这第一段代码用a(0) = 0a(n+1) = a(n) + 4n^3

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)=2a(n)+4n^3 | a(0)=0

替代形式: {a(n+1)=2(2n^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

[编辑日期:2020年3月4日] 按照约翰的建议,尝试使用rsolve代替rsolve_poly:

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


Tags: 代码fromimporttruefunctioninteger公式print

热门问题