www.gusucode.com > 高等数学问题求解源码程序 > CH07/LHospital.m
function varargout=LHospital(num,den,x,a) %LHOSPITAL 洛必达法则求极限 % L=LHOSPITAL(NUM,DEN)或L=LHOSPITAL(NUM,DEN,[]) 洛必达法则计算NUM/DEN在0处的极限 % L=LHOSPITAL(NUM,DEN,X) 洛必达法则计算NUM/DEN关于X=0处的极限 % L=LHOSPITAL(NUM,DEN,X,A) 洛必达法则计算NUM/DEN关于X=A处的极限 % [L,FORM]=LHOSPITAL(...) 洛必达法则计算NUM/DEN的极限并返回极限值L和未定式类型FORM % [L,FORM,K]=LHOSPITAL(...) 洛必达法则计算NUM/DEN的极限并返回极限值L、 % 未定式类型FORM和洛必达法则使用次数K % % 输入参数: % ---NUM,DEN:极限式的分子和分母表达式 % ---X:符号自变量 % ---A:极限点 % 输出参数: % ---L:极限值 % ---FORM:未定式类型,包括'∞/∞'和'0/0' % ---K:洛必达法则使用次数 % % See also diff, subs if nargin<4 a=0; end if nargin<3 || isempty(x) x=unique([symvar(num),symvar(den)]); if length(x)>1 error('The Symbolic variable not point out.') end end fa=subs(num,x,a); Fa=subs(den,x,a); if isinf(fa) && isinf(Fa) form='∞/∞'; elseif fa==0 && Fa==0 form='0/0'; else error('未定式型式不正确.') end k=1; while 1 num=diff(num); den=diff(den); fa=subs(num,x,a); Fa=subs(den,x,a); switch form case '∞/∞' if isinf(Fa) && ~isinf(fa) L=0; break end if ~isinf(Fa) L=subs(num/den,x,sym(a)); break end case '0/0' if Fa==0 && fa~=0 L=inf; break end if Fa~=0 L=subs(num/den,x,sym(a)); break end end k=k+1; end if nargout==1 varargout{1}=L; elseif nargout==2 varargout{1}=L; varargout{2}=form; elseif nargout==3 varargout{1}=L; varargout{2}=form; varargout{3}=k; else error('Wrong number of output arguments.') end web -broswer http://www.ilovematlab.cn/forum-221-1.html