matlab - 用for循环在matlab中绘制傅里叶级数
问题描述
我正在尝试绘制傅立叶级数之后的傅立叶级数;
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)
解决方案
您在循环时犯了一个错误,您实际上不想随着时间循环,而是在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
列向量,则可以计算F
每个k
,然后将其沿第一个维度求和以获得系列:
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);
推荐阅读
- python - SyntaxError:无效的语法
- javascript - 循环对象时更新状态值
- c# - 使用 WinAppDriver,我需要有关如何在 WPF 应用程序中打开新窗口时更改焦点的帮助
- excel - 在多列上使用“文本到列”宏
- selenium - 如何为执行确定 IEDriver 位
- python - Django - 管理员 - 在 change_form 中添加链接,该链接重定向到另一个 change_form - 设置具有值的字段
- r - 基于另一个数据帧中的行创建多个新数据帧,并在 r 中使用 for 循环
- c++ - 小部件内的 Qt/C++ 小部件未出现
- jenkins - 项目角色库访问在 Jenkins 中不起作用
- java - 当您必须向调用者返回值时,使用单独的线程会提高性能吗?