www.gusucode.com > 高等数学问题求解源码程序 > CH07/Asymptote.m
function equation=Asymptote(fun,varargin) %ASYMPTOTE 求曲线的渐近线 % EQUATION=ASYMPTOTE(FUN,H) 求曲线的水平渐近线,H可以为1,'h','hor'或'horizontal' % EQUATION=ASYMPTOTE(FUN,V,X0) 求曲线的垂直渐近线,V可以为2,'v','ver'或'vertical' % EQUATION=ASYMPTOTE(FUN,L) 求曲线的斜渐近线,L可以为3,'l'或'lean' % % 输入参数: % ---FUN:曲线方程的函数形式 % ---X0:垂直渐近线方程X=X0 % ---H,V,L:指定渐近线的类型,H表示水平渐近线;V表示垂直渐近线;L表示斜渐近线 % 输出参数: % ---EQUATION:渐近线的方程,若不存在,则返回字符串'不存在' % % See also limit type=varargin{1}; x=sym('x','real'); s=symvar(fun); if length(s)>1 error('函数fun必须只包含一个符号变量.') end if ~isequal(x,s) fun=subs(fun,s,x); end switch lower(type) case {1,'h','hor','horizontal'} % 水平渐近线 k=limit(fun,x,inf); if isinf(double(k)) equation='不存在'; else equation=char(['y=',char(k)]); end case {2,'v','ver','vertical'} % 垂直渐近线 x0=varargin{2}; if isempty(x0) || nargin==2 equation='不存在'; else N=length(x0); equation=cell(1,N); for k=1:N if ~isinf(double(limit(fun,x,x0(k),'right'))) &&... ~isinf(double(limit(fun,x,x0(k),'left'))) equation{k}='不存在'; else equation{k}=char(['x=',char(sym(x0(k)))]); end end end case {3,'l','lean'} % 斜渐近线 K=limit(fun/x,x,inf); b=limit(fun-K*x,inf); if isinf(double(K)) || isequal(K,0) equation='不存在'; else equation=char(['y=',char(K),'*x+',char(b)]); end otherwise error('Illegal options.') end web -broswer http://www.ilovematlab.cn/forum-221-1.html