使用 for 循环在 matlab 中绘制傅里叶级数

Plotting a fourier series in matlab with for loop

我正在尝试绘制傅里叶级数之后的傅里叶级数;

f(t)=$$\sum_{k=0}^k \frac{(1)(\sin(2k+1)pi*t)}{2k+1}$$

equation

t = -1:0.0001:1

我尝试使用 for 循环并将新系列的值增加 F + 最后一个系列,并且每次迭代也将 k 增加 1,但我得到的图是正方形而不是正弦波

k=0
series  = 0
for i = 0:0.0001:1;
    F = 4/pi*((1/(2*(k) + 1)).*sin((2*(k)+1).*pi.*t));
    series = series + F;
    k = k+1;
end 
plot(t,series)

你在循环的时候犯了一个错误,你实际上不想循环,而是循环 k。现在你正在循环 i (代表时间,来自上下文),但你甚至没有使用 i.

所以正确的方法是循环 k,并设置要包含的傅立叶系数的最大数量,如下所示:

series  = 0;
t = -1:0.0001:1;
k_max = 10;

for k = 0:k_max
    F = 4/pi*((1/(2*(k) + 1)).*sin((2*(k)+1).*pi.*t));
    series = series + F;
end

plot(t,series)

您可以比较包含更多系数时发生的情况,方法是更改​​ k_max


然而,在 Matlab 中,避免使用 for 循环通常更快,这可以通过向量化来完成。如果将 t 指定为行向量,将向量 k 指定为列向量,则可以为每个 k 计算 F,然后沿第一个维度求和获取系列:

t = -1:0.0001:1;
k = (0:10).';

F = 4/pi.*((1./(2.*(k) + 1)).*sin((2*(k)+1).*pi.*t));
series = sum(F, 1);