PROGRAM AMMET
OPEN(1,'INPUT.DAT')
OPEN(2,'OUTPUT.DAT')
READ(1,*)A,B,N,Y0
CALL AMM(A,B,N,Y0)
END PROGRAM
SUBROUTINE AMM(A,B,N,Y0)
F(T,Y)=Y-T*T+1
G(T)=(T+1)**2-0.5*EXP(T)
REAL::T(0:N),Y(0:N),W(0:N),K1,K2,K3,K4
WRITE(2,*)'AM IMPLICIT METHOD:'
WRITE(2,10)
10 FORMAT(3X,'T',9X,'W',8X,'EXACT',5X,'ERROR')
H=(B-A)/N
T(0)=A
W(0)=Y0
Y(0)=Y0
WRITE(2,11)T(0),Y(0),G(T(0)),ABS(Y(0)-G(T(0)))
11 FORMAT(2X,F4.2,2X,F9.6,2X,F9.6,2X,F9.6)
DO I=0,N-1
K1=H*F(T(I),W(I))
K2=H*F(T(I)+0.5*H,W(I)+0.5*K1)
K3=H*F(T(I)+0.5*H,W(I)+0.5*K2)
K4=H*F(T(I)+H,W(I)+K3)
W(I+1)=W(I)+(K1+2*K2+2*K3+K4)/6
T(I+1)=A+(I+1)*H
IF(I<3) THEN
Y(I+1)=W(I+1)
ELSE
Y(I+1)=Y(I)+H*(251*F(T(I+1),W(I+1))+646*F(T(I),W(I))-264*F(T(I-1),W(I-1))+106*F(T(I-2),W(I-2))-19*F(T(I-3),W(I-3)))/720
END IF
WRITE(2,11)T(I+1),Y(I+1),G(T(I+1)),ABS(Y(I+1)-G(T(I+1)))
END DO
END SUBROUTINE
Wednesday, March 17, 2010
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment