www.gusucode.com > 高等数学问题求解源码程序 > CH07/Evolute_Draw.m
function Evolute_Draw(varargin) %EVOLUTE_DRAW 绘制曲线的渐屈线 % EVOLUTE_DRAW(FUN,RANGE) % EVOLUTE_DRAW(FUNX,FUNY,RANGE) % % 输入参数: % ---FUN:曲线函数的一般方程 % ---FUNX,FUNY:曲线函数的参数方程 % ---RANGE:绘图区间 % % See also diff, diff_para args=varargin; range=args{end}; if nargin==2 y=args{1}; x=sym('x','real'); s=symvar(y); if length(s)>1 error('函数fun必须只包含一个符号变量.') end if ~isequal(x,s) y=subs(fun,s,x); end df=simple(diff(y,x)); d2f=simple(diff(df,x)); elseif nargin==3 x=args{1}; y=args{2}; t=sym('t','real'); s=unique([symvar(x),symvar(y)]); if length(s)>1 error('函数funx和funy必须只包含一个符号变量.') end if ~isequal(t,s) x=subs(x,s,t); y=subs(y,s,t); end df=simple(diff_para(y,x,t,1)); d2f=simple(diff_para(y,x,t,2)); else error('The number of input arguments is illegal.') end X=inline(x); Y=inline(y); alpha=inline(simple(x-df*(1+df^2)/d2f)); beta=inline(simple(y+(1+df^2)/d2f)); theta=linspace(range(1),range(2),300); plot(X(theta),Y(theta),'k',alpha(theta),beta(theta),'r--') xx=sort([X(range),alpha(range)]); xlim([xx(1) xx(end)]) web -broswer http://www.ilovematlab.cn/forum-221-1.html