comparison src/DLD-FUNCTIONS/besselj.cc @ 8278:ab0674a8b345

fix scaling factor for negative alpha in zbesi,cbesi add bessel function tests add all scaling factors to bessel documentation
author Brian Gough <bjg@gnu.org>
date Tue, 28 Oct 2008 10:47:26 -0400
parents 9d080df0c843
children eb63fbe60fab
comparison
equal deleted inserted replaced
8277:b4a1a5472191 8278:ab0674a8b345
386 @deftypefnx {Loadable Function} {[@var{h}, @var{ierr}] =} besselh (@var{alpha}, @var{k}, @var{x}, @var{opt})\n\ 386 @deftypefnx {Loadable Function} {[@var{h}, @var{ierr}] =} besselh (@var{alpha}, @var{k}, @var{x}, @var{opt})\n\
387 Compute Bessel or Hankel functions of various kinds:\n\ 387 Compute Bessel or Hankel functions of various kinds:\n\
388 \n\ 388 \n\
389 @table @code\n\ 389 @table @code\n\
390 @item besselj\n\ 390 @item besselj\n\
391 Bessel functions of the first kind.\n\ 391 Bessel functions of the first kind. If the argument @var{opt} is supplied, \n\
392 the result is multiplied by @code{exp(-abs(imag(x)))}.\n\
392 @item bessely\n\ 393 @item bessely\n\
393 Bessel functions of the second kind.\n\ 394 Bessel functions of the second kind. If the argument @var{opt} is supplied,\n\
395 the result is multiplied by @code{exp(-abs(imag(x)))}.\n\
394 @item besseli\n\ 396 @item besseli\n\
395 Modified Bessel functions of the first kind.\n\ 397 Modified Bessel functions of the first kind. If the argument @var{opt} is supplied,\n\
398 the result is multiplied by @code{exp(-abs(real(x)))}.\n\
396 @item besselk\n\ 399 @item besselk\n\
397 Modified Bessel functions of the second kind.\n\ 400 Modified Bessel functions of the second kind. If the argument @var{opt} is supplied,\n\
401 the result is multiplied by @code{exp(x)}.\n\
398 @item besselh\n\ 402 @item besselh\n\
399 Compute Hankel functions of the first (@var{k} = 1) or second (@var{k}\n\ 403 Compute Hankel functions of the first (@var{k} = 1) or second (@var{k}\n\
400 = 2) kind.\n\ 404 = 2) kind. If the argument @var{opt} is supplied, the result is multiplied by\n\
405 @code{exp (-I*@var{x})} for @var{k} = 1 or @code{exp (I*@var{x})} for\n\
406 @var{k} = 2.\n\
401 @end table\n\ 407 @end table\n\
402 \n\
403 If the argument @var{opt} is supplied, the result is scaled by the\n\
404 @code{exp (-I*@var{x})} for @var{k} = 1 or @code{exp (I*@var{x})} for\n\
405 @var{k} = 2.\n\
406 \n\ 408 \n\
407 If @var{alpha} is a scalar, the result is the same size as @var{x}.\n\ 409 If @var{alpha} is a scalar, the result is the same size as @var{x}.\n\
408 If @var{x} is a scalar, the result is the same size as @var{alpha}.\n\ 410 If @var{x} is a scalar, the result is the same size as @var{alpha}.\n\
409 If @var{alpha} is a row vector and @var{x} is a column vector, the\n\ 411 If @var{alpha} is a row vector and @var{x} is a column vector, the\n\
410 result is a matrix with @code{length (@var{x})} rows and\n\ 412 result is a matrix with @code{length (@var{x})} rows and\n\
628 630
629 return retval; 631 return retval;
630 } 632 }
631 633
632 /* 634 /*
635 %! # Test values computed with GP/PARI version 2.3.3
636 %!
637 %!shared alpha, x, jx, yx, ix, kx, nix
638 %!
639 %! # Bessel functions, even order, positive and negative x
640 %! alpha = 2; x = 1.25;
641 %! jx = 0.1710911312405234823613091417;
642 %! yx = -1.193199310178553861283790424;
643 %! ix = 0.2220184483766341752692212604;
644 %! kx = 0.9410016167388185767085460540;
645 %!
646 %!assert(besselj(alpha,x), jx, 100*eps)
647 %!assert(bessely(alpha,x), yx, 100*eps)
648 %!assert(besseli(alpha,x), ix, 100*eps)
649 %!assert(besselk(alpha,x), kx, 100*eps)
650 %!assert(besselh(alpha,1,x), jx + I*yx, 100*eps)
651 %!assert(besselh(alpha,2,x), jx - I*yx, 100*eps)
652 %!
653 %!assert(besselj(alpha,x,1), jx*exp(-abs(imag(x))), 100*eps)
654 %!assert(bessely(alpha,x,1), yx*exp(-abs(imag(x))), 100*eps)
655 %!assert(besseli(alpha,x,1), ix*exp(-abs(real(x))), 100*eps)
656 %!assert(besselk(alpha,x,1), kx*exp(x), 100*eps)
657 %!assert(besselh(alpha,1,x,1), (jx + I*yx)*exp(-I*x), 100*eps)
658 %!assert(besselh(alpha,2,x,1), (jx - I*yx)*exp(I*x), 100*eps)
659 %!
660 %!assert(besselj(-alpha,x), jx, 100*eps)
661 %!assert(bessely(-alpha,x), yx, 100*eps)
662 %!assert(besseli(-alpha,x), ix, 100*eps)
663 %!assert(besselk(-alpha,x), kx, 100*eps)
664 %!assert(besselh(-alpha,1,x), jx + I*yx, 100*eps)
665 %!assert(besselh(-alpha,2,x), jx - I*yx, 100*eps)
666 %!
667 %!assert(besselj(-alpha,x,1), jx*exp(-abs(imag(x))), 100*eps)
668 %!assert(bessely(-alpha,x,1), yx*exp(-abs(imag(x))), 100*eps)
669 %!assert(besseli(-alpha,x,1), ix*exp(-abs(real(x))), 100*eps)
670 %!assert(besselk(-alpha,x,1), kx*exp(x), 100*eps)
671 %!assert(besselh(-alpha,1,x,1), (jx + I*yx)*exp(-I*x), 100*eps)
672 %!assert(besselh(-alpha,2,x,1), (jx - I*yx)*exp(I*x), 100*eps)
673 %!
674 %! x *= -1;
675 %! yx = -1.193199310178553861283790424 + 0.3421822624810469647226182835*I;
676 %! kx = 0.9410016167388185767085460540 - 0.6974915263814386815610060884*I;
677 %!
678 %!assert(besselj(alpha,x), jx, 100*eps)
679 %!assert(bessely(alpha,x), yx, 100*eps)
680 %!assert(besseli(alpha,x), ix, 100*eps)
681 %!assert(besselk(alpha,x), kx, 100*eps)
682 %!assert(besselh(alpha,1,x), jx + I*yx, 100*eps)
683 %!assert(besselh(alpha,2,x), jx - I*yx, 100*eps)
684 %!
685 %!assert(besselj(alpha,x,1), jx*exp(-abs(imag(x))), 100*eps)
686 %!assert(bessely(alpha,x,1), yx*exp(-abs(imag(x))), 100*eps)
687 %!assert(besseli(alpha,x,1), ix*exp(-abs(real(x))), 100*eps)
688 %!assert(besselk(alpha,x,1), kx*exp(x), 100*eps)
689 %!assert(besselh(alpha,1,x,1), (jx + I*yx)*exp(-I*x), 100*eps)
690 %!assert(besselh(alpha,2,x,1), (jx - I*yx)*exp(I*x), 100*eps)
691 %!
692 %! # Bessel functions, odd order, positive and negative x
693 %! alpha = 3; x = 2.5;
694 %! jx = 0.2166003910391135247666890035;
695 %! yx = -0.7560554967536709968379029772;
696 %! ix = 0.4743704087780355895548240179;
697 %! kx = 0.2682271463934492027663765197;
698 %!
699 %!assert(besselj(alpha,x), jx, 100*eps)
700 %!assert(bessely(alpha,x), yx, 100*eps)
701 %!assert(besseli(alpha,x), ix, 100*eps)
702 %!assert(besselk(alpha,x), kx, 100*eps)
703 %!assert(besselh(alpha,1,x), jx + I*yx, 100*eps)
704 %!assert(besselh(alpha,2,x), jx - I*yx, 100*eps)
705 %!
706 %!assert(besselj(alpha,x,1), jx*exp(-abs(imag(x))), 100*eps)
707 %!assert(bessely(alpha,x,1), yx*exp(-abs(imag(x))), 100*eps)
708 %!assert(besseli(alpha,x,1), ix*exp(-abs(real(x))), 100*eps)
709 %!assert(besselk(alpha,x,1), kx*exp(x), 100*eps)
710 %!assert(besselh(alpha,1,x,1), (jx + I*yx)*exp(-I*x), 100*eps)
711 %!assert(besselh(alpha,2,x,1), (jx - I*yx)*exp(I*x), 100*eps)
712 %!
713 %!assert(besselj(-alpha,x), -jx, 100*eps)
714 %!assert(bessely(-alpha,x), -yx, 100*eps)
715 %!assert(besseli(-alpha,x), ix, 100*eps)
716 %!assert(besselk(-alpha,x), kx, 100*eps)
717 %!assert(besselh(-alpha,1,x), -(jx + I*yx), 100*eps)
718 %!assert(besselh(-alpha,2,x), -(jx - I*yx), 100*eps)
719 %!
720 %!assert(besselj(-alpha,x,1), -jx*exp(-abs(imag(x))), 100*eps)
721 %!assert(bessely(-alpha,x,1), -yx*exp(-abs(imag(x))), 100*eps)
722 %!assert(besseli(-alpha,x,1), ix*exp(-abs(real(x))), 100*eps)
723 %!assert(besselk(-alpha,x,1), kx*exp(x), 100*eps)
724 %!assert(besselh(-alpha,1,x,1), -(jx + I*yx)*exp(-I*x), 100*eps)
725 %!assert(besselh(-alpha,2,x,1), -(jx - I*yx)*exp(I*x), 100*eps)
726 %!
727 %! x *= -1;
728 %! jx = -jx;
729 %! yx = 0.7560554967536709968379029772 - 0.4332007820782270495333780070*I;
730 %! ix = -ix;
731 %! kx = -0.2682271463934492027663765197 - 1.490278591297463775542004240*I;
732 %!
733 %!assert(besselj(alpha,x), jx, 100*eps)
734 %!assert(bessely(alpha,x), yx, 100*eps)
735 %!assert(besseli(alpha,x), ix, 100*eps)
736 %!assert(besselk(alpha,x), kx, 100*eps)
737 %!assert(besselh(alpha,1,x), jx + I*yx, 100*eps)
738 %!assert(besselh(alpha,2,x), jx - I*yx, 100*eps)
739 %!
740 %!assert(besselj(alpha,x,1), jx*exp(-abs(imag(x))), 100*eps)
741 %!assert(bessely(alpha,x,1), yx*exp(-abs(imag(x))), 100*eps)
742 %!assert(besseli(alpha,x,1), ix*exp(-abs(real(x))), 100*eps)
743 %!assert(besselk(alpha,x,1), kx*exp(x), 100*eps)
744 %!assert(besselh(alpha,1,x,1), (jx + I*yx)*exp(-I*x), 100*eps)
745 %!assert(besselh(alpha,2,x,1), (jx - I*yx)*exp(I*x), 100*eps)
746 %!
747 %! # Bessel functions, fractional order, positive and negative x
748 %!
749 %! alpha = 3.5; x = 2.75;
750 %! jx = 0.1691636439842384154644784389;
751 %! yx = -0.8301381935499356070267953387;
752 %! ix = 0.3930540878794826310979363668;
753 %! kx = 0.2844099013460621170288192503;
754 %!
755 %!assert(besselj(alpha,x), jx, 100*eps)
756 %!assert(bessely(alpha,x), yx, 100*eps)
757 %!assert(besseli(alpha,x), ix, 100*eps)
758 %!assert(besselk(alpha,x), kx, 100*eps)
759 %!assert(besselh(alpha,1,x), jx + I*yx, 100*eps)
760 %!assert(besselh(alpha,2,x), jx - I*yx, 100*eps)
761 %!
762 %!assert(besselj(alpha,x,1), jx*exp(-abs(imag(x))), 100*eps)
763 %!assert(bessely(alpha,x,1), yx*exp(-abs(imag(x))), 100*eps)
764 %!assert(besseli(alpha,x,1), ix*exp(-abs(real(x))), 100*eps)
765 %!assert(besselk(alpha,x,1), kx*exp(x), 100*eps)
766 %!assert(besselh(alpha,1,x,1), (jx + I*yx)*exp(-I*x), 100*eps)
767 %!assert(besselh(alpha,2,x,1), (jx - I*yx)*exp(I*x), 100*eps)
768 %!
769 %! nix = 0.2119931212254662995364461998;
770 %!
771 %!assert(besselj(-alpha,x), yx, 100*eps)
772 %!assert(bessely(-alpha,x), -jx, 100*eps)
773 %!assert(besseli(-alpha,x), nix, 100*eps)
774 %!assert(besselk(-alpha,x), kx, 100*eps)
775 %!assert(besselh(-alpha,1,x), -I*(jx + I*yx), 100*eps)
776 %!assert(besselh(-alpha,2,x), I*(jx - I*yx), 100*eps)
777 %!
778 %!assert(besselj(-alpha,x,1), yx*exp(-abs(imag(x))), 100*eps)
779 %!assert(bessely(-alpha,x,1), -jx*exp(-abs(imag(x))), 100*eps)
780 %!assert(besseli(-alpha,x,1), nix*exp(-abs(real(x))), 100*eps)
781 %!assert(besselk(-alpha,x,1), kx*exp(x), 100*eps)
782 %!assert(besselh(-alpha,1,x,1), -I*(jx + I*yx)*exp(-I*x), 100*eps)
783 %!assert(besselh(-alpha,2,x,1), I*(jx - I*yx)*exp(I*x), 100*eps)
784 %!
785 %! x *= -1;
786 %! jx *= -I;
787 %! yx = -0.8301381935499356070267953387*I;
788 %! ix *= -I;
789 %! kx = -0.9504059335995575096509874508*I;
790 %!
791 %!assert(besselj(alpha,x), jx, 100*eps)
792 %!assert(bessely(alpha,x), yx, 100*eps)
793 %!assert(besseli(alpha,x), ix, 100*eps)
794 %!assert(besselk(alpha,x), kx, 100*eps)
795 %!assert(besselh(alpha,1,x), jx + I*yx, 100*eps)
796 %!assert(besselh(alpha,2,x), jx - I*yx, 100*eps)
797 %!
798 %!assert(besselj(alpha,x,1), jx*exp(-abs(imag(x))), 100*eps)
799 %!assert(bessely(alpha,x,1), yx*exp(-abs(imag(x))), 100*eps)
800 %!assert(besseli(alpha,x,1), ix*exp(-abs(real(x))), 100*eps)
801 %!assert(besselk(alpha,x,1), kx*exp(x), 100*eps)
802 %!assert(besselh(alpha,1,x,1), (jx + I*yx)*exp(-I*x), 100*eps)
803 %!assert(besselh(alpha,2,x,1), (jx - I*yx)*exp(I*x), 100*eps)
804 %!
805 %! # Bessel functions, even order, complex x
806 %!
807 %! alpha = 2; x = 1.25 + 3.625 * I;
808 %! jx = -1.299533366810794494030065917 + 4.370833116012278943267479589*I;
809 %! yx = -4.370357232383223896393056727 - 1.283083391453582032688834041*I;
810 %! ix = -0.6717801680341515541002273932 - 0.2314623443930774099910228553*I;
811 %! kx = -0.01108009888623253515463783379 + 0.2245218229358191588208084197*I;
812 %!
813 %!assert(besselj(alpha,x), jx, 100*eps)
814 %!assert(bessely(alpha,x), yx, 100*eps)
815 %!assert(besseli(alpha,x), ix, 100*eps)
816 %!assert(besselk(alpha,x), kx, 100*eps)
817 %!assert(besselh(alpha,1,x), jx + I*yx, 100*eps)
818 %!assert(besselh(alpha,2,x), jx - I*yx, 100*eps)
819 %!
820 %!assert(besselj(alpha,x,1), jx*exp(-abs(imag(x))), 100*eps)
821 %!assert(bessely(alpha,x,1), yx*exp(-abs(imag(x))), 100*eps)
822 %!assert(besseli(alpha,x,1), ix*exp(-abs(real(x))), 100*eps)
823 %!assert(besselk(alpha,x,1), kx*exp(x), 100*eps)
824 %!assert(besselh(alpha,1,x,1), (jx + I*yx)*exp(-I*x), 100*eps)
825 %!assert(besselh(alpha,2,x,1), (jx - I*yx)*exp(I*x), 100*eps)
826 %!
827 %!assert(besselj(-alpha,x), jx, 100*eps)
828 %!assert(bessely(-alpha,x), yx, 100*eps)
829 %!assert(besseli(-alpha,x), ix, 100*eps)
830 %!assert(besselk(-alpha,x), kx, 100*eps)
831 %!assert(besselh(-alpha,1,x), jx + I*yx, 100*eps)
832 %!assert(besselh(-alpha,2,x), jx - I*yx, 100*eps)
833 %!
834 %!assert(besselj(-alpha,x,1), jx*exp(-abs(imag(x))), 100*eps)
835 %!assert(bessely(-alpha,x,1), yx*exp(-abs(imag(x))), 100*eps)
836 %!assert(besseli(-alpha,x,1), ix*exp(-abs(real(x))), 100*eps)
837 %!assert(besselk(-alpha,x,1), kx*exp(x), 100*eps)
838 %!assert(besselh(-alpha,1,x,1), (jx + I*yx)*exp(-I*x), 100*eps)
839 %!assert(besselh(-alpha,2,x,1), (jx - I*yx)*exp(I*x), 100*eps)
840 %!
841 %! # Bessel functions, odd order, complex x
842 %!
843 %! alpha = 3; x = 2.5 + 1.875 * I;
844 %! jx = 0.1330721523048277493333458596 + 0.5386295217249660078754395597*I;
845 %! yx = -0.6485072392105829901122401551 + 0.2608129289785456797046996987*I;
846 %! ix = -0.6182064685486998097516365709 + 0.4677561094683470065767989920*I;
847 %! kx = -0.1568585587733540007867882337 - 0.05185853709490846050505141321*I;
848 %!
849 %!assert(besselj(alpha,x), jx, 100*eps)
850 %!assert(bessely(alpha,x), yx, 100*eps)
851 %!assert(besseli(alpha,x), ix, 100*eps)
852 %!assert(besselk(alpha,x), kx, 100*eps)
853 %!assert(besselh(alpha,1,x), jx + I*yx, 100*eps)
854 %!assert(besselh(alpha,2,x), jx - I*yx, 100*eps)
855 %!
856 %!assert(besselj(alpha,x,1), jx*exp(-abs(imag(x))), 100*eps)
857 %!assert(bessely(alpha,x,1), yx*exp(-abs(imag(x))), 100*eps)
858 %!assert(besseli(alpha,x,1), ix*exp(-abs(real(x))), 100*eps)
859 %!assert(besselk(alpha,x,1), kx*exp(x), 100*eps)
860 %!assert(besselh(alpha,1,x,1), (jx + I*yx)*exp(-I*x), 100*eps)
861 %!assert(besselh(alpha,2,x,1), (jx - I*yx)*exp(I*x), 100*eps)
862 %!
863 %!assert(besselj(-alpha,x), -jx, 100*eps)
864 %!assert(bessely(-alpha,x), -yx, 100*eps)
865 %!assert(besseli(-alpha,x), ix, 100*eps)
866 %!assert(besselk(-alpha,x), kx, 100*eps)
867 %!assert(besselh(-alpha,1,x), -(jx + I*yx), 100*eps)
868 %!assert(besselh(-alpha,2,x), -(jx - I*yx), 100*eps)
869 %!
870 %!assert(besselj(-alpha,x,1), -jx*exp(-abs(imag(x))), 100*eps)
871 %!assert(bessely(-alpha,x,1), -yx*exp(-abs(imag(x))), 100*eps)
872 %!assert(besseli(-alpha,x,1), ix*exp(-abs(real(x))), 100*eps)
873 %!assert(besselk(-alpha,x,1), kx*exp(x), 100*eps)
874 %!assert(besselh(-alpha,1,x,1), -(jx + I*yx)*exp(-I*x), 100*eps)
875 %!assert(besselh(-alpha,2,x,1), -(jx - I*yx)*exp(I*x), 100*eps)
876 %!
877 %! # Bessel functions, fractional order, complex x
878 %!
879 %! alpha = 3.5; x = 1.75 + 4.125 * I;
880 %! jx = -3.018566131370455929707009100 - 0.7585648436793900607704057611*I;
881 %! yx = 0.7772278839106298215614791107 - 3.018518722313849782683792010*I;
882 %! ix = 0.2100873577220057189038160913 - 0.6551765604618246531254970926*I;
883 %! kx = 0.1757147290513239935341488069 + 0.08772348296883849205562558311*I;
884 %!
885 %!assert(besselj(alpha,x), jx, 100*eps)
886 %!assert(bessely(alpha,x), yx, 100*eps)
887 %!assert(besseli(alpha,x), ix, 100*eps)
888 %!assert(besselk(alpha,x), kx, 100*eps)
889 %!assert(besselh(alpha,1,x), jx + I*yx, 100*eps)
890 %!assert(besselh(alpha,2,x), jx - I*yx, 100*eps)
891 %!
892 %!assert(besselj(alpha,x,1), jx*exp(-abs(imag(x))), 100*eps)
893 %!assert(bessely(alpha,x,1), yx*exp(-abs(imag(x))), 100*eps)
894 %!assert(besseli(alpha,x,1), ix*exp(-abs(real(x))), 100*eps)
895 %!assert(besselk(alpha,x,1), kx*exp(x), 100*eps)
896 %!assert(besselh(alpha,1,x,1), (jx + I*yx)*exp(-I*x), 100*eps)
897 %!assert(besselh(alpha,2,x,1), (jx - I*yx)*exp(I*x), 100*eps)
898 %!
899 %! nix = 0.09822388691172060573913739253 - 0.7110230642207380127317227407*I;
900 %!
901 %!assert(besselj(-alpha,x), yx, 100*eps)
902 %!assert(bessely(-alpha,x), -jx, 100*eps)
903 %!assert(besseli(-alpha,x), nix, 100*eps)
904 %!assert(besselk(-alpha,x), kx, 100*eps)
905 %!assert(besselh(-alpha,1,x), -I*(jx + I*yx), 100*eps)
906 %!assert(besselh(-alpha,2,x), I*(jx - I*yx), 100*eps)
907 %!
908 %!assert(besselj(-alpha,x,1), yx*exp(-abs(imag(x))), 100*eps)
909 %!assert(bessely(-alpha,x,1), -jx*exp(-abs(imag(x))), 100*eps)
910 %!assert(besseli(-alpha,x,1), nix*exp(-abs(real(x))), 100*eps)
911 %!assert(besselk(-alpha,x,1), kx*exp(x), 100*eps)
912 %!assert(besselh(-alpha,1,x,1), -I*(jx + I*yx)*exp(-I*x), 100*eps)
913 %!assert(besselh(-alpha,2,x,1), I*(jx - I*yx)*exp(I*x), 100*eps)
914 */
915
916 /*
633 ;;; Local Variables: *** 917 ;;; Local Variables: ***
634 ;;; mode: C++ *** 918 ;;; mode: C++ ***
635 ;;; End: *** 919 ;;; End: ***
636 */ 920 */