Code covered by the BSD License  

Highlights from
Vectorized quadrature function

from Vectorized quadrature function by Loren Shure
quadvec provides a way to perform higher order integration in MATLAB over non-rectangular domains.

quadvec(f, varargin)
function q = quadvec(f, varargin)
% QUADVEC calls quad but assumes you can't vectorize your input function.
%   QUADVEC has the same calling syntax as QUAD but doesn't require that
%   the integrand be vectorized.  This makes QUADVEC suitable to perform
%   double-, triple-, and higher order integrals over a non-rectangular
%   domain.
%   Q = QUADVEC(FUN,A,B) tries to approximate the integral of scalar-valued
%   function FUN from A to B to within an error of 1.e-6 using recursive
%   adaptive Simpson quadrature. FUN is a function handle. 
%
%   Example:
%   Compute area of ellipse by computing the result in one quadrant and
%   then multiplying by 4.  Note that the inner integrand has integration
%   limits that are a function of the semi-major and semi-minor ellipse
%   axes, a and b.  
%   First we set up the function handle to the inner integrand, fh.
%   a = 4; b = 3;
%   fh = @(x) quadl(@(y) ones(size(y)), 0, b*sqrt(1-(x/a).^2));
%   ea = 4 * quadvec(fh , 0, a);
%   ea-pi*a*b  % compare integration result to closed-form solution
%
%  Note: This functionality has since been added to MATLAB with the function
%  QUADV.

%   Copyright 2006 The MathWorks, Inc.

  q = quadl(@g, varargin{:}); % like quadl, but supplies g as the argument
  function y = g(X) % make f into a "vectorized" function
    y = zeros(size(X));
    for i = 1:numel(X)
      y(i) = f(X(i)); % this f refers to the argument of quadvec
    end
  end
end

Contact us