Path: news.mathworks.com!not-for-mail From: <HIDDEN> Newsgroups: comp.soft-sys.matlab Subject: Re: Help with discrete double integral Date: Mon, 9 Aug 2010 21:07:04 +0000 (UTC) Organization: The MathWorks, Inc. Lines: 27 Message-ID: <i3pqlo$ctg$1@fred.mathworks.com> References: <i3p629$8oh$1@fred.mathworks.com> <i3p9ap$9ih$1@fred.mathworks.com> <i3pfrd$aca$1@fred.mathworks.com> Reply-To: <HIDDEN> NNTP-Posting-Host: webapp-03-blr.mathworks.com Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Trace: fred.mathworks.com 1281388024 13232 172.30.248.38 (9 Aug 2010 21:07:04 GMT) X-Complaints-To: news@mathworks.com NNTP-Posting-Date: Mon, 9 Aug 2010 21:07:04 +0000 (UTC) X-Newsreader: MATLAB Central Newsreader 1187260 Xref: news.mathworks.com comp.soft-sys.matlab:660500 "Chen Chen" <chenchen_ee@yahoo.com> wrote in message <i3pfrd$aca$1@fred.mathworks.com>... > I just simplify the problem i want to solve to this imple double mathematical problem. I thought it would be confusing if I explained the whole thing. > Sorry I didn't state the problem clearly. Here is a specific version. > These numbers are given sets of data. That is: x and y are two sets of data which are given at the first place. Let's say both the x and y are 1 X N vectors. f(x,y) is given too and it's an N X N matrix. q(x) is a function depending on x only and I know the function already. So q(x) is a 1 X N vectors with known numbers. > My problem is that I don't know how to integrate f(x,y)*f(x) over x and y numerically. I hope I expained it clearly this time. > > Chen - - - - - - - - - - With discrete-valued variables you cannot use any of matlab's "quad" type integration routines which require functions. However you can use an iterated form of trapz which does trapezoidal integration. Let X be a column vector of monotone x values in which X(1) = a and X(N) = b. Let Y be a column vector of monotone y values for which Y(1) = c and Y(M)= d. Let F be an N x M array in which F(i,j) = f(X(i),Y(j)). (Your f(x,y) ) Let Q be a column vector in which Q(i) = q(X(i)) (your q(x) ). Then do this: I = trapz(X,Q.*trapz(Y,F.').'); This will give the two-dimensional "trapezoidal" approximation to your desired double integral over the stated rectangle. The approximation made is this. In each rectangular cell with corners at (X(i),Y(j), (X(i+1),Y(j), (X(i),Y(j+1), and (X(i+1),Y(j+1), the integral is approximated by the average of the integrand q(x)*f(x,y) evaluated at these four corners multiplied by the (signed) area of the rectangle. The final value I is the sum of these. This integration can be considered as a first-order approximation to the exact double integral. I think if you look hard enough there may be some higher order integration routines listed on the file exchange which could possess higher accuracy, though if so, I don't remember where they are located. Roger Stafford