www.gusucode.com > 高等数学问题求解源码程序 > CH09/fseriesquadl.m

    function [A,B,F] = fseriesquadl(fun,x,n,a,b)
%FSERIESQUADL   傅里叶级数的数值求解
% [A,B,F]=FSERIESQUADL(FUN,X,N)  求函数FUN在区间[-pi,pi]上的N阶数值傅里叶展式
% [A,B,F]=FSERIESQUADL(FUN,X,N,ALPHA,BETA)  求函数FUN在指定区间上的数值傅里叶展式
%
% 输入参数:
%     ---FUN:给定的待展开函数
%     ---X:自变量数据
%     ---N:展开项数
%     ---ALPHA,BETA:级数展开区间,默认值为[-pi,pi]
% 输出参数:
%     ---A,B:傅里叶系数向量
%     ---F:函数的傅里叶展开式在X上的值
%
% See also quadl, fseriessym

if nargin==3
    a=-pi;b=pi; 
end
L=(b-a)/2;
f=inline(fun);
var=char(argnames(f));
A=zeros(1,n+1);B=zeros(1,n);
A(1) = quadl(f,-L,L)/L; % 计算A_0
F=A(1)/2;
for k=1:n;
    fcos=inline(['(',fun,')','.*cos(',num2str(k*pi/L),'*',var,')']); 
    fsin=inline(['(',fun,')','.*sin(',num2str(k*pi/L),'*',var,')']); 
    A(k+1) =quadl(fcos,-L,L)/L;  % 计算系数A(2:n+1)
    B(k)=quadl(fsin,-L,L)/L;  % 计算系数B(1:n)
    F=F+A(k+1)*cos(k*pi*x/L)+B(k)*sin(k*pi*x/L);
end
web -broswer http://www.ilovematlab.cn/forum-221-1.html