我需要编写一个函数来查找第n个Pell编号。
这是佩尔数的递归关系。
P[0]=0, P[1]=1
P[n+1] = 2P[n] + P[n-1]; n>=1;
我是这样做的:
P[n_] :=
If[n >= 1,
Return[2*P[n - 1] + P[n - 2]]];
虽然有效,但必须针对n> = 50进行优化,这样才能在相对较短的时间内进行计算,而且这个方法并不快速。
答案 0 :(得分:1)
记忆很好。或者可以做到
pell[n_] =
RSolveValue[{p[n] == 2*p[n - 1] + p[n - 2], p[0] == 0, p[1] == 1},
p[n], n]
(* Out[4308]= -(((1 - Sqrt[2])^n - (1 + Sqrt[2])^n)/(2 Sqrt[2])) *)
或者
pell2[n_] := MatrixPower[{{2, 1}, {1, 0}}, n, {0, 1}][[1]]
答案 1 :(得分:0)
所有佩尔和纳西数都有近似的公式。这是您要寻找的佩尔数字的近似公式:
from __future__ import division #if you are using python 2.x
from math import sqrt
Pell = 1 + sqrt(2)
pell = 1 - sqrt(2)
for i in range(1,50):
print (Pell**i - pell**i)/(Pell-pell)