Příklad kódu ve FORTRANU 77 - Vykreslování rekurzivních struktur
za použití knihovny PGPLOT
![]()
![]()
PROGRAM CHAOS01 IMPLICIT NONE INTEGER I,N,BASE DOUBLE PRECISION X1(2),X2(2),A(3,2) PARAMETER(N=250000) A(1,1)=0 A(1,2)=0 A(2,1)=1 A(2,2)=0 A(3,1)=0.5 A(3,2)=1.0 X1(1)=RAND() X1(2)=RAND() CALL PGOPEN('?') CALL PGBOX('BCNTS1',0.0,0,'BCNTSV1',0.0,0) CALL PGSCH(0.05) DO 10 I = 1, N BASE = INT(3*(RAND())+0.9999) X2(1) = ((X1(1) + A(BASE,1))/2) X2(2) = ((X1(2) + A(BASE,2))/2) CALL PGPT(1,REAL(X2(1)),REAL(X2(2)),17) X1(1)=X2(1) X1(2)=X2(2) 10 CONTINUE CALL PGCLOS() ENDDatový soubor pro tento programPROGRAM CHAOS02 IMPLICIT NONE INTEGER I,N,BASE REAL TEMP,PROB(4) DOUBLE PRECISION X1(2),X2(2),A(4,4),B(2,4) PARAMETER(N=250000) C DATA A/0.5, 0.0, 0.0, 0.5, C . 0.5, 0.0, 0.0, 0.5, C . 0.5, 0.0, 0.0, 0.5/ C DATA B/0.0, 0.0, C . 0.5, 0.0, C . 0.0, 0.5/ X1(1)=RAND() X1(2)=RAND() OPEN(UNIT=10,FILE='data.chaos',STATUS='OLD',ERR=901) READ(10,*) A(1,1),A(2,1),A(3,1),A(4,1) READ(10,*) A(1,2),A(2,2),A(3,2),A(4,2) READ(10,*) A(1,3),A(2,3),A(3,3),A(4,3) READ(10,*) A(1,4),A(2,4),A(3,4),A(4,4) READ(10,*) B(1,1),B(2,1) READ(10,*) B(1,2),B(2,2) READ(10,*) B(1,3),B(2,3) READ(10,*) B(1,4),B(2,4) READ(10,*) PROB(1),PROB(2),PROB(3),PROB(4) PROB(2)=PROB(2)+PROB(1) PROB(3)=PROB(3)+PROB(2) PROB(4)=PROB(4)+PROB(3) CALL PGOPEN('?') CALL PGWINDOW(0.0,1.0,0.0,1.1) CALL PGBOX('BCNTS1',0.0,0,'BCNTSV1',0.0,0) CALL PGSCH(0.05) DO 10 I = 1, N TEMP = RAND() IF ((TEMP.GE.0).AND.(TEMP.LT.PROB(1))) BASE=1 IF ((TEMP.GE.PROB(1)).AND.(TEMP.LT.PROB(2))) BASE=2 IF ((TEMP.GE.PROB(2)).AND.(TEMP.LT.PROB(3))) BASE=3 IF ((TEMP.GE.PROB(3)).AND.(TEMP.LT.PROB(4))) BASE=4 C BASE = INT(4*(RAND())+0.9999) X2(1) = A(1,BASE)*X1(1)+A(2,BASE)*X1(2)+B(1,BASE) X2(2) = A(3,BASE)*X1(1)+A(4,BASE)*X1(2)+B(2,BASE) CALL PGPT(1,REAL(X2(1)),REAL(X2(2)),17) X1(1)=X2(1) X1(2)=X2(2) 10 CONTINUE CALL PGCLOS() goto 999 901 write(6,*) 'could not find chaos.data' 999 END
0.849 0.037 -0.037 0.849 0.197 -0.226 0.226 0.197 -0.150 0.283 0.260 0.237 0.000 0.000 0.000 0.160 0.0750 0.1830 0.4000 0.0490 0.5750 -0.0840 0.5000 0.0000 0.85 0.05 0.05 0.05Příklad kódu ve FORTRANU 77 - Určení vzdálenosti bodu od kružnice:
SUBROUTINE MKDCIR(X,Y,N,X0,Y0,R,D,MAKEF,FJAC,LDFJAC,IERROR) C C Fortran 77 implementation of METROS Key Function: C Distance to circle C C --------------------------------------------------------------------- C Parameters C (x,y) - points (1-dim array) INPUT C N - number of points INPUT C (Implementation specific) C (X0,Y0,R) - parameters of circle INPUT C D = distances OUTPUT C MAKEF - If MAKEF > 0 Jacobian computed INPUT C (Implementaiton specific) C FJAC - Jacobian OPTIONAL OUPUT C LDFJAC - Leading dimension of FJAC INPUT C (Implementation specific) C IERROR - Indicates errors in parameters OUTPUT C IERROR = -3: N <= 0 C IERROR = -6: R <= 0 C IERROR = -10: LDFJAC < N C C --------------------------------------------------------------------- C C .. Scalar Arguments .. DOUBLE PRECISION R,X0,Y0 INTEGER IERROR,LDFJAC,MAKEF,N C .. C .. Array Arguments .. DOUBLE PRECISION D(N),FJAC(LDFJAC,*),X(N),Y(N) C .. C .. Local Scalars .. DOUBLE PRECISION DX,DY,ONE,RI,SX,SY,ZERO INTEGER I C .. C .. Intrinsic Functions .. INTRINSIC SQRT C .. C .. Data statements .. DATA ONE,ZERO/1.0D0,0.0D0/ C .. C C Check inputs IF (N.LE.0) THEN IERROR = -3 ELSE IF (R.LE.ZERO) THEN IERROR = -6 ELSE IF ((MAKEF.GT.0) .AND. (LDFJAC.LT.N)) THEN IERROR = -10 ELSE IERROR = 0 END IF IF (IERROR.GT.0) RETURN C C C Loop through the points. C DO 20 I = 1,N DX = X(I) - X0 IF (DX.LT.ZERO) THEN DX = -DX SX = -1.0D0 ELSE SX = 1.0D0 END IF DY = Y(I) - Y0 IF (DY.LT.ZERO) THEN DY = -DY SY = -1.0D0 ELSE SY = 1.0D0 END IF IF (DX.EQ.ZERO .AND. DY.EQ.ZERO) THEN RI = ZERO ELSE IF (DX.GT.DY) THEN RI = DY/DX RI = DX*SQRT(ONE+RI*RI) ELSE RI = DX/DY RI = DY*SQRT(ONE+RI*RI) END IF D(I) = RI - R C C Calculate derivatives if required. C IF (MAKEF.GT.0) THEN IF (RI.EQ.ZERO) THEN FJAC(I,1) = ZERO FJAC(I,2) = ZERO ELSE FJAC(I,1) = -SX*DX/RI FJAC(I,2) = -SY*DY/RI END IF FJAC(I,3) = -ONE END IF 20 CONTINUE C ------------------------------------------------------------------- C End of MKDTOC C ------------------------------------------------------------------- END