www.pudn.com > 精通Matlab综合辅导与指南-源程序.zip > mmfill.m
function [a0,a1,a2]=mmfill(x,y,a3,a4,a5,a6)
%MMFILL Fill Plot of Area Between Two Curves.
% MMFILL(X,Y,Z,C,LB,UB) plots y=f(x) and z=g(x) and fills the
% area between the two curves from LB<= X <=UB with colorspec C.
% X,Y and Z are data vectors of the same length.
% Missing arguments take on default values. Examples:
% MMFILL(X,Y) fills area under y=f(x) with red.
% MMFILL(X,Y,C) fills area under y=f(x) with colorspec C.
% MMFILL(X,Y,Z) fills area between y=f(x) and z=g(x) with red.
% MMFILL(X,Y,Z,C) fills area between y=f(x) and z=g(x) with C.
% MMFILL(X,Y,LB,UB) fills area under y=f(x) in red between bounds.
% MMFILL(X,Y,C,LB,UB) fills area under y=f(x) with C between bounds.
% MMFILL(X,Y,Z,LB,UB) fills area between curves with red between bounds.
%
% A=MMFILL(...) returns the approximate area filled by calling TRAPZ.
% [Hl,Hp]=MMFILL(...) returns handles to the two lines in Hl and
% a handle to filled patch in Hp.
% [A,Hl,Hp]=MMFILL(...) returns the area and the handles.
% D.C. Hanselman, University of Maine, Orono, ME 04469
% 6/23/95
% Copyright (c) 1996 by Prentice-Hall, Inc.
if nargin==2 % mmfill(x,y)
z=zeros(size(x));c=[1 0 0];lb=-inf;ub=inf;
elseif nargin==3
lb=-inf; ub=inf;
if length(a3)==length(x) % mmfill(x,y,z)
z=a3; c=[1 0 0];
else % mmfill(x,y,c)
z=zeros(size(x)); c=a3;
end
elseif nargin==4
if length(a3)==length(x) % mmfill(x,y,z,c)
z=a3; c=a4; lb=-inf; ub=inf;
else % mmfill(x,y,lb,ub)
z=zeros(size(x)); c=[1 0 0]; lb=a3; ub=a4;
end
elseif nargin==5
if length(a3)~=length(x) % mmfill(x,y,c,lb,ub)
z=zeros(size(x)); c=a3;
else % mmfill(x,y,z,lb,ub)
z=a3; c=[1 0 0]; lb=a4; ub=a5;
end
elseif nargin==6 % mmfill(x,y,z,c,lb,ub)
z=a3; c=a4; lb=a5; ub=a6;
else
error('Incorrect number of input arguments.')
end
x=x(:)'; y=y(:)'; z=z(:)'; % make into row vectors
i=find(x>=lb&x<=ub); % find values between bounds
xp=[x(i) fliplr(x(i))]; % x-axis vertices
yp=[y(i) fliplr(z(i))]; % y-axis vertices
Hl=plot(x,y,'w',x,z,'w');
hold on
Hp=fill(xp,yp,c);
hold off
if nargout==1, a0=trapz(xp,yp);
elseif nargout==2, a0=Hl; a1=Hp;
elseif nargout==3, a0=trapz(xp,yp); a1=Hl; a2=Hp;
end