www.gusucode.com > 高等数学问题求解源码程序 > CH09/fseries.m
function [A,B,F,type]=fseries(f,x,n,a,b) %FSERIES 傅里叶级数求解,并返回傅里叶级数的类型 % [A,B,F]=FSERIES(FUN,X,N) 求奇(或偶)函数FUN在区间[-pi,pi]上的N阶傅里叶展式 % [A,B,F]=FSERIES(FUN,X,N,ALPHA,BETA) 求奇(或偶)函数FUN在指定区间上的N阶傅里叶展式 % [A,B,F,TYPE]=FSERIES(...) 求函数的傅里叶展式并返回傅里叶级数类型 % % 输入参数: % ---FUN:给定的待展开函数 % ---X:自变量 % ---N:展开项数 % ---ALPHA,BETA:级数展开区间,默认值为[-pi,pi] % 输出参数: % ---A,B:傅里叶系数向量 % ---F:函数的傅里叶展开式 % ---TYPE:傅里叶级数类型字符串 % % See also int, fseriessym, fseriesquadl if nargin==3 a=-pi;b=pi; end L=(b-a)/2; f1=subs(f,-x); A=sym(zeros(1,n+1)); B=sym(zeros(1,n)); F=0; if isequal(simple(f+f1),0) % 奇函数 for k=1:n B(k)=2*int(f*sin(k*pi*x/L),x,0,L)/L; F=F+B(k)*sin(k*pi*x/L); end type='正弦级数'; elseif isequal(f,f1) % 偶函数 for k=0:n A(k+1)=2*int(f*cos(k*pi*x/L),x,0,L)/L; F=F+A(k+1)*cos(k*pi*x/L); end type='余弦级数'; else % 一般函数 A(1)=int(f,x,-L,L)/L; F=A(1)/2; for k=1:n A(k+1)=int(f*cos(k*pi*x/L),x,-L,L)/L; B(k)=int(f*sin(k*pi*x/L),x,-L,L)/L; F=F+A(k+1)*cos(k*pi*x/L)+B(k)*sin(k*pi*x/L); end type='一般三角级数'; end web -broswer http://www.ilovematlab.cn/forum-221-1.html