使用 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);
我正在尝试绘制傅里叶级数之后的傅里叶级数;
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);