SUBROUTINE ODES
IMPLICIT NONE
REAL,DIMENSION(100)::X,Y1,Y2
DOUBLEPRECISION::H,K0,K1,K2,K3,Q0,Q1,Q2,Q3
INTEGER::I,N
WRITE(*,*)'本程序使用4阶精度R-K方法求解1阶ODEs初值问题.请输入希望数值解显示的项数:'
WRITE(*,*)
READ(*,*)N
WRITE(*,*)
WRITE(*,*)' I X Y1 Y2'
WRITE(*,*)
H=0.1
X(1)=0
Y1(1)=0
Y2(1)=1
DO 10 I=1,N,1
K0=H*(3*Y1(I)+2*Y2(I))
Q0=H*(4*Y1(I)+Y2(I))
Y1(I)=Y1(I)+1/2*K0
Y2(I)=Y2(I)+1/2*Q0
K1=H*(3*Y1(I)+2*Y2(I))
Q1=H*(4*Y1(I)+Y2(I))
Y1(I)=Y1(I)+1/2*K1
Y2(I)=Y2(I)+1/2*Q1
K2=H*(3*Y1(I)+2*Y2(I))
Q2=H*(4*Y1(I)+Y2(I))
Y1(I)=Y1(I)+K2
Y2(I)=Y2(I)+Q2
K3=H*(3*Y1(I)+2*Y2(I))
Q3=H*(4*Y1(I)+Y2(I))
X(I+1)=X(I)+H
Y1(I+1)=Y1(I)+(1/6)*(K0+2*K1+2*K2+K3)
Y2(I+1)=Y2(I)+(1/6)*(Q0+2*Q1+2*Q2+Q3)
WRITE(*,*)I,X(I),Y1(I),Y2(I)
10 CONTINUE
WRITE(*,*)
ENDSUBROUTINE ODES
PROGRAM COUNT4
IMPLICIT NONE
INTERFACE
SUBROUTINE ODES
IMPLICIT NONE
REAL,DIMENSION(100)::X,Y1,Y2
DOUBLEPRECISION::H,K0,K1,K2,K3,Q0,Q1,Q2,Q3
INTEGER::I,N
ENDSUBROUTINE ODES
ENDINTERFACE
CALL ODES
ENDPROGRAM COUNT4
待求解常微分方程组为
y1'=3y1+2y2
y2'=4y1+y2
y1(0)=0,y2(0)=1
程序运行结果不正确.
IMPLICIT NONE
REAL,DIMENSION(100)::X,Y1,Y2
DOUBLEPRECISION::H,K0,K1,K2,K3,Q0,Q1,Q2,Q3
INTEGER::I,N
WRITE(*,*)'本程序使用4阶精度R-K方法求解1阶ODEs初值问题.请输入希望数值解显示的项数:'
WRITE(*,*)
READ(*,*)N
WRITE(*,*)
WRITE(*,*)' I X Y1 Y2'
WRITE(*,*)
H=0.1
X(1)=0
Y1(1)=0
Y2(1)=1
DO 10 I=1,N,1
K0=H*(3*Y1(I)+2*Y2(I))
Q0=H*(4*Y1(I)+Y2(I))
Y1(I)=Y1(I)+1/2*K0
Y2(I)=Y2(I)+1/2*Q0
K1=H*(3*Y1(I)+2*Y2(I))
Q1=H*(4*Y1(I)+Y2(I))
Y1(I)=Y1(I)+1/2*K1
Y2(I)=Y2(I)+1/2*Q1
K2=H*(3*Y1(I)+2*Y2(I))
Q2=H*(4*Y1(I)+Y2(I))
Y1(I)=Y1(I)+K2
Y2(I)=Y2(I)+Q2
K3=H*(3*Y1(I)+2*Y2(I))
Q3=H*(4*Y1(I)+Y2(I))
X(I+1)=X(I)+H
Y1(I+1)=Y1(I)+(1/6)*(K0+2*K1+2*K2+K3)
Y2(I+1)=Y2(I)+(1/6)*(Q0+2*Q1+2*Q2+Q3)
WRITE(*,*)I,X(I),Y1(I),Y2(I)
10 CONTINUE
WRITE(*,*)
ENDSUBROUTINE ODES
PROGRAM COUNT4
IMPLICIT NONE
INTERFACE
SUBROUTINE ODES
IMPLICIT NONE
REAL,DIMENSION(100)::X,Y1,Y2
DOUBLEPRECISION::H,K0,K1,K2,K3,Q0,Q1,Q2,Q3
INTEGER::I,N
ENDSUBROUTINE ODES
ENDINTERFACE
CALL ODES
ENDPROGRAM COUNT4
待求解常微分方程组为
y1'=3y1+2y2
y2'=4y1+y2
y1(0)=0,y2(0)=1
程序运行结果不正确.