马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
<P>1由于国内常见的fortran程序集合中没有直接关于hankel 函数的,且IMSL 函数中也只有<BR>bessel 函数,希望下面的小程序对大家有一点帮助。<BR>2。是基于bessel 的IMSL 函数的<BR><BR>3。subroutine hankel(order,class,x,res)<BR> <BR> ! Function: Compute the hankel function values <BR> ! <BR> ! Note:<BR> !<BR> ! This is a very useful subroutine,for that in IMSL<BR> ! the hankel function is not provided directly. <BR> ! The bessel function in IMsl LIBARY is not very good<BR> ! when CLASS=3 WHICH REPRENTS THE FIRST KIND BESSEL FUNCTION<BR> ! when class=4 WHICH REPRENTS THE second KIND BESSEL FUNCTION <BR> !<BR> ! Input:<BR> ! <BR> ! order-------- the order number describing the hankel's function <BR> ! class-------- the hankel fuction's classfication <BR> ! x ---------the variable (real) <BR> !<BR> ! Output:<BR> ! res --------- the results (complex)<BR> !<BR> ! <BR> <BR> Implicit None<BR> <BR> Integer order,N !the order number requried for computation <BR> Integer class !the kind number<BR> <BR> Real x,CBS1(order+1),CBS2(order+1) !argument x <BR> complex res,i </P>
<P>!--------------------------------------------------------------------</P>
<P> i=(0,1) ! the false root<BR> N=order+1 ! in order compute the order-th results</P>
<P> Call BSJNS(x,N,CBS1)<BR> Call BSYS(0.0,x,N,CBS2) </P>
<P>!--------------------------------------------------------------------</P>
<P> If(class==1)Then</P>
<P> res=CBS1(N)+i*(CBS2(N)) !the first kind hankel function<BR> <BR> Else if(class==2) then<BR> <BR> res=CBS1(N)-i*(CBS2(N)) !the second kind hankel function<BR> <BR> Else if(class==3) then !the REPRENTS THE FIRST KIND BESSEL FUNCTION<BR> <BR> res=CBS1(N)+i*0.0</P>
<P> Else if(class==4) then ! the REPRENTS THE Second KIND BESSEL FUNCTION<BR> <BR> res=CBS2(N)+i*0.0<BR> <BR> Else<BR> <BR> write(*,*) 'the order num is illegal'<BR> <BR> stop <BR> <BR> End if<BR> <BR> End subroutine </P> |