用matlab实现傅里叶级数
时间: 2023-07-20 15:09:00 浏览: 275
傅里叶级数是将一个周期为 $T$ 的连续周期函数 $f(x)$ 表示成一系列正弦和余弦函数的和,其公式为:
$$
f(x) = \frac{a_0}{2} + \sum_{n=1}^{\infty}\left(a_n \cos\frac{2\pi nx}{T} + b_n \sin\frac{2\pi nx}{T}\right)
$$
其中,$a_0$、$a_n$ 和 $b_n$ 分别是傅里叶系数,其公式为:
$$
a_0 = \frac{1}{T} \int_{0}^{T} f(x) \mathrm{d}x
$$
$$
a_n = \frac{2}{T} \int_{0}^{T} f(x) \cos\frac{2\pi nx}{T}\mathrm{d}x
$$
$$
b_n = \frac{2}{T} \int_{0}^{T} f(x) \sin\frac{2\pi nx}{T}\mathrm{d}x
$$
现在,我们可以用 MATLAB 实现傅里叶级数,具体步骤如下:
Step 1:定义周期函数 $f(x)$。
假设我们要求 $f(x) = x$ 的傅里叶级数,则代码如下:
```
function y = f(x)
y = x;
end
```
Step 2:定义傅里叶系数 $a_0$、$a_n$ 和 $b_n$。
我们依照上述公式定义:
```
function [a0, an, bn] = fourier_coeff(f, T, n)
syms x;
a0 = 1/T * int(f(x), x, 0, T);
for i = 1:n
an(i) = 2/T * int(f(x)*cos(2*pi*i*x/T), x, 0, T);
bn(i) = 2/T * int(f(x)*sin(2*pi*i*x/T), x, 0, T);
end
end
```
Step 3:计算傅里叶级数。
我们设定求前 $10$ 项的傅里叶级数,则代码如下:
```
clear;
clc;
T = 2*pi; % 周期
n = 10; % 前 n 项
x = linspace(0, T, 1000); % x 轴坐标点
[a0, an, bn] = fourier_coeff(@f, T, n);
y = a0/2;
for i = 1:n
y = y + an(i)*cos(2*pi*i*x/T) + bn(i)*sin(2*pi*i*x/T);
end
plot(x, f(x), 'k', x, y, 'r');
legend('Original', 'Fourier series');
```
最后的结果是一个图像,显示了原始函数 $f(x)$ 和傅里叶级数的近似结果。
阅读全文