使用 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】:

这是解决斐波那契递归的完整代码。请注意Functionsymbols的正确使用。

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 解决复发问题的主要内容,如果未能解决你的问题,请参考以下文章

解决所述复发的方法? [关闭]

Sympy解决返回奇怪的字典,当它不应该返回任何

降低精度Sympy等价类

Sympy:在有限域中求解矩阵

在 sympy 中评估系数而不是指数

使用python输出Sympy乳胶