使用 sympy 解决复发问题
Posted
技术标签:
【中文标题】使用 sympy 解决复发问题【英文标题】:Solving recurrence using sympy 【发布时间】:2017-01-10 21:07:44 【问题描述】:我试图使用 sympy 解决斐波那契数列的递归关系。我得到了一个与教科书不同的答案。不知道哪里弄错了。
我的同情代码
from sympy import *
f=Function('f')
var('y')
var('n',integer=True)
f=y(n)-y(n-1)+(n-2)
rsolve(f,y(n))
输出是
C0 + (-n + 1)*(n/2 - 1)
【问题讨论】:
输出对于您提供的递归方程f
(=0
) 是正确的。你确定这是f
的正确形式吗?我相信斐波那契数列的递归关系是f = y(n) - y(n-1) - y(n-2)
(=0
)
除了@Stelios 提到的,rsolve 还允许初始条件。斐波那契通常给出两个。
@Stelios 如何给出初始条件?
@user567879 您提供字典作为初始条件。请参阅rsolve 文档
@Stelios Gave as print rsolve(f,y(n),y(0):1,y(1):1)
得到 None 是结果。
【参考方案1】:
这是解决斐波那契递归的完整代码。请注意Function
和symbols
的正确使用。
from sympy import *
y = Function('y')
n = symbols('n',integer=True)
f = y(n)-y(n-1)-y(n-2)
rsolve(f,y(n),y(0):0, y(1):1)
sqrt(5)*(1/2 + sqrt(5)/2)**n/5 - sqrt(5)*(-sqrt(5)/2 + 1/2)**n/5
【讨论】:
Text 给出了imgur.com/a/YUi1t 的答案,对于 fabanocci,y(0) 也为 1(我是这样给出的)。以上是关于使用 sympy 解决复发问题的主要内容,如果未能解决你的问题,请参考以下文章