|
> No.390[元記事へ]
!ポアンカレ切断面の実際例です。
!
!レスラー方程式を、ルンゲ・クッタ4で描いています。グラフは、
!xyzの3次元の振る舞いですが、中央の図は、上から見たxy平面です。
!周囲30度 角度ごとに配置された12枚の図が、
!その角度での、ポアンカレ切断面で、縦:Z軸、横:中心からの半径距離
!になります。
!-------------------------------
OPTION ANGLE DEGREES
LET x=-2
LET y=0
LET z=0
LET a=0.398
LET b=2
LET c=4
!-----レスラー方程式( 非線形項が、z*x 1つだけのカオス)
DEF dxdt( y,z)=-y-z ! (dx/dt)= -y -z
DEF dydt(x,y )= x+a*y ! (dy/dt)= x +a*y
DEF dzdt(x ,z)= b+z*(x-c) ! (dz/dt)= b +z*(x-c)
SUB RungeKutta
LET kx1=dxdt( y,z)
LET ky1=dydt(x,y )
LET kz1=dzdt(x ,z)
!
LET kx2=dxdt( y+ky1*dt/2 ,z+kz1*dt/2)
LET ky2=dydt(x+kx1*dt/2, y+ky1*dt/2 )
LET kz2=dzdt(x+kx1*dt/2 ,z+kz1*dt/2)
!
LET kx3=dxdt( y+ky2*dt/2 ,z+kz2*dt/2)
LET ky3=dydt(x+kx2*dt/2, y+ky2*dt/2 )
LET kz3=dzdt(x+kx2*dt/2 ,z+kz2*dt/2)
!
LET kx4=dxdt( y+ky3*dt ,z+kz3*dt)
LET ky4=dydt(x+kx3*dt, y+ky3*dt )
LET kz4=dzdt(x+kx3*dt ,z+kz3*dt)
!
LET x=x+(kx1+2*kx2+2*kx3+kx4)*dt/6
LET y=y+(ky1+2*ky2+2*ky3+ky4)*dt/6
LET z=z+(kz1+2*kz2+2*kz3+kz4)*dt/6
END SUB
!-----run
SET TEXT background "OPAQUE"
SET COLOR MIX(15) .5,.5,.5
SET POINT STYLE 1
DIM vl(12),vr(12),vb(12),vt(12) ,va(12)
DATA .8, .8, .6, .4, .2, 0 , 0 , 0 , .2, .4, .6, .8
DATA 1 , 1 , .8, .6, .4, .2, .2, .2, .4, .6, .8, 1
DATA .4, .6, .8, .8, .8, .6, .4, .2, 0 , 0 , 0 , .2
DATA .6, .8, 1 , 1 , 1 , .8, .6, .4, .2, .2, .2, .4
DATA 0, 30, 60, 90,120,150,180,-150,-120,-90,-60,-30
MAT READ vl,vr,vb,vt,va
!
CLEAR
LET dt=.03 !演算ピッチ sec. pitch time
LET t=0
DO
SET VIEWPORT .2, .8, .2, .8
SET WINDOW -7,7,-7,7! -4,6, -6,3
IF 0< t THEN
PLOT LINES:bakx,baky; x,y
ELSE
DRAW axes !grid(1,1)
FOR p=1 TO 12
PLOT LINES:0,0;8*COS(va(p)),8*SIN(va(p))
PLOT TEXT,AT 6.6*COS(va(p))-.15, 6.6*SIN(va(p))-.3 :STR$(va(p))
NEXT p
END IF
LET bakx=x
LET baky=y
CALL RungeKutta
FOR p=1 TO 12
IF ABS( va(p)-ANGLE(x,y))< 1 THEN
CALL poincare
END IF
NEXT p
LET t=t+dt
LOOP UNTIL 2000< t
SUB poincare
SET VIEWPORT vl(p),vr(p),vb(p),vt(p)
SET WINDOW -1,7,-1,7
!PLOT LINES:-1,-1;7,-1;7,7;-1,7;-1,-1
DRAW axes
PLOT POINTS: SQR(x^2+y^2),z
END SUB
END
|
|