使用for循环在Matlab中绘制傅立叶级数

时间:2019-04-15 12:58:50

标签: matlab fft

我试图在傅立叶级数之后绘制傅立叶级数;

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)

1 个答案:

答案 0 :(得分:2)

您正在循环的内容上犯了一个错误,实际上您不想随着时间的过去而循环,而希望经过.env。现在,您正在遍历.env.local(从上下文表示时间),但您甚至没有使用k

所以正确的方法是循环i,并设置要包括的最大傅里叶系数,如下所示:

i

您可以通过更改k来比较当包含更多系数时发生的情况:

enter image description here


然而,在Matlab中,通常避免使用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指定为行向量,并将向量for指定为列向量,则可以为每个t计算k,然后沿第一维求和获得系列:

F