我试图在傅立叶级数之后绘制傅立叶级数;
f(t)=$$\sum_{k=0}^k \frac{(1)(\sin(2k+1)pi*t)}{2k+1}$$
对于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)
答案 0 :(得分:2)
您正在循环的内容上犯了一个错误,实际上您不想随着时间的过去而循环,而希望经过.env
。现在,您正在遍历.env.local
(从上下文表示时间),但您甚至没有使用k
。
所以正确的方法是循环i
,并设置要包括的最大傅里叶系数,如下所示:
i
您可以通过更改k
来比较当包含更多系数时发生的情况:
然而,在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