|
> No.714[元記事へ]
!前回のベッセル関数について、変数 m を、
!絶対値処理するだけで、xの範囲を、複素数まで拡張できる事が分った。
!
! Jn( complex(x,0) )= complex(0,1)^(-n) *In( complex(0,x) )
! In( complex(x,0) )= complex(0,1)^(-n) *Jn( complex(0,x) ) !←文はこのテスト状態。
!-------------------------------
OPTION ARITHMETIC COMPLEX
OPTION BASE 0
SET TEXT background "opaque"
DIM col(5)
MAT READ col
DATA 4,10,2, 8,8,8 !Red darkGreen Blue Gray Gray Gray
!-----
CALL window_i
CALL G_besselj !ベッセル関数1種 Jn(x) …虚数入力
WAIT DELAY .5
CALL G_besseli !変形ベッセル関数1種 In(x)
SUB window_i
CLEAR
LET h=4
LET l=-1.5
LET xr=4
SET WINDOW -.1*xr,xr, l,h
DRAW grid(xr/8,h/8)
ASK PIXEL SIZE (0,0; xr,0) j,i
LET dx=xr/j !pitch
END SUB
SUB window_j
CLEAR
LET h=1
LET l=-1
LET xr=20
SET WINDOW -.1*xr,xr, l,h
DRAW grid(xr/4,h/5)
ASK PIXEL SIZE (0,0; xr,0) j,i
LET dx=xr/j !pitch
END SUB
!-------
SUB G_besseli
FOR n=0 TO 2
SET LINE COLOR col(n)
SET TEXT COLOR col(n)
PLOT TEXT,AT .13*xr,h-.08*(h-l)-.04*(h-l)*n :"変形ベッセル関数1種 "& STR$(n)& "次"
FOR t=dx TO xr+dx STEP dx
LET x=t
LET y=besseli(n,x)
! LET x=COMPLEX(0,t)
! LET y=COMPLEX(0,1)^(-n)*besseli(n,x)
PLOT LINES: ABS(x),y; ! PEN-on
IF FP(t)< dx THEN PRINT x;y
NEXT t
PLOT LINES !PEN-off
PRINT
NEXT n
END SUB
SUB G_besselj
FOR n=0 TO 2
SET LINE COLOR col(n+3)
SET TEXT COLOR col(n+3)
PLOT TEXT,AT .13*xr,h-.08*(h-l)-.04*(h-l)*n :"ベッセル関数1種 "& STR$(n)& "次 "
FOR t=dx TO xr+dx STEP dx
! LET x=t
! LET y=besselj(n,x)
LET x=COMPLEX(0,t)
LET y=COMPLEX(0,1)^(-n)*besselj(n,x)
PLOT LINES: ABS(x),y; ! PEN-on
IF FP(t)< dx THEN PRINT x;y
NEXT t
PLOT LINES !PEN-off
PRINT
NEXT n
END SUB
!-------
FUNCTION besseli(n,x)
IF x=0 THEN LET x=1e-32 !0の保護( 場合により外す)
LET m=2*INT( (6+MAX(n,1.5*ABS(x))+9*1.5*ABS(x)/(1.5*ABS(x)+2))/2 )
LET w=0
FOR k=1 TO m
LET w=w+Tki(k,x)
NEXT k
LET besseli=EXP(x)*Tki(n,x)/(Tki(0,x)+2*w)
END FUNCTION
FUNCTION Tki(i,x)
LET t2=0
LET t1=1e-9
LET t0=2*(m+1)/x*t1+t2
FOR kp1=m TO i+1 STEP -1
LET t2=t1
LET t1=t0
LET t0=2*kp1/x*t1+t2
NEXT kp1
LET Tki=t0
END FUNCTION
!-------
FUNCTION besselj(n,x)
IF x=0 THEN LET x=1e-32 !0の保護( 場合により外す)
LET m=2*INT( (6+MAX(n,1.5*ABS(x))+9*1.5*ABS(x)/(1.5*ABS(x)+2))/2 )
LET w=0
FOR k=1 TO m/2
LET w=w+Tk(k*2,x)
NEXT k
LET besselj=Tk(n,x)/(Tk(0,x)+2*w)
END FUNCTION
FUNCTION Tk(i,x)
LET t2=0
LET t1=1e-9
LET t0=2*(m+1)/x*t1-t2
FOR kp1=m TO i+1 STEP -1
LET t2=t1
LET t1=t0
LET t0=2*kp1/x*t1-t2
NEXT kp1
LET Tk=t0
END FUNCTION
END
|
|