【问题标题】:Plotting a symbolic Fourier series绘制符号傅立叶级数
【发布时间】:2018-05-04 09:14:20
【问题描述】:

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

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

问题是,当我尝试绘制 func1FS1 = FourierSeries(func1, 4) 时,我不断收到一个错误提示

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

如何绘制这个傅里叶级数?

【问题讨论】:

  • 我没有符号工具箱,所以无法运行任何检查,但文档搜索表明 fplot 函数可能会有所帮助

标签: matlab plot symbolic-math continuous-fourier


【解决方案1】:
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 将符号表达式转换为字符串,前提是工作区中存在符号变量 xdouble 然后将字符串转换为实际数字,由于 FS 中有 4 个项,我们需要将它们相加,毕竟这就是傅里叶级数。

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

figure
hold on
fplot(func1,'b')
fplot(sum(FS1),'r') % sum over the Fourier components
legend ('func1', 'FS1')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-28
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    • 2014-11-16
    • 1970-01-01
    相关资源
    最近更新 更多