matlab 怎么进行傅里叶级数展开?请问这个函数是怎么进行傅里叶级数展开的?syms x;f=(x-abs(x))/2;xx=-pi:.01:pi;yy=subs(f,x,xx);plot(xx,yy,'-'),hold onfor n=4:4:20 [a,b,f1]=f_series(f,x,n); y1=subs(f1,x,xx); pl

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/29 22:33:52

matlab 怎么进行傅里叶级数展开?请问这个函数是怎么进行傅里叶级数展开的?syms x;f=(x-abs(x))/2;xx=-pi:.01:pi;yy=subs(f,x,xx);plot(xx,yy,'-'),hold onfor n=4:4:20 [a,b,f1]=f_series(f,x,n); y1=subs(f1,x,xx); pl
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
这个程序又为什么运行不出来?

matlab 怎么进行傅里叶级数展开?请问这个函数是怎么进行傅里叶级数展开的?syms x;f=(x-abs(x))/2;xx=-pi:.01:pi;yy=subs(f,x,xx);plot(xx,yy,'-'),hold onfor n=4:4:20 [a,b,f1]=f_series(f,x,n); y1=subs(f1,x,xx); pl

你上面的程序,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)],即得到展开式

 

输出图像: