作业帮 > 综合 > 作业

matlab 怎么进行傅里叶级数展开?

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/21 14:03:08
matlab 怎么进行傅里叶级数展开?

请问这个函数是怎么进行傅里叶级数展开的?
syms x;
f=(x-abs(x))/2;
xx=-pi:.01:pi;
yy=subs(f,x,xx);
plot(xx,yy,'-'),hold on
for n=4:4:20
    [a,b,f1]=f_series(f,x,n);
    y1=subs(f1,x,xx);
    plot(xx,y1,'-.');
      if n= =8
        f1
    end
end
这个程序又为什么运行不出来?
你上面的程序,f_series函数是否有定义?若无定义,或定义不准确都有可能出错 将傅里叶系数的计算(输出a0,an,bn)以及函数图像的绘制编到m文件中 function [a0,an,bn]=fly(f,l,k)
%f为一个周期内的分段函数(分两段,对分两段以上的函数可类似处理)  
%2l为周期
%k为近似展开项数,k≥1 %计算傅里叶系数
syms x n L
a0=1/L*int(f(1),-L,0)+1/L*int(f(2),0,L);
an=1/L*int(f(1)*cos(n*pi*x/L),-L,0)+1/L*int(f(2)*cos(n*pi*x/L),0,L);
bn=1/L*int(f(1)*sin(n*pi*x/L),-L,0)+1/L*int(f(2)*sin(n*pi*x/L),0,L); %选择作图步长p
if k>=4
    p=fix(k/4);
else
    p=1;
end %绘制4个近似子图
for i=1:4
    f=a0/2+symsum(an*cos(n*pi*x/L)+bn*sin(n*pi*x/L),n,1,i*p);
    f=subs(f,L,l);
    subplot(2,2,i),ezplot(f,[-3*l,3*l]),title(['n=',int2str(i*p)])
end 
输入:  
f=sym('[x,0]');
[a0,an,bn]=fly(f,pi,32)
输出:a0 =
       -1/2*L
 
an =
       -L*(cos(n*pi)+sin(n*pi)*n*pi-1)/n^2/pi^2
 
bn =
       -L*(-sin(n*pi)+cos(n*pi)*n*pi)/n^2/pi^2 显然以上结果并未化简(例如,sin(n*pi)=0)有了傅里叶系数,利用公式f(x)=a0/2+∑{1,∞}[an*cos(n*pi*x/L)+bn*sin(n*pi*x/L)],即得到展开式 输出图像: