matlab - 绘制符号傅立叶级数
问题描述
我已经为傅立叶级数编写了代码。这是我到目前为止所拥有的:
function FS = FourierSeries(f,degree)
cosCoefficients = zeros(1,degree);
sinCoefficients = zeros(1,degree);
syms x;
a0 = double((1/pi)*int(f,-pi,pi));
for n = 1:degree
cosCoefficients = cosCoefficients + (1/pi)*int(f*cos(n*x),-pi,pi);
sinCoefficients = sinCoefficients + (1/pi)*int(f*sin(n*x),-pi,pi);
end
for n = 1:degree
FS = 0.5*a0 + cosCoefficients.*cos(n*x) + sinCoefficients.*sin(n*x);
end
然后,我还创建了以下函数文件:
function y = func1(x)
syms x
y = (x^2);
end
问题是,当我尝试绘制func1
and时FS1 = FourierSeries(func1, 4)
,我不断收到一条错误消息
数据必须是数字、日期时间、持续时间或可转换为双精度的数组。
我如何绘制这个傅里叶级数?
解决方案
whos FS1
Name Size Bytes Class Attributes
FS1 1x4 8 sym
这告诉您这FS1
是一个符号函数,需要在绘制它之前对其进行评估:
FS1 = FourierSeries(func1, 4);
xIDX = -10:0.1:10;
array = zeros(size(xIDX));
for ii = 1:numel(xIDX)
x = xIDX(ii);
array(ii) = sum(double(subs(FS1)));
end
figure
plot(array)
subs
将符号表达式转换为字符串,前提是符号变量(x
在这种情况下)存在于工作区中。double
然后将字符串转换为实际数字,由于 中有 4 个项FS
,我们需要将它们相加,这就是傅里叶级数。
更短,不要用数值计算它,而是利用 MATLAB 的内置符号绘图函数fplot
figure
hold on
fplot(func1,'b')
fplot(sum(FS1),'r') % sum over the Fourier components
legend ('func1', 'FS1')
推荐阅读
- c++ - Trie 实现的简洁数据结构
- python - 如何在 for 循环中使用 subprocess.Popen?
- r - 在两点之间拆分字符串列表
- sql-server - SQL Server 内部/默认资源池随时间增加
- java - HP ALM 文件附件
- sql - SQL:计算列 = 值且另一列与第一个条件为真的组中的值相同的行?
- macos - popUpMenuPositioningItem:atLocation:inView 降低了弹出菜单的高度
- nginx - Nginx Ingress - 无法写入事件
- html - 使用 'height:auto' 进行全日历 timeGridWeek 视图
- excel - 对象列表行的方法(删除或添加)失败(然后崩溃)VBA