Dealing with complex integrals of a highly oscillatory type

4 views (last 30 days)
The following integral can be computed analytically using complex integration (required due to the pole at the origin):
However, if I try to evaluate this numerically, I run into trouble. Two approaches
1. Numerically: This is doomed to fail due to the function's behaviour at the origin.
fun = @(x) exp(1j*x)./x;
integral(fun,-inf,inf)
Warning: Reached the limit on the maximum number of intervals in use. Approximate bound on error
is 9.8e+00. The integral may not exist, or it may be difficult to approximate numerically to
the requested accuracy.
2. Symbolically: This gives the wrong answer and leaves a limit to be evaluated
syms x;
f(x) = exp(1j*x)/x;
int(f,[-inf,inf],'PrincipalValue',true)
ans =
- pi*1i + limit(- ei(-1i/eps27) + ei(1i/eps27), eps27, 0, 'Right')
What is the way to evaluating such integrals in matlab? I suspect the trouble is not at the origin, but at how the function is behaving (numerically) at the end points.
PS: I did try to use the chebfun library here, but it didn't seem to help.

Answers (1)

Alan Stevens
Alan Stevens on 29 Jul 2020
I don't know in general, but for this particular integral, since cos(x)/x is odd, its contribution to the integral is zero and we can do the following:
>> syms x
>> I = i*int(sin(x)/x,-inf,inf)
I =
pi*1i
  1 Comment
xadu
xadu on 29 Jul 2020
True, for this particular case it solves the problem.. but the problem remains if a general oscillatory type of integral is encountered. In fact, I came across this problem while working on a (complicated looking) kernel -- and then boiled it down to the above, simpler integral for the purpose of posting the question. Thanks, though :).

Sign in to comment.

Categories

Find more on Programming 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!