MODULE ALL_STATISTICS CONTAINS SUBROUTINE TEST1 (X,N,M) REAL X(N,M),R(M,M) X(:,:) = X(:,:)*2 print*,'CTC' PRINT '(4F12.4)' ,X END SUBROUTINE FUNCTION AVER(X,N) !... HAM NAY TINH TRUNG BINH SO HOC CUA CHUOI ! INPUT: + X MANG DO DAI N CHUA SO LIEU QUAN TRAC ! + N DUNG LUONG MAU ! OUTPUT: TRUNG BINH SO HOC CUA X ! INTEGER N, I REAL X(N) ! MANG CHUA SO LIEU BAN DAU REAL TMP TMP = 0.0 DO I = 1,N TMP = TMP + X(I) END DO AVER = TMP/REAL(N) RETURN END FUNCTION !--------------------------------------------------------- FUNCTION STDEV (X,N) !... HAM NAY TINH DO LECH CHUAN CUA CHUOI X ! INPUT: + X MANG DO DAI N CHUA SO LIEU QUAN TRAC ! + N DUNG LUONG MAU ! OUTPUT: DO LECH CHUAN CUA X ! INTEGER N, I REAL X(N) ! MANG CHUA SO LIEU BAN DAU REAL TMP, TMP1 TMP = 0.0 DO I = 1,N TMP = TMP + X(I)*X(I) END DO TMP1 = AVER(X,N) STDEV = SQRT(TMP/REAL(N) - TMP1*TMP1) RETURN END FUNCTION !--------------------------------------------------------- SUBROUTINE XMAXMIN (X,N, AMAX, AMIN) !... CT NAY TIM MAX, MIN CUA CHUOI X ! INPUT: + X MANG DO DAI N CHUA SO LIEU QUAN TRAC ! + N DUNG LUONG MAU ! OUTPUT: MAX,MIN CUA X ! INTEGER N,I,J REAL, INTENT(INOUT) :: X(N) ! MANG CHUA SO LIEU BAN DAU REAL AMAX, AMIN, TMP DO I=1,N-1 DO J=I+1,N IF (X(J) < X(I)) THEN TMP = X(I) X(I) = X(J) X(J) = TMP ENDIF ENDDO ENDDO AMAX = X(N) AMIN = X(1) RETURN END SUBROUTINE !--------------------------------------------------------- FUNCTION P_LOWER(X,N,X0) !... HAM NAY TINH UOC LUONG XAC SUAT CUA SU KIEN !... P(X= K LA NHUNG SO NGUYEN ! OUTPUT: TO HOP CHAP K CUA N ! FUNCTION/SUBROUTINE DUOC GOI TOI: FAC(N) ! IF (N.LT.0.OR.K.LT.0.OR.N.LT.K) THEN WRITE(*,*)' INVALID NUMERIC INPUT IN COMBIN FUNCTION' STOP ELSE COMBIN=FAC(N)/FAC(K)/FAC(N-K) RETURN ENDIF END FUNCTION !--------------------------------------------------------- FUNCTION POSSION(LAMDA,K) ! HAM NAY TINH XAC SUAT SU KIEN XUAT HIEN K LAN THEO POSSION ! INPUT: + LAMDA TRUNG BINH SO LAN XUAT HIEN ! + K SO LAN XUA HIEN SU KIEN ! OUTPUT: XAC SUAT DE SU KIEN XUAT HIEN K LAN ! REAL LAMDA POSSION=EXP(-LAMDA)*LAMDA**K/FAC(K) RETURN END FUNCTION !--------------------------------------------------------- SUBROUTINE SORT(X,N,X1,CHISO,N1) ! ! CHUONG TRINH NAY SAP XEP CHUOI THANH CHUOI TRINH TU ! VA CHUOI XEP HANG ! ! INPUT: + MANG X DO DAI N CHUA CHUOI SO LIEU BAN DAU ! + N DUNG LUONG MAU ! OUTPUT: + MANG X DO DAI N CHUA CHUOI TRINH TU ! + MANG X1 DO DAI N1 CHUA CHUOI XEP HANG ! + MANG CHISO DO DAI N1 CHUA CHI SO CUA CHUOI XEP HANG ! + N1 SO THANH PHAN TRONG CHUOI XEP HANG ! DIMENSION X(1),X1(1),CHISO(1) INTEGER N,N1,I,J,K REAL TMP ! SAP XEP THANH CHUOI TRINH TU TANG DAN DO I=1,N-1 DO J=I+1,N IF (X(J).LT.X(I)) THEN TMP=X(J) X(J)=X(I) X(I)=TMP ENDIF ENDDO ENDDO ! XAC DINH CAC THANH PHAN CUA CHUOI XEP HANG N1=1 I=1 X1(N1)=X(I) CHISO(N1)=REAL(I) DO I=I+1 IF (I.GT.N) EXIT IF (X(I).NE.X(I-1)) THEN N1=N1+1 X1(N1)=X(I) ENDIF END DO ! TINH CHI SO CUA CAC THANH PHAN TRONG CHUOI XEP HANG DO J=1,N1 K=0 CHISO(J)=0.0 DO I=1,N IF (X(I).EQ.X1(J)) THEN K=K+1 CHISO(J)=CHISO(J)+REAL(I) ENDIF ENDDO CHISO(J)=CHISO(J)/REAL(K) ENDDO RETURN END SUBROUTINE !--------------------------------------------------------- FUNCTION PROB1(FR,XC,M,X0) ! ! HAM NAY TINH UOC LUONG XAC SUAT P(XX0)=P. ! INPUT: + P XAC SUAT DE X>X0 (P(X>X0)=P) ! + N SO BAC TU DO, PHAI LA MOT SO THUC ! OUTPUT: X0 ! SUBROUTINE/FUNCTION DUOC GOI TOI: CHIDIST PARAMETER (EPS=1.0E-6) REAL P,AP,N, A,B,C,P0 IF (P.LT.0.0.OR.P.GT.1.0) THEN WRITE(*,*)' INVALID NUMERIC INPUT IN AKBPINV FUNCTION' STOP ENDIF IF (P.EQ.0.0) THEN CHINV=0.0 RETURN ELSE IF (P.EQ.1) THEN WRITE(*,*)' THE P VALUE TOO BIG IN AKBPINV FUNCTION' STOP ENDIF ! A=0.0 B=9999999.0 C=A AP=P DO P0=CHIDIST(B,N) SS=ABS((P0-AP)/AP) SS1=ABS((B-C)/B) IF (SS.LT.EPS.AND.SS1.LT.EPS) EXIT IF (AP.GT.P0) THEN C=B B=(A+B)/2.0 ELSE IF (AP.LT.P0) THEN B=(C+B)/2.0 ENDIF ENDDO A=(C+B)/2.0 CHINV=A RETURN END FUNCTION !--------------------------------------------------------- FUNCTION CHIDIST(X0,N) ! HAM NAY TINH XAC SUAT P=P(X>0) VOI X LA BIEN NGAU NHIEN ! CO PHAN BO "KHI BINH PHUONG" VOI N BAC TU DO. ! INPUT: + X0 MOT GIA TRI NAO DO CUA X ! + N BAC TU DO ! OUTPUT: P=P(X>X0) ! SUBROUTINE/FUNCTION DUOC GOI TOI: GAMMQ REAL X0,N CHIDIST=GAMMQ(N/2.0,X0/2.0) RETURN END FUNCTION !-------------------------------------------------------- FUNCTION gammq(a,x) REAL a,gammq,x !CU USES gcf,gser REAL gammcf,gamser,gln if(x.lt.0..or.a.le.0.)pause 'bad arguments in gammq' if(x.lt.a+1.)then call gser(gamser,a,x,gln) gammq=1.-gamser else call gcf(gammcf,a,x,gln) gammq=gammcf endif return END FUNCTION !--------------------------------------------------------- SUBROUTINE gcf(gammcf,a,x,gln) INTEGER ITMAX REAL a,gammcf,gln,x,EPS,FPMIN PARAMETER (ITMAX=100,EPS=3.e-7,FPMIN=1.e-30) !CU USES gammln INTEGER i REAL an,b,c,d,del,h !,gammln gln=gammln(a) b=x+1.-a c=1./FPMIN d=1./b h=d do i=1,ITMAX an=-i*(i-a) b=b+2. d=an*d+b if(abs(d).lt.FPMIN)d=FPMIN c=b+an/c if(abs(c).lt.FPMIN)c=FPMIN d=1./d del=d*c h=h*del if(abs(del-1.).lt.EPS)goto 1 enddo pause 'a too large, ITMAX too small in gcf' 1 gammcf=exp(-x+a*log(x)-gln)*h return END SUBROUTINE !--------------------------------------------------------- SUBROUTINE gser(gamser,a,x,gln) INTEGER ITMAX REAL a,gamser,gln,x,EPS PARAMETER (ITMAX=100,EPS=3.e-7) !CU USES gammln INTEGER n REAL ap,del,sum ! ,gammln gln=gammln(a) if(x.le.0.)then if(x.lt.0.)pause 'x < 0 in gser' gamser=0. return endif ap=a sum=1./a del=sum do n=1,ITMAX ap=ap+1. del=del*x/ap sum=sum+del if(abs(del).lt.abs(sum)*EPS)goto 1 enddo pause 'a too large, ITMAX too small in gser' 1 gamser=sum*exp(-x+a*log(x)-gln) return END SUBROUTINE !--------------------------------------------------------- FUNCTION gammln(xx) REAL gammln,xx INTEGER j DOUBLE PRECISION ser,stp,tmp,x,y,cof(6) SAVE cof,stp DATA cof,stp/76.18009172947146d0,-86.50532032941677d0,& 24.01409824083091d0,-1.231739572450155d0,.1208650973866179d-2,& -.5395239384953d-5,2.5066282746310005d0/ x=xx y=x tmp=x+5.5d0 tmp=(x+0.5d0)*log(tmp)-tmp ser=1.000000000190015d0 do j=1,6 y=y+1.d0 ser=ser+cof(j)/y enddo gammln=tmp+log(stp*ser/x) return END FUNCTION !--------------------------------------------------------- FUNCTION TINV(P,N) ! HAM NAY TINH GIA TRI X0 CUA BIEN NGAU NHIEN X PHAN BO ! STUDENT VOI N BAC TU DO THOA MAN DIEU KIEN ! P(|X|>X0)=P. ! INPUT: + P XAC SUAT DE |X|>X0 (P(|X|>X0)=P) ! + N SO BAC TU DO, PHAI LA MOT SO THUC ! OUTPUT: X0 ! SUBROUTINE/FUNCTION DUOC GOI TOI: TDIST PARAMETER (EPS=1.0E-6) REAL P,AP,N, A,B,C,P0 IF (P.LT.0.0.OR.P.GT.1.0) THEN WRITE(*,*)' INVALID NUMERIC INPUT IN AKBPINV FUNCTION' STOP ENDIF IF (P.EQ.0.0) THEN WRITE(*,*)' THE P VALUE TOO SMALL IN AKBPINV FUNCTION' STOP ELSE IF (P.EQ.1) THEN WRITE(*,*)' THE P VALUE TOO BIG IN AKBPINV FUNCTION' STOP ENDIF ! A=0.0 B=99999.0 AP=P DO P0=TDIST(B,N) SS=ABS((P0-AP)/AP) SS1=ABS((B-C)/B) IF (SS.LT.EPS.AND.SS1.LT.EPS) EXIT IF (AP.GT.P0) THEN C=B B=(A+B)/2.0 ELSE IF (AP.LT.P0) THEN B=(C+B)/2.0 ENDIF ENDDO A=(C+B)/2.0 TINV=A RETURN END FUNCTION !--------------------------------------------------------- FUNCTION TDIST(X0,N) ! HAM NAY TINH XAC SUAT DE BIEN NGAU NHIEN X CO PHAN BO STUDENT ! VOI N BAC TU DO NHAN GIA TRI NGOAI KHOANG (-X0;X0): ! P=P(|X|>X0)=1-P(|X|X0)=P. ! INPUT: + P XAC SUAT DE X>X0 (P(X>X0)=P) ! + N1 VA N2 LA SO BAC TU DO, PHAI LA NHUNG SO THUC ! OUTPUT: X0 ! SUBROUTINE/FUNCTION DUOC GOI TOI: FDIST PARAMETER (EPS=1.0E-6) REAL P,AP,N1,N2, A,B,C,P0,SS,SS1 IF (P.LT.0.0.OR.P.GT.1.0) THEN WRITE(*,*)' INVALID NUMERIC INPUT IN FINV FUNCTION' STOP ENDIF IF (P.EQ.0.0) THEN WRITE(*,*)' THE P VALUE TOO SMALL IN FINV FUNCTION' STOP ELSE IF (P.EQ.1) THEN FINV=0.0 RETURN ENDIF ! A=0.0 B=9999999.0 C=A AP=P DO P0=FDIST(B,N1,N2) SS=ABS((P0-AP)/AP) SS1=ABS((B-C)/B) IF (SS.LT.EPS.AND.SS1.LT.EPS) EXIT IF (AP.GT.P0) THEN C=B B=(A+B)/2.0 ELSE IF (AP.LT.P0) THEN B=(C+B)/2.0 ENDIF ENDDO A=(C+B)/2.0 FINV=A RETURN END FUNCTION !--------------------------------------------------------- FUNCTION FDIST(X0,N1,N2) ! HAM NAY TINH XAC SUAT DE BIEN NGAU NHIEN X CO PHAN BO FISHER ! VOI N1 VA N2 BAC TU DO NHAN GIA TRI >X0: ! P=P(X>X0)=1-P(X R1 0 IF (Tmp == 0) THEN K = I + 1 DO WHILE (Tmp == 0 .AND. K < N) Tmp = A( K, I ) K = K + 1 END DO IF (Tmp == 0) THEN PRINT*, "EXIT Here" STOP ELSE X = A( I, 1:N+1 ) K = K - 1 A( I, 1:N+1 ) = A( K, 1:N+1 ) A( K, 1:N+1 ) = X END IF END IF Tmp = A(i,i) ! Chuan hoa hang I A(i,1:N+1) = A(i,1:N+1) / Tmp do i1=1,N ! Khö cac phan tu ngoai d/cheo if (i1 /= i) then Tmp = A(i1,i) A(i1,1:N+1)=A(i1,1:N+1)-A(i,1:N+1)*Tmp endif enddo Enddo X(1:N) = A(1:N,N+1) ! Nghiem END SUBROUTINE !--------------------------------------------------------- SUBROUTINE MINVERT(AA,N) ! CHUONG TRINH NAY TINH MA TRAN NGHICH DAO CUA MA TRAN A ! INPUT: + AA MANG MOT CHIEU KICH THUOC N*N LUU THEO COT CUA A ! + N SO HANG/COT CUA MA TRAN A ! OUTPUT: AA MA TRAN NGHICH DAO CUA A ! DIMENSION AA(N*N), A(N,N) K=0 DO J=1,N DO I=1,N K=K+1 A(I,J)=AA(K) ENDDO ENDDO M=N-1 DO I=1,N R=A(I,1) DO K=1,M A(I,K)=A(I,K+1)/R ENDDO A(I,N)=1.0/R DO J=1,N IF (I.NE.J) THEN R=A(J,1) DO K=1,M A(J,K)=A(J,K+1)-R*A(I,K) ENDDO A(J,N)=-R*A(I,N) ENDIF ENDDO ENDDO K=0 DO J=1,N DO I=1,N K=K+1 AA(K)=A(I,J) ENDDO ENDDO RETURN END SUBROUTINE !-------------------------------------------------------- SUBROUTINE NDMT_GAUS (A,N) REAL A(N,N), B(N,2*N), X(2*N) integer i,j,k REAL Tmp1, Tmp2 B = 0. ! Khoi tao B B( 1:N, 1:N ) = A(1:N,1:N) ! Nua dau cua B DO I = 1, N ! Duong cheo nua sau cua B B( I, N+I ) = 1. END DO DO I = 1, N Tmp1 = B( I, I ) IF (Tmp1 == 0) THEN ! Doi cho cac hang K = I + 1 DO WHILE (Tmp1 == 0 .AND. K <= N) Tmp1 = B( K, I ) K = K + 1 END DO IF (Tmp1 == 0) THEN PRINT*, "EXIT Here" STOP ELSE X = B( I, 1:2*N ) K = K - 1 B( I, 1:2*N ) = B( K, 1:2*N ) B( K, 1:2*N ) = X END IF END IF ! Chuan hoa hang I cho phan tu tren d/cheo B( I, 1:2*N ) = B( I, 1:2*N ) / Tmp1 ! Khu ngoai duong cheo nua dau cua B DO J = 1, N IF (J /= I) THEN Tmp2 = B( J, I ) B( J, 1:2*N ) = B( J, 1:2*N ) & - B( I, 1:2*N ) * Tmp2 END IF END DO END DO ! Nghich dao cua A(1:N, 1:N) A = B( 1:N, N+1:2*N ) ! Nhan AI(1:N, 1:N) voi A(1:N,1:N) se nhan duoc nghiem END SUBROUTINE !--------------------------------------------------------- SUBROUTINE MULTIP(A,B,C,N,M,L) ! CHUONG TRINH NAY TINH TICH CUA HAI MA TRAN ! INPUT: + A MANG MOT CHIEU KICH THUOC N*M (N HANG, M COT) ! LUU MA TRAN A THEO COT ! + B MANG MOT CHIEU KICH THUOC M*L (M HANG, L COT) ! LUU MA TRAN B THEO COT ! + N SO HANG CUA MA TRAN A ! + M SO COT CUA A VA LA SO HANG CUA B ! + L SO COT CUA B ! OUTPUT: + C MANG MOT CHIEU KICH THUOC N*L (N HANG, L COT) ! LUU MA TRAN C THEO COT DIMENSION A(N*M),B(M*L),C(N*L) DO I=1,N DO K=1,L IK=(K-1)*N+I C(IK)=0.0 DO J=1,M IJ=(J-1)*N+I !(I-1)*M+J JK=(K-1)*M+J C(IK)=C(IK)+A(IJ)*B(JK) ENDDO ENDDO ENDDO RETURN END SUBROUTINE !--------------------------------------------------------- FUNCTION PPDS(A,N,IR,JC) ! ! HAM NAY TINH PHAN PHU DAI SO CUA PHAN TU B(IR,JC) ! (HANG IR, COT JC) CUA MA TRAN B(NxN) MA CAC PHAN TU ! CUA NO DUOC LUU TRONG MANG A(N*N) THEO QUI CACH COT ! TRUOC DONG SAU ! INPUT: + MANG A(N*N) CHUA MA TRAN DAU VAO CUA B ! + N KICH THUOC CUA B ! + IR CHI SO HANG ! + JC CHI SO COT ! OUTPUT: PHAN PHU DAI SO CUA PHAN TU HANG IR COT JC ! DIMENSION A(N*N), B(N,N) K=0 DO J=1,N DO I=1,N K=K+1 B(I,J)=A(K) ENDDO ENDDO K=0 DO J=1,N IF (J.NE.JC) THEN DO I=1,N IF (I.NE.IR) THEN K=K+1 A(K)=B(I,J) ENDIF ENDDO ENDIF ENDDO PPDS=DET(A,N-1)*(-1)**(IR+JC) RETURN END FUNCTION !--------------------------------------------------------- FUNCTION DET(X,N) ! HAM NAY TINH DINH THUC CUA MA TRAN A(N,N) ! INPUT: + MANG X DO DAI N*N CHUA CAC PHAN TU CUA MA TRAN A ! + N KICH THUOC MA TRAN A ! CHU Y: X(1)=A(1,1), X(2)=A(2,1),..., X(N)=A(N,1),X(N+1)=A(1,2), ! X(N+2)=A(2,2),... ! OUTPUT: DINH THUC CUA A ! PARAMETER (EP=1.0E-6) DIMENSION X(N*N),A(N,N) K=0 DO J=1,N DO I=1,N K=K+1 A(I,J)=X(K) ENDDO ENDDO D=1.0 N1=N-1 DO K=1,N1 AM=0.0 DO I=K,N T=A(I,K) IF (ABS(T).GE.ABS(AM)) THEN AM=T J=I ENDIF ENDDO IF (ABS(AM).LE.EP) THEN DT=0.0 DET=DT RETURN ELSE IF (J.NE.K) THEN D=-D DO I=K,N T=A(J,I) A(J,I)=A(K,I) A(K,I)=T ENDDO ENDIF ENDIF M=K+1 DO I=M,N T=A(I,K)/AM DO J=M,N A(I,J)=A(I,J)-T*A(K,J) ENDDO ENDDO D=D*A(K,K) ENDDO DT=D*A(N,N) DET=DT RETURN END FUNCTION !--------------------------------------------------------- FUNCTION HSTQR(R,M,J,K) ! HAM NAY TINH HE SO TUONG QUAN RIENG GIUA BIEN XJ VA XK ! KHI XET DONG THOI M BIEN X1,X2,...,XM ! INPUT: + R MANG MOT CHIEU CHUA MA TRAN TUONG QUAN CHUAN HOA ! (KICH THUOC M*M ==> R(M*M) ! + M KICH THUOC MA TRAN TUONG QUAN, DONG THOI CUNG LA ! SO BIEN DUOC XET ! + J,K CHI SO BIEN DUOC TINH TUONG QUAN RIENG ! OUTPUT: HE SO TUONG QUAN RIENG GIUA BIEN THU J VA THU K ! DIMENSION R(M*M),RT(M*M) RT=R RJK=PPDS(RT,M,J,K) RT=R RJJ=PPDS(RT,M,J,J) RT=R RKK=PPDS(RT,M,K,K) HSTQR=-RJK/(SQRT(RJJ*RKK)) RETURN END FUNCTION !--------------------------------------------------------- FUNCTION HSTQB(R,M,J) ! HAM NAY TINH HE SO TUONG QUAN BOI GIUA BIEN XJ VA TAP HOP ! M-1 BIEN X1,X2,X(J-1),X(J+1),..,XM ! INPUT: + R MANG MOT CHIEU CHUA MA TRAN TUONG QUAN CHUAN HOA ! (KICH THUOC M*M ==> R(M*M) ! + M KICH THUOC MA TRAN TUONG QUAN, DONG THOI CUNG LA ! SO BIEN DUOC XET ! + J CHI SO BIEN DUOC TINH TUONG QUAN BOI VOI TAP M-1 ! BIEN CON LAI ! OUTPUT: HE SO TUONG QUAN BOI GIUA BIEN THU J VA CAC BIEN KHAC ! DIMENSION R(M*M),RT(M*M) RT=R RJJ=PPDS(RT,M,J,J) RT=R RR=DET(RT,M) HSTQB=SQRT(1-RR/RJJ) RETURN END FUNCTION !--------------------------------------------------------- SUBROUTINE NGHIEM_CHIA_DOI (XL, XR, EPSILON, X0, ERROR, FF) LOGICAL ERROR REAL XL,XR,X0,EPSILON REAL SS EXTERNAL FF ERROR = .FALSE. ! CO NGHIEM TRONG KHOANG (XL,XR) IF (FF(XL)==0.) THEN ! NGHIEM TAI DAU MUT TRAI X0 = XL RETURN ELSE IF(FF(XR)==0.) THEN ! NGHIEM TAI DAU MUT PHAI X0 = XR RETURN ELSE IF(XL==XR) THEN ! HAI DAU MUT TRUNG NHAU VA ERROR = .TRUE. ! KHONG PHAI LA NGHIEM RETURN ELSE IF(XL>XR) THEN ! DOI VI TRI HAI DAU MUT SS = XL XL = XR XR = SS END IF SS = ABS(XR-XL) DO WHILE (SS >= EPSILON) X0 = (XR+XL)/2. FX0=FF(X0) FXL=FF(XL) FXR=FF(XR) IF (FX0 == 0) THEN ! NGHIEM DUNG TAI X0 EXIT ELSE IF (FXL*FX0 < 0) THEN ! NGHIEM O NUA BEN TRAI XR = X0 ELSE IF (FXR*FX0 < 0) THEN ! NGHIEM O NUA BEN PHAI XL = X0 END IF SS = ABS(XR-XL) ENDDO END SUBROUTINE !--------------------------------------------------------- FUNCTION SIMPSON (A, B, EP) REAL A,B,DX,S1,S2,SS, EP INTEGER N, I !EXTERNAL FF N = 0 S1 = 0. DO N = N + 2 DX = (B - A)/(2*N) S2 = 0. DO I = 1, N-1 S2 = S2 + FF(A + 2*I*DX) END DO SS = 0. DO I = 1, N SS = SS + FF(A + (2*I-1)*DX) END DO S2 = DX/3*(FF(A) + FF(B) + 2*S2 + 4*SS) SS = ABS ((S2-S1)/S2) IF (SS < EP) EXIT S1 = S2 END DO SIMPSON = S2 END FUNCTION !--------------------------------------------------------- FUNCTION FF(X) REAL X ! PUT FUNCTION EXPRESSION HERE FF = 1/SQRT(2*4*ATAN(1.))*EXP(-0.5*X*X) END FUNCTION !--------------------------------------------------------- SUBROUTINE DH1(U,UX,N,DX,SODO,CYC) ! CHUONG TRINH TINH DAO HAM BAC NHAT CUA HAM U(X) ! INPUT: + U(N) MANG 1 CHIEU CHUA GIA TRI CUA U(X) ! + N: SO DIEM CO GIA TRI CUA U(X) ! + DX: DO DAI KHOANG CHIA CUA X ! + SODO: =1 SAI PHAN TIEN ! =2 SAI PHAN LUI ! =3 SAI PHAN TRUNG TAM DCX=2 ! =4 SAI PHAN TRUNG TAM DCX=4 ! + CYC: = .TRUE. NEU BIEN TUAN HOAN ! = .FALSE. NEU BIEN KHONG TUAN HOAN ! OUTPUT: UX: DAO HAM CUA U(X) ! SODO=1,CYC=.FALSE.: UX(1:N-1) ! SODO=2,CYC=.FALSE.: UX(2:N) ! SODO=3,CYC=.FALSE.: UX(2:N-1) ! CYC=.TRUE.: UX(1:N) INTEGER N,SODO, N1,N2,N3 LOGICAL CYC REAL U(N),UX(N),C1,C2,DX2,DX4 SELECT CASE (SODO) CASE (1) DO I=1,N-1 UX(I) = (U(I+1)-U(I))/DX ENDDO IF (CYC) UX(N) = U(1) CASE (2) DO I=2,N UX(I) = (U(I)-U(I-1))/DX ENDDO IF (CYC) UX(1) = U(N) CASE (3) DX2=2*DX DO I=2,N-1 UX(I) = (U(I+1)-U(I-1))/DX2 ENDDO UX(1) = (U(2)-U(1))/DX UX(N) = (U(N)-U(N-1))/DX IF (CYC) THEN UX(1) = (U(2)-U(N-1))/(2*DX) UX(N) = UX(1) END IF CASE (4) N1 = N-1 N2 = N-2 N3 = N-3 C1 = 4./3. C2 = 1./3. DX2 = 1./(2.*DX) DX4 = 1./(4.*DX) DO I = 3, N2 UX(I) = C1*((U(I+1)-U(I-1))*DX2) & - C2*((U(I+2)-U(I-2))*DX4) ENDDO IF (CYC) THEN UX(2) = C1*((U(3)-U(1))*DX2)-C2*((U(4)-U(N-1))*DX4) UX(1) = C1*((U(2)-U(N-1))*DX2)-C2*((U(3)-U(N-2))*DX4) UX(N) = UX(1) UX(N-1)= C1*((U(N)-U(N-2))*DX2)-C2*((U(2)-U(N-3))*DX4) END IF END SELECT END SUBROUTINE !--------------------------------------------------------- SUBROUTINE DH2 (U,UX,N,DX,SODO) ! CHUONG TRINH TINH DAO HAM BAC HAI CUA HAM U(X) ! INPUT: + U(N) MANG 1 CHIEU CHUA GIA TRI CUA U(X) ! + N: SO DIEM CO GIA TRI CUA U(X) ! + DX: DO DAI KHOANG CHIA CUA X ! + SODO: =1 DO CHINH XAC BAC 2 ! =2 DO CHINH XAC BAC 4 ! OUTPUT: UX: DAO HAM CUA U(X) ! SODO=1: UX(2:N-1) ! SODO=2: UX(3:N-2) INTEGER N,SODO REAL U(N),UX(N), DX REAL DX2,C15,C43,C12 DX2=DX*DX SELECT CASE (SODO) CASE (1) DO I=2,N-1 UX(I) = (U(I+1)-U(I-1)-2.*U(I))/DX2 ENDDO CASE (2) C15=1./5. C43=4./3. C12=1./12. DO I=3,N-2 UX(I)=(-C15*U(I)+C43*(U(I+1)-U(I-1)) & -C12*(U(I+2)-U(I-2)))/DX2 ENDDO END SELECT END SUBROUTINE !-------------------------------------------- SUBROUTINE LAPLA52 (U,LAPU,H,N,M) ! CHUONG TRINH TINH LAPLAXIAN CUA U(X,Y) ! THEO SO DO 5 DIEM, DO CHINH XAC BAC 2 ! INPUT: + U(N,M) GIA TRI CUA U ! + N,M SO DIEM NUT THEO X VA Y ! + H KHOANG CACH GIUA CAC DIEM NUT ! OUTPUT: LAPU(2:N-1,2:M-1) LAPLAXIAN CUA U INTEGER N,M REAL U(N,M),LAPU(N,M),H INTEGER IP1, IM1, JP1, JM1 N1=N-1 M1=M-1 DO I=2,N1 DO J=2,M1 IP1=I+1 IM1=I-1 JP1=J+1 JM1=J-1 LAPU(I,J)=(U(IP1,J)+U(IM1,J)+U(I,JP1)+U(I,JM1) & -4.*U(I,J))/H**2 ENDDO ENDDO RETURN END SUBROUTINE !-------------------------------------------- SUBROUTINE LAPLA92 (U,LAPU,H,N,M) ! CHUONG TRINH TINH LAPLAXIAN CUA U(X,Y) ! THEO SO DO 9 DIEM, DO CHINH XAC BAC 2 ! INPUT: + U(N,M) GIA TRI CUA U ! + N,M SO DIEM NUT THEO X VA Y ! + H KHOANG CACH GIUA CAC DIEM NUT ! OUTPUT: LAPU(2:N-1,2:M-1) LAPLAXIAN CUA U INTEGER N,M REAL U(N,M),LAPU(N,M),H INTEGER IP1, IM1, JP1, JM1 N1=N-1 M1=M-1 DO I=2,N1 DO J=2,M1 IP1=I+1 IM1=I-1 JP1=J+1 JM1=J-1 LAPU(I,J)=(U(IP1,JP1)+U(IP1,JM1)+U(IM1,JP1) & +U(IM1,JM1)+4.*(U(IP1,J)+U(IM1,J)+U(I,JP1) & +U(I,JM1))-20.*U(I,J))/(6.*H**2) ENDDO ENDDO RETURN END SUBROUTINE END MODULE ALL_STATISTICS