home *** CD-ROM | disk | FTP | other *** search
- function b = bessel(alpha,xx)
- %BESSEL Bessel functions of various kinds.
- % The suite of M-files for Bessel functions has been modified and
- % extended since the reference manuals for MATLAB 3.5 and 4.0 were
- % printed. The underlying algorithms have been substantially
- % improved. There are now four primary functions for real X.
- %
- % BESSELJ(ALPHA,X) Bessel functions of the first kind,
- % BESSELY(ALPHA,X) Bessel functions of the second kind,
- % BESSELI(ALPHA,X) Modified Bessel functions of the first kind,
- % BESSELK(ALPHA,X) Modified Bessel functions of the second kind.
- %
- % An old function, BESSELA(ALPHA,X), accepts complex X, but may
- % produce inaccurate results for large ALPHA or large X.
- %
- % This M-file, BESSEL(ALPHA,X), calls BESSELJ(ALPHA,X) if X is real,
- % BESSELI(ALPHA,X) if X is imaginary, and BESSELA(ALPHA,X) if X
- % is complex. The auxilliary routine BESSELN is no longer used.
- % BESSELH has been superceded by BESSELY.
-
- % C. Moler, 10/12/92.
- % Copyright (c) 1984-93 by The MathWorks, Inc.
-
- resize = (length(alpha) == 1);
- if resize, resize = size(xx); end
- xx = xx(:);
- b = zeros(length(xx),length(alpha));
-
- % Real x.
-
- v = find(imag(xx(:)) == 0);
- if any(v)
- b(v,:) = besselj(alpha,xx(v));
- end
-
-
- % Imaginary x.
-
- v = find(real(xx(:)) == 0);
- if any(v)
- if alpha == fix(alpha)
- sig = [1 i -1 -i];
- sig = sig(rem(alpha,4)+1);
- else
- sig = i^(alpha);
- end
- b(v,:) = sig*besseli(alpha,imag(xx(v)));
- end
-
- % Complex x.
-
- v = find((real(xx(:)) ~= 0) & (imag(xx(:)) ~= 0));
- if any(v)
- b(v,:) = bessela(alpha,xx(v));
- end
-
- if resize
- b = reshape(b,resize(1),resize(2));
- end
-