我的傅里叶级数不符合图表

My fourier series doesn't fit the graph

我正在尝试绘制一个应该适合原始图形的傅里叶级数(这是正确的),但我不知道哪里出了问题。我还仔细检查了傅里叶近似值。

原图生成方式:

t=-pi:0.01:0;
x=ones(size(t));
plot(t,x)
axis([-3*pi 3*pi -1 4])
hold on
t=0:0.01:pi;
y=cos(t);
plot(t,y)

而傅立叶级数是通过以下方式生成的:

t=-pi:0.01:pi;
f=1/2;
for n=1:5
    costerm=0;
    if n/2== round(n/2)
        sinterm=((-2*n)/(pi*(1-n^2)))*sin(2*n*t); 
    else
        sinterm= (-2/(pi*n))*sin(2*n*t);
    end
    f=f+sinterm+costerm;
end
plot(t,f)

图形如下所示:

谁能告诉我为什么这不起作用?

首先要注意的是,您的绘图中生成的序列在支持区间 [-pi:pi] 中运行了两个周期。这指向您的 sin(2*n*t) 参数中的一个不正确的常量,它应该是 sin(n*t)

另外,一般来说

  • 奇函数只有 sin
  • 即使是函数也只有 cos 个项
  • 否则,傅立叶级数包含 sincos 项的混合。

在你的例子中,函数既不是偶数也不是奇数,所以你应该期望 sincos 项都存在。但是,您只计算 sinterm 并留下 costerm=0。更具体地说,虽然所有 n>1 的余弦级数系数的计算结果为 0,但实际上您遗漏了 n=1 的项,即 0.5*cos(t).

通过这些更正,您应该得到

f=1/2 + 0.5*cos(t);
for n=1:5
    if 0==mod(n,2)
        sinterm=((-2*n)/(pi*(1-n^2)))*sin(n*t); 
    else
        sinterm= (-2/(pi*n))*sin(n*t);
    end
    f=f+sinterm;
end

它应该给你下面的图(蓝线是原始函数,红线是傅里叶级数展开):