我的傅里叶级数不符合图表
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
个项
- 否则,傅立叶级数包含
sin
和 cos
项的混合。
在你的例子中,函数既不是偶数也不是奇数,所以你应该期望 sin
和 cos
项都存在。但是,您只计算 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
它应该给你下面的图(蓝线是原始函数,红线是傅里叶级数展开):
我正在尝试绘制一个应该适合原始图形的傅里叶级数(这是正确的),但我不知道哪里出了问题。我还仔细检查了傅里叶近似值。
原图生成方式:
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
个项 - 否则,傅立叶级数包含
sin
和cos
项的混合。
在你的例子中,函数既不是偶数也不是奇数,所以你应该期望 sin
和 cos
项都存在。但是,您只计算 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
它应该给你下面的图(蓝线是原始函数,红线是傅里叶级数展开):