计算机网络课程讲到物理层,布置作业的第一题是求f(t)=t (0≤t≤1)的傅里叶系数。

  我们知道任何一个周期函数都可以被傅里叶级数逼近。如果是实值函数,则可以用正弦分量,余弦分量,直流分量来近似。公式如下:

  利用正余弦函数的正交性反变换可得到f(x)的系数。本题中认为函数周期是1,进行延拓可以看成是无数个f(t)沿着x轴平移。

  简单计算得a_0 = 1, a_n = 0, b_n = -1/πn 至此题目结束。

  但是我想练习一下最近自己刚刚接触到的numpy和matplotlib,于是动手写了一个python小程序想看看拟合的效果是什么样的。效果图和代码如下。  

import numpy as np
import matplotlib.pyplot as plt


x = np.linspace(0, 1, 100)
y_ = np.zeros_like(x)
y = x
y_ = y_ + 0.5
for n in range(1, 11):
    y_ = y_ - 1/np.pi/n * np.sin(2*np.pi*x*n)

plt.plot(x, y, label='y=x')
plt.plot(x, y_, label='approximation')

plt.xlabel('x')
plt.ylabel('y')

plt.title("CFS")
plt.legend()
plt.show()

  代码一直拟合到十阶分量。可看到效果还是不错的,增加x采样点可以增加图像平滑

01-18 17:35