hankel_matrix: Generates data to use for Hankel Transforms
 	s_HT = hankel_matrix(order, rmax, Nr, eps_roots)
 	s_HT	=	Structure containing data to use for the pQDHT
 	order	=	Transform order
 	rmax	=	Radial extent of transform
 	Nr		=	Number of sample points
 	eps_roots	=	Error in estimation of roots of Bessel function (optional)
 		order, rmax, Nr =	As above
 		J_roots		=	Roots of the pth order Bessel fn.
 		J_roots_N1	=	(N+1)th root
 		r			=	Radial co-ordinate vector
 		v			=	frequency co-ordinate vector
 		kr			=	Radial wave number co-ordinate vector
 		vmax		=	Limiting frequency
 					=	roots_N1 / (2*pi*rmax)
 		S			=	rmax * 2*pi*vmax (S product)
 		T			=	Transform matrix
 		J			=	Scaling vector
 					=	J_(order+1){roots}
 	The algorithm used is that from:
 		"Computation of quasi-discrete Hankel transforms of the integer
 		order for propagating optical wave fields"
 		Manuel Guizar-Sicairos and Julio C. Guitierrez-Vega
 		J. Opt. Soc. Am. A 21(1) 53-58 (2004)
 	The algorithm also calls the function:
 	zn = bessel_zeros(1, p, Nr+1, 1e-6),
 	where p and N are defined above, to calculate the roots of the bessel
 	function. This algorithm is taken from:
   		"An Algorithm with ALGOL 60 Program for the Computation of the
   		zeros of the Ordinary Bessel Functions and those of their
   		N. M. Temme
   		Journal of Computational Physics, 32, 270-279 (1979)
 	Example: Propagation of radial field
 		% Note the use of matrix and element products / divisions
 		H = hankel_matrix(0, 1e-3, 512);
 		DR0 = 50e-6;
 		Ur0 = exp(-(H.r/DR0).^2);
 		Ukr0 = H.T * (Ur0./H.J);
 		k0 = 2*pi/800e-9;
 		kz = realsqrt((k0^2 -^2).*(k0>;
 		z = (-5e-3:1e-5:5e-3);
 		Ukrz = (Ukr0*ones(1,length(z))).*exp(i*kz*z);
 		Urz = (H.T * Ukrz) .* (H.J * ones(1,length(z)));
See also