zoukankan      html  css  js  c++  java
  • 第二十天学习进度--规律寻找算法之傅里叶级数拟合周期函数(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]

    周期函数拟合效果如下:

  • 相关阅读:
    一些关于HDFS的基本知识
    WordPress使用子主题继承和修改主题
    IQueryable、IQueryProvider接口详解
    FM并发编程练习:改写苏飞的C#多线程网站压力测试程序
    利用Webkit抓取动态网页和链接
    HTTP协议之代理
    PortalBasic Java Web 应用开发框架 v3.0.1 即将发布
    算法导论1.排序算法
    CSS题目 子元素决定父元素的大小
    使用solrj和EasyNet.Solr进行原子更新
  • 原文地址:https://www.cnblogs.com/halone/p/13396094.html
Copyright © 2011-2022 走看看