www.gusucode.com > 高等数学问题求解源码程序 > CH15/fouriern.m
function varargout=fouriern(fun,oldvars,newvars,type,method) %FOURIERN 多重傅里叶变换的求解 % F2=FOURIERN(F1,OLDVARS,NEWVARS) 求函数F1的多重傅里叶变换 % F2=FOURIERN(F1,OLDVARS,NEWVARS,TYPE) 求函数F1的傅里叶变换或逆变换, % 变换类型由TYPE指定 % F2=FOURIERN(F1,OLDVARS,NEWVARS,TYPE,METHOD) 指定采用fourier函数求变换还是 % 采用int函数求解 % [F2,S]=FOURIERN(...) 求多重傅里叶变换并返回变换类型 % % 输入参数: % ---F1:初始函数 % ---OLDVARS:函数F1的变量 % ---NEWVARS:变换后的变量 % ---TYPE:指定变换类型,有'fourier'和'ifourier'两种取值 % ---METHOD:指定求解变换的方法,有'fourier'和'int'两种方法 % 输出参数: % ---F2:求变换后的函数 % ---S:变换类型,对应于TYPE % % See also fourier, int if nargin<5 method='fourier'; end if nargin<4 || isempty(type) type='fourier'; end if ~isa(fun,'sym') error('FUN must be a Symbolic function.') end N=length(oldvars); if length(newvars)~=N error('变量维数不一致.') end switch lower(method) case 'fourier' fcn=lower(type); for k=1:N fun=feval(fcn,fun,oldvars(k),newvars(k)); end case 'int' if isequal(lower(type),'fourier') for k=1:N fun=int(fun*exp(-1j*oldvars(k)*newvars(k)),oldvars(k),-inf,inf); end elseif isequal(lower(type),'ifourier') for k=1:N fun=1/2/pi*int(fun*exp(1j*oldvars(k)*newvars(k)),... oldvars(k),-inf,inf); end else error('Illegal TYPE.') end otherwise error('Illegal METHOD.') end if nargout==1 varargout{1}=fun; elseif nargout==2 varargout{1}=fun;varargout{2}=[upper(type),'变换']; end web -broswer http://www.ilovematlab.cn/forum-221-1.html