第二十天學習進度--規律尋找算法之傅里葉級數擬合周期函數(4)


在上次的規律尋找算法中說明了規律尋找算法並不太支持周期函數,當前幾天刷刷頭條的時候發現了一個傅里葉級數的動畫,為了把規律尋找算法中,對於周期函數模擬的短板給補全了,今天打算在數列找規律算法(預測算法)之更一般形式(2)的基礎上,添加一個傅里葉級數的模擬,來讓整個模擬曲線的過程絲滑流暢。

眾所周知,傅里葉級數是用來擬合任意可導周期函數的,話句話說,只要是個周期函數,都可以這么表示。以下資料來自百度百科。

傅里葉級數有兩種表示方式,一種是三角函數的表示方式,這種方式的數學含義明確,但是相對人的計算分析來說,顯得相對麻煩。如下所示:

 

下面則是是指數形式的表示形式,相對與人對於周期函數的研究,一般采用這個函數進行研究。

(j為虛數單位)

其中,

 

 

傅里葉真是個天才,發現了周期函數的通用表示方式,前幾天一直在尋找周期函數的通用表示,卻沒想到大學高數中所教的傅里葉級數就是應用在此處,當初學習的時候只是知道這個公式,也沒有說具體的應用。

有了上述的公式了之后,就能開始寫出對應的傅里葉級數的函數了。根據scipy的函數擬合,則有以下代碼

#傅里葉級數(周期函數擬合)
def func_fourier(x,*b):
    x=np.array(x)
    global t
    w = 2 * math.pi/(t*2)*b[-1]
    ret = 0
    a=b[:-2]
    for deg in range(0, int(len(a) / 2) + 1):
        ret += a[deg] * np.cos(deg * w * x) + a[len(a) - deg - 1] * np.sin(deg * w * x)
    return ret

其中t是周期,用網上提供的一組數據來進行函數擬合:

y = [490, 477, 467, 458, 450, 442, 433, 426, 419, 413, 411, 428, 445, 441, 434, 436, 446, 442, 427, 414, 402,
391, 381, 372, 366, 363, 363, 364, 366, 372, 382, 397, 414, 430, 444, 460, 481, 502, 522, 539, 551, 561,
567, 569, 568, 566, 570, 576, 578, 574, 565, 553, 541, 529, 519, 507, 496, 486, 494, 528, 551, 563, 576,
596, 612, 624, 631, 636, 639, 640, 640, 638, 635, 633, 630, 625, 620, 615, 609, 603, 597, 590, 584, 578,
571, 559, 541, 529, 524, 511, 486, 454, 422, 394, 372, 348, 340, 335, 334, 332, 332, 332, 332, 332, 333,
336, 339, 341, 344, 349, 355, 360, 366, 372, 383, 396, 408, 419, 432, 448, 463, 473, 482, 493, 511, 530,
551, 568, 580, 595, 597, 597, 595, 593, 598, 606, 619, 632, 642, 653, 659, 658, 653, 645, 640, 641, 643,
650, 656, 659, 659, 655, 649, 640, 632, 626, 621, 614, 603, 590, 575, 564, 550, 530, 519, 507, 495, 484,
472, 462, 452, 445, 437, 430, 423, 417, 423, 442, 445, 435, 423, 422, 431, 436, 428, 413, 401, 390, 381,
373, 367, 363, 364, 365, 367, 371, 378, 396, 411, 428]

周期函數擬合效果如下:

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM