Evaluate integral over complex path numerically to show that $C_\infty$ is equivalent to $-I$

375 Views Asked by At

I would like to evaluate

$$C_\infty = \int_{R = -a}^{R = a} H_0^{(1)}(z) e^{-izt} dz $$

where $H_0^{(1)}(z)$ is the Hankel function of the first kind, $a \rightarrow \infty$, and

$$ z = R - i \sqrt{a^2 - R^2}$$

is the path of integration beneath the real axis.

The function $H_0^{(1)}(z)$ has only one pole (at $z=0$) which is removable. Therefore, by the residue theorem, $C_\infty + I = 0$, where

$$ I = -\int_{-a}^{a} H_0^{(1)}(R) e^{-iRt} dR. $$

When I evaluate $C_\infty$ numerically however, I experience some difficulty. $I$ on the other hand converges fine.

I have tried to evaluate it by breaking the integral into small subintervals, applying Gaussian quadrature to each, and then adding the real and imaginary parts together. Matlab's integral() function for adaptive quadrature also does not work so I include it here as an example:

a = 1000;
t = 2;

%% C PATH
f = @(z) besselh(0,1,z).*exp(-1j*z*t);
z = @(R) R - sqrt(a^2 - R.^2)*1j;
dzdr = @(R) 1 - 1/2*(a^2 - R.^2).^(-1/2).*(-2.*R)*1j;
g_C = integral(@(R) f(z(R)).*dzdr(R), a, -a)
g_C_2 = integral(@(R) real(f(z(R))).*dzdr(R), a, -a) + 1j*integral(@(R) imag(f(z(R))).*dzdr(R), a, -a)
g_C_3 = integral(@(R) real(f(z(R)).*dzdr(R)), a, -a) + 1j*integral(@(R) imag(f(z(R)).*dzdr(R)), a, -a) 


%% I PATH
f = @(z) besselh(0,1,z).*exp(-1j*z*t);
z = @(R) R;
dzdr = @(R) 1;
g_I = integral(@(R) f(z(R)).*dzdr(R), a, -a)

Output:

g_C = NaN + NaNi
g_C_2 = NaN + NaNi
g_C_3 = NaN + NaNi
g_I = -0.0000 + 2.3188i

Is it possible to perform this $C_\infty$ integration numerically?

Other things that I have tried:

  • using the asymptotic form of $H_0^{(1)}(z)$ = $\sqrt{2/\pi z} e^{i(z - \pi/4)} $ to deal with large $-i$ arguments, which gives an incorrect answer. Probably because it is not accurate enough for the small argument components.
  • Mapping the integral over $\theta = 0$ to $\pi$ using $z = a(\cos{\theta} - i\sin{\theta})$.
1

There are 1 best solutions below

2
On BEST ANSWER

First, $H^{(1)}_0(z)$ used in Matlab and Mathematica has a branch cut over the line $(-\infty, 0]$. Thus your real line integration does not give the answer you're looking for. Fix your code with

%% I PATH
f = @(z) besselh(0,1,z).*exp(-1j*z*t);
z = @(R) R - 1e-20j; % under branch cut
dzdr = @(R) 1;
g_I = integral(@(R) f(z(R)).*dzdr(R), a, -a)

Next, to overcome the problem with large negative imaginary values of $z$ you can use the special variant of besselh(nu,K,Z,1) function that computes $H^{(1)}_0(z)e^{-iz}$

%% C PATH
f = @(z) besselh(0,1,z,1).*exp(-1j*z*(t-1));
z = @(R) R - sqrt(a^2 - R.^2)*1j;
dzdr = @(R) 1 - 1/2*(a^2 - R.^2).^(-1/2).*(-2.*R)*1j;
g_C = integral(@(R) f(z(R)).*dzdr(R), a, -a)