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