PROGRAM EXAM14_1USE BISECT!应用二分法模块
REAL X1,X2,X
DOPRINT*,'输入x1,x2的值:'!输入x1,x2,直到f(x1)和f(x2)异号为止
READ*,X1,X2IF(FUNC(X1)*FUNC(X2)<0.0)EXIT
PRINT*,'此区间无根,请重新输入!'
END DO
X=SOLVE(X1,X2)!调用求解函数
PRINT10,'X=',X
10 FORMAT(A,F15.7)
ENDMODULE BISECT
CONTAINSREAL FUNCTION FUNC(X)!定义方程函数
IMPLICIT NONE
REAL X
FUNC=X**3-2*X**2+7*X+4END FUNCTION FUNC
MODULE BISECT
CONTAINSREAL FUNCTION FUNC(X)!定义方程函数
IMPLICIT NONE
REAL X
FUNC=X**3-2*X**2+7*X+4END FUNCTION FUNC
REAL FUNCTION SOLVE(X1,X2)!二分法求解函数
IMPLICIT NONE
REAL X1,X2,X,F1,F2,FX
X=(X1+X2)/2.0FX=FUNC(X)
DO WHILE(ABS(FX)>1E-6)
F1=FUNC(X1)
F2=FUNC(X2)
IF(F1*FX<0)THEN
X2=X
ELSEX1=X
ENDIFX=(X1+X2)/2.0FX=FUNC(X)
END DO
SOLVE=X
END FUNCTION SOLVE
END MODULE BISECT
PROGRAM EXAM14_2USE SECANT
REAL X1,X2,X
DOPIRNT*,'输入X1,X2的值:'
READ*,X1,X2IF(FUNC(X1)*FUNC(X2)<0)EXIT
PRINT*,'此区间无跟,请重新输入!'
END DO
X=SOLVE(X1,X2)!调用求解函数
PRINT10,'X=',X
10 FORMAT(A,F15.7)
ENDMODULE SECANT
CONTAINSREAL FUNCTION FUNC(X)!定义方程函数
IMPLICIT NONE
REAL X
FUNC=X**3-2*X**2+7*X+4END FUNCTION FUNC
REAL FUNCTION SOLVE(X1,X2)!弦截法求解函数
IMPLICIT NONE
REAL X1,X2,X,F1,F2,FX
X=X2-(X2-X1)/(FUNC(X2)-FUNC(X1))*FUNC(X2)!弦截法与二分法区别
FX=FUNC(X)
DO WHILE(ABS(FX)>1E-6)
F1=FUNC(X1)
F2=FUNC(X2)
IF(F1*FX<0)THEN
X2=X
ELSEX1=X
ENDIFX=X2-(X2-X1)/(FUNC(X2)-FUNC(X1))*FUNC(X2)!区别
FX=FUNC(X)
END DO
SOLVE=X
END FUNCTION SOLVE
END MODULE SECANT
PROGRAM EXAM14_3USE ITERATION
REAL X0PRINT*,'输入初值X0:'
READ*,X0CALL SOLVE(X0)!调用迭代法求解
ENDMODULE ITERATION
IMPLICIT NONE
INTEGER::MAX=200!最大允许迭代次数
CONTAINSREAL FUNCTION G(X)!定义迭代函数G(X)
IMPLICIT NONE
REAL X
G=(-X**3+2*X**2-4)/7END FUNCTION G
SUBROUTINE SOLVE(X)!迭代法求解子程序
IMPLICIT NONE
REAL X,X1INTEGER I
I=1X1=G(X)
DO WHILE(ABS(X-X1)>1E-6.AND.I<=MAX)
PRINT10,I,X1X=X1I=I+1X1=G(X)
END DO
IF(I<=MAX)THEN
PRINT20,'X=',X1!输出计算结果
ELSEPRINT30,'经过',MAX,'次迭代后仍未收敛'
ENDIF10 FORMAT('I=',I4,6X,'X=',F15.7)
20 FORMAT(A,F15.7)
30 FORMAT(A,I4,A)
END SUBROUTINE SOLVE
END MODULE ITERATION
PROGRAM EXAM_14_4USE NEWTON
REAL X0PRINT*,'输入初值'
READ*,X0CALL SOLVE(X0)!调用牛顿迭代法求解子程序
ENDMODULE NEWTON
IMPLICIT NONE
INTEGER::MAX=200!最大允许迭代次数
CONTAINSREAL FUNCTION FUNC(X)!定义方程
IMPLICIT NONE
REAL X
FUNC=X**3-2*X**2+7*X+4END FUNCTION FUNC
REAL FUNCTION DFUNC(X)!一次导数
IMPLICIT NONE
REAL X
DFUNC=3*X**2-4*X+7END FUNCTION DFUNC
SUBROUTINE SOLVE(X)!求解子程序
IMPLICIT NONE
REAL X,X1INTEGER I
I=1X1=X-FUNC(X)/DFUNC(X)
DO WHILE(ABS(X-X1)>1E-6.AND.I<=MAX)
PRINT10,I,X1X=X1I=I+1X1=X-FUNC(X)/DFUNC(X)
END DO
IF(I<=MAX)THEN
PRINT20,'X=',X1!输出计算结果
ELSEPRINT30,'经过',MAX,'次迭代后仍未收敛'
ENDIF10 FORMAT('I=',I4,6X,'X=',F15.7)
20 FORMAT(A,F15.7,A)
30 FORMAT(A,I4,A)
END SUBROUTINE SOLVE
END MODULE NEWTON