How to numerically evaluate this singular integral in integral2?
Show older comments
Hello,
I am trying to numerically evaluate a 2D integral with an integrand singular along an elliptical curve, please see the simple code below
a = 1;
b = 2;
c = 3;
k = @(x,y) 1./(sqrt(x.^2/a^2+y.^2/b^2)-c);
h = integral2(@(x,y) k(x,y) ,0,10,-10,10);
This yields warnings that "the result fails the global error test" which is evidently because the integrand is singular when
I am curious as to how this integral can be restated to make a numerical integration tractable?
Thanks!
5 Comments
Ryan
on 5 Sep 2024
format long g
a = 1;
b = 2;
c = 3;
k = @(x,y) 1./(sqrt(x.^2/a^2+y.^2/b^2)-c);
N = 20000;
M = 10;
Areas = zeros(1,M);
for K = 1 : M
x = sort(rand(1,N) * (10-0) + 0) .';
y = sort(rand(1,N) * (10-(-10)) + (-10));
f = k(x, y);
Areas(K) = trapz(y, trapz(x, f));
end
Areas
Random sampling is showing a wide range of values. It is unlikely that the integral converges.
Let us make the change of variables,
.
Then the integral becomes,
Now, converting to polar coordinates,
which is obviously a non-convergent integral if and only if
for any
. Since the region of integration is a rectangle of width 10/b and height 10/a, that will happen if c<norm([10/a,10/b]), which it is in this case.
Ryan
on 6 Sep 2024
Answers (1)
As demonstrated in the comment above, the integral is theoretically non-convergent unless c>=norm([10/a,10/b]). Here is a further, numerical test:
a = 1;
b = 2;
c0 = norm([10/a,10/b]); %critical threshold
c=c0*1.0001; %slightly greater than threshold
k = @(x,y) 1./(sqrt(x.^2/a^2+y.^2/b^2)-c);
h = integral2(@(x,y) k(x,y) ,0,10,-10,10)
c=c0*0.9999;%slightly less than threshold
k = @(x,y) 1./(sqrt(x.^2/a^2+y.^2/b^2)-c);
h = integral2(@(x,y) k(x,y) ,0,10,-10,10)
Categories
Find more on Numerical Integration and Differentiation in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!