首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >符号傅里叶级数的绘制

符号傅里叶级数的绘制
EN

Stack Overflow用户
提问于 2018-05-04 09:14:20
回答 1查看 1K关注 0票数 0

我写了傅里叶级数的代码。到目前为止,这就是我所拥有的:

代码语言:javascript
复制
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

然后,我还创建了以下函数文件:

代码语言:javascript
复制
function y = func1(x)
syms x
y = (x^2);
end

问题是,当我试图绘制func1FS1 = FourierSeries(func1, 4)时,我总是收到一个错误,上面写着

数据必须是数字、日期时间、持续时间或可转换为双倍的数组。

我如何绘制这个Fourier级数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-04 09:26:51

代码语言:javascript
复制
whos FS1
  Name      Size            Bytes  Class    Attributes

  FS1       1x4                 8  sym   

这告诉您,FS1是一个符号函数,需要在绘制它之前对其进行评估:

代码语言:javascript
复制
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 (在本例中为x)。然后,double将字符串转换成一个实际的数字,因为FS中有4个术语,所以我们需要对它们进行求和,这就是傅里叶级数到底是什么。

更短的是,不要用数字计算它,而是使用MATLAB内置的符号绘图函数fplot

代码语言:javascript
复制
figure
hold on
fplot(func1,'b')
fplot(sum(FS1),'r') % sum over the Fourier components
legend ('func1', 'FS1')

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50171362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档