Re: [问题] 跑递回数列效率问题

楼主: Gauss (Gaussss_Physics)   2023-07-02 23:06:13
※ 引述《shingai (吸收正能量)》之铭言:
: 想请教
: 若我想利用python中的套件sympy
: 去计算出某递回数列的理论值
: 递回数列定义如下:
: a_{n+2}=2*sin(15度)*a_{n+1}-a_n
: a_1=2
: a_2=2*sin(15度)
: (不太确定套件这样用是否适合,总之跑得动,但要求14项数
: 之后的取值,就会卡住不动)
: 码如下:
: from sympy import *
: memo = {0:2, 1: (sqrt(6)-sqrt(2))/2}
: def sinus_seq(n):
: if not n in memo:
: memo[n] = (2*(sqrt(6)-sqrt(2))/4)*sinus_seq(n-1)-sinus_seq(n-2)
: return memo[n]
: for i in range(12):
: print("c[{}]={}".format(i,simplify(sinus_seq(i))))
: 执行时,当我把倒数第二列的range(k)改为k=15时,
: 利用计算时间的套件
: 显示出来的讯息
: CPU times: total: 4min 8s
: 而k=12的讯息为CPU times: total: 12.7 s
: 数字k更大k>15,就会卡住不动了
: 想请教有没有可以改善更有效率的output出更多项的方法??例如要跑到第3000项数列值
: 先谢谢高手愿意分享!
如果只是要算递回数列用Numpy就可以了吧
import numpy as np
sin15 = np.sin(15 * np.pi / 180)
list = np.zeros(3000)
list[0] = 2
list[1] = 2 * sin15
for i in range(len(list) - 2):
list[i + 2] = 2 * sin15 * list[i + 1] - list[i]
print(list[i])
这样算个3000项也不慢
作者: shingai (shingai)   2023-07-03 10:58:00
3Q~

Links booklink

Contact Us: admin [ a t ] ucptt.com