Numerical computation of double integral

In summary, the conversation discusses a MATLAB code for computing a double integral using the trapezium rule. The code is used to compute the inverse Fourier transform of a 2D Gaussian, but results in some unexpected values. The conversation also mentions some typos in the code and a potential issue with the definition of the function. However, it is concluded that the problem lies with the definition and not the integral algorithm.
  • #1
hunt_mat
Homework Helper
1,782
32
Hi,

I wrote a piece of MATLAB code to compute a double integral of the form:
[tex]
\int_{a}^{b}\int_{c}^{d}f(x,y)dxdy
[/tex]
I went about it using the trapezium rule, so what I did was apply the rule to the [itex]x[/itex] variable first to obtain:
[tex]
\int_{a}^{b}\int_{c}^{d}f(x,y)dxdy\approx\frac{\delta x}{2}\int_{c}^{d}2\sum_{i=1}^{N}f(x_{i},y)-f(a,y)-f(b,y)dy
[/tex]
I then went on to apply the trapezium rule in the [itex]y[/itex] variable to obtain:
[tex]
\begin{array}{rcl}
\int_{a}^{b}\int_{c}^{d}f(x,y)dxdy & = & \left(\sum_{i=1}^{N}\sum_{j=1}^{M}f(x_{i},y_{j})-\frac{1}{2}\sum_{i=1}^{N}f(x_{i},c)-\frac{1}{2}\sum_{i=1}^{N}f(x_{i},d)\right)\delta x\delta y \\
& - & \frac{1}{2}\left(\sum_{j=1}^{M}f(a,y_{j})-\sum_{j=1}^{M}f(b,y_{j})\right)\delta x\delta y \\
& - & \frac{1}{2}(f(a,c)+f(b,c)+f(a,d)+f(b,d))\delta x\delta y
\end{array}
[/tex]
I tried using this to compute the inverse Fourier transform of the 2d Gaussian and I got some rather bad results.
I include the results. Not what I expected.
 
Last edited:
Physics news on Phys.org
  • #2
The picture of the results, On one exis it seems to work whereas on the other it doesn't.

Thoughts?
 

Attachments

  • gauss_2d.png
    gauss_2d.png
    8.2 KB · Views: 488
  • #3
There seems to be missing a factor (1/2) before sum f(xi,d).
And the minus sign before f(b,yj) should probably be a plus sign.
Should I assume those are just typos?

Beyond that, your formula is symmetrical in x and y.
So if it yields an asymmetric result, you probably made a typing mistake.
Perhaps typing an i somewhere where there should be a j, or something like that.
Or perhaps one of the typos I already mentioned.
 
  • #4
There is the code I used:
function y=trap_2d(A,dx,dy)
N=length(A(:,1));
M=length(A(1,:));

a=A(1,1)+A(1,M)+A(N,1)+A(N,M);
b=sum(A(1,:))+sum(A(N,:));
c=sum(A(:,1))+sum(A(:,M));
u=zeros(1,N);
for i=1:N
u(i)=sum(A(i,:));
end

d=sum(u);

y=(d-0.5*c-0.5*b-0.25*a)*dx*dy;

I first input the integrand as a matrix and then just do the sums in the equation as I said. Another thing that I am worried about is that as I am taking the4 inverse Fourier transform of the Gaussian, it shouldn't be coming out to that high a number.
 
  • #5
It turned out that it wasn't the algorithm for the 2d trapezium rule that was the problem, but the definition of the function itself. I am still off with the scaling though.
 

Attachments

  • gauss_2d.jpg
    gauss_2d.jpg
    9.7 KB · Views: 448
  • #6
Sorry, but I've got no clue how to give a meaningful response to your last 2 replies.
 
  • #7
The integral algorithm wasn't the problem as it turns out, but another problem with the definition, I defined the 2D Gauss function as
[tex]
\pi e^{(k^{2}+l^{2})/4}
[/tex]
The algorithm I used to compute the inverse Fourier transform is:
const=1/(4*pi^2);
%Now compute the inverse tranform.

for i=1:n
for j=1:m
A=gauss_2d(K,L).*exp(sqrt(-1)*(K*x(i)+L*y(j)));
eta(i,j)=const*real(trap_2d(A,dx,dy));
end
end

I think that there is a problem here.
 
  • #9
It appears to be fine, I am taking the 2d Fourier transform of:
[tex]
f(x,y)=e^{-(x^{2}+y^{2})}
[/tex]
This has a Fourier transform of:
[tex]
\hat{f}(k,l)=\pi e^{-(k^{2}+l^{2})/4}
[/tex]
So I don't think my constants off.
 

1. What is a double integral?

A double integral is a type of numerical computation used in mathematics and physics to calculate the volume under a surface in a two-dimensional coordinate system. It involves integrating a function of two variables over a specific region in the coordinate system.

2. What is the purpose of computing a double integral?

The purpose of computing a double integral is to find the volume under a surface in a two-dimensional coordinate system. This can be useful in various fields, such as physics, engineering, and economics, where calculating the volume of a three-dimensional object is required.

3. How is a double integral computed numerically?

A double integral can be computed numerically using methods such as Riemann sums, Monte Carlo integration, and Gaussian quadrature. These methods involve breaking the region of integration into smaller subregions and approximating the integral by summing the contributions from each subregion.

4. What are the limitations of numerical computation of double integrals?

The accuracy of numerical computation of double integrals depends on the chosen method and the number of subregions used. As the number of subregions increases, the computation becomes more accurate, but it also becomes more computationally intensive. Additionally, numerical computation may not be suitable for functions that are highly oscillatory or have singularities.

5. How is the accuracy of a numerical double integral determined?

The accuracy of a numerical double integral can be determined by comparing the results obtained using different methods and with an analytical solution, if available. Additionally, the error can be estimated by computing the integral using smaller subregions and comparing it to the result obtained with larger subregions.

Similar threads

Replies
5
Views
379
Replies
16
Views
2K
Replies
2
Views
1K
Replies
7
Views
1K
Replies
1
Views
928
Replies
4
Views
741
Replies
8
Views
1K
Replies
3
Views
1K
Replies
24
Views
2K
Replies
20
Views
2K
Back
Top