www.gusucode.com > 高等数学问题求解源码程序 > CH12/PartialDerivative.m
function P=PartialDerivative(fun,var,varargin) %PARTIALDERIVATIVE 根据偏导数的定义求多元函数的偏导数 % P=PARTIALDERIVATIVE(FUN,VAR) 求函数FUN关于变量VAR的偏导数 % P=PARTIALDERIVATIVE(FUN,VAR,X,A,Y,B,...) 求函数FUN关于VAR的在 % 点(A,B,...)上的偏导数的值 % P=PARTIALDERIVATIVE(FUN,VAR,{'X=A','Y=B',...}) 同上 % % 输入参数: % ---FUN:多元符号函数 % ---VAR:符号自变量 % ---X,Y,...:函数的符号变量 % ---A,B,...:函数的符号变量的值 % 输出参数: % ---P:返回的偏导数或偏导数的值 % % See also diff, limit h=sym('h','real'); s=symvar(fun); if ~ismember(var,s) error('Symbols variables not designated.') end delta=subs(fun,var,sym(var+h))-fun; P1=limit(delta/h,h,0); if nargin==2 P=P1; elseif nargin==3 x0=varargin{:}; N=length(x0); if N>length(s) error('Too many Symbols variable-values.') end vars=cell(1,N); values=cell(1,N); for k=1:N kk=strfind(x0{k},'='); vars{k}=x0{k}(1:kk-1); values{k}=str2double(x0{k}(kk+1:end)); end P=subs(P1,vars,values); elseif nargin>3 && ~mod(nargin,2) vars=cell(1,nargin/2-1); values=cell(1,nargin/2-1); for k=1:length(varargin)/2 vars{k}=varargin{2*k-1}; values{k}=varargin{2*k}; end P=subs(P1,vars,values); else error('Illegal numbers of input arguments.') end web -broswer http://www.ilovematlab.cn/forum-221-1.html