%   ==== Six Point Composite Gauss Formula ====
%   ====   With Weight Factors Included    ====


function area = gquad6(fun,xlow,xhigh,mparts)
%  area = gquad6(fun,xlow,xhigh,mparts)
%  This function determines the area under an externally
%  defined function fun(x) between limits xlow and xhigh. The
%  numerical integration is performed using a composite gauss
%  integration rule.  The whole interval is divided into mparts
%  subintervals and the integration over each subinterval
%  is done with a six point Gauss formula which involves base
%  points bp and weight factors wf.  The normalized interval
%  of integration for the bp and wf constants is -1 to +1.  the
%  algorithm is structured in terms of a parameter mquad = 6 which
%  can be changed along with bp and wf to accommodate a different
%  order formula.  The composite algorithm is described by the
%  following summation relation
%  x=b                     j=n k=m
%  integral( f(x)*dx ) = d1*sum sum( wf(j)*fun(a1+d*k+d1*bp(j)) )
%  x=a                     j=1 k=1
%        where d = (b-a)/m, d1 = d/2, a1 = a-d1,
%              m = mparts, and n = nquad.
%

%     by Howard B. Wilson, U. of Alabama, Spring 1990

%  The weight factors are
wf = [ 1.71324492379170d-01;   3.60761573048139d-01;...
        4.67913934572691d-01]; wf=[wf;wf([3 2 1])];

%  The base points are
bp = [-9.32469514203152d-01;  -6.61209386466265d-01;...
      -2.38619186083197d-01]; bp=[bp;-bp([3 2 1])];

d = (xhigh - xlow)/mparts;  d2 = d/2;  nquad = length(bp);
x = (d2*bp)*ones(1,mparts) + (d*ones(nquad,1))*(1:mparts);
x = x(:) + (xlow-d2); fv=feval(fun,x); wv = wf*ones(1,mparts);

area=d2*(wv(:)'*fv(:));
