www.gusucode.com > 高等数学问题求解源码程序 > CH12/Extremum2.m

    function [xmax,fmax,xmin,fmin]=Extremum2(fun)
%EXTREMUM2   求二元函数的极值与极值点
% [XMAX,FMAX,XMIN,FMIN]=EXTREMUM2(FUN)  求二元函数FUN的极值与极值点
%
% 输入参数:
%     ---FUN:二元函数符号表达式
% 输出参数:
%     ---XMAX,XMIN:极大值和极小值点
%     ---FMAX,FMIN:极大值和极小值
%
% See also diff

if ~isa(fun,'sym')
    error('FUN must be a Symbolic function.')
end
dfx=diff(fun,'x');
dfy=diff(fun,'y');
[x0,y0]=solve(dfx,dfy,'x','y');
xmax=[];xmin=[];
for k=1:length(x0)
    A=subs(diff(dfx,'x'),{'x','y'},{x0(k),y0(k)});
    B=subs(diff(dfx,'y'),{'x','y'},{x0(k),y0(k)});
    C=subs(diff(dfy,'y'),{'x','y'},{x0(k),y0(k)});
    if double(A*C-B^2)>0
        if double(A)<0
            xmax=[xmax;[x0(k),y0(k)]];
        else
            xmin=[xmin;[x0(k),y0(k)]];
        end
    end
end
if ~isempty(xmax)
    fmax=subs(fun,{'x','y'},{xmax(:,1),xmax(:,2)});
else
    fmax=[];
end
if ~isempty(xmin)
    fmin=subs(fun,{'x','y'},{xmin(:,1),xmin(:,2)});
else
    fmin=[];
end
web -broswer http://www.ilovematlab.cn/forum-221-1.html