【问题标题】:Plotting Fourier series for determined function为确定的函数绘制傅里叶级数
【发布时间】:2018-11-05 11:08:41
【问题描述】:
a=[0,pi/2,pi/2,pi];
b=[0,-1,0,0];
plot(a,b)
hold on
n=50;
ao=-pi/4;
T=[0,pi,0,1];
for i=1:length(T)
    t=linspace(a(i),b(i));
end
suma=0;
for i=1:n 
    bn=cos(pi*i)/2/i;
    an=(1-cos(pi*i))/4/(i)^2;
    suma=suma+(bn.*sin(2.*i.*t))+(an.*cos(2.*i.*t));
end
series=ao/2+suma;
plot(t,series)

我需要绘制两个函数:确定函数及其傅立叶级数,但我在绘制傅立叶时遇到了一些问题,它没有与第一个结合。我可以猜到问题在tT,但不知道如何解决。

【问题讨论】:

  • 您认为您的问题出在绘图上,但我认为这很可能在a0anbn 的定义上。你能告诉我们你是如何得出这些的吗?
  • 看起来在 for 循环中你不断更新相同的变量,而不是在每一步都定义新的变量
  • @MikhailGenkin 这应该不是问题,OP 也在循环中使用它们。只要正确派生anbn
  • @AnderBiguri,你是对的。但是看看第一个循环,t=linspace(a(i),b(i));
  • @MikhailGenkin 你是绝对正确的。

标签: matlab plot fft


【解决方案1】:

首先,您的系数不正确。你应该得到:

a0 = -.5;
an = -(1/pi)*sin(pi*i)/i + (2/(pi^2*i^2))*sin((pi*i)/2)^2;
bn = -(1/(pi^2*i^2))*sin(pi*i) + 1/(pi*i)*cos(pi*i);

然后,正如其他人指出的那样,您想使用单个长时间向量:

t = linspace(a(1),a(end),1e3);

使用此代码生成您想要的图形

a = [0,pi/2,pi/2,pi];
b = [0,-1,0,0];
plot(a,b)
hold on
n = 50;
T = [0,pi,0,1];

a0 = -.5;
t = linspace(a(1),a(end),1e3);
suma=0;
for i=1:n
    bn = -(1/(pi^2*i^2))*sin(pi*i) + 1/(pi*i)*cos(pi*i);
    an = -(1/pi)*sin(pi*i)/i + (2/(pi^2*i^2))*sin((pi*i)/2)^2;
    suma = suma+(bn.*sin(2.*i.*t))+(an.*cos(2.*i.*t));
end
series = a0/2 + suma;
plot(t,series)

需要注意的是,由于这个函数不是平滑的(有一个跳跃的不连续性),你会遇到吉布斯现象,并且会在不连续性附近看到尖峰。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    相关资源
    最近更新 更多