📄 bisect0.f90
字号:
! 二分法求解
! By Pon 1997/9/2
module NUMERICAL
implicit none
real, parameter :: zero = 0.00001
contains
real function bisect( A, B )
implicit none
real A,B ! 输入的猜值
real C ! 用来算(A+B)/2
real FA ! 记录F(A)
real FB ! 记录F(B)
real FC ! 记录F(C)
! 先求出C, F(C)的值
C = (A+B)/2.0
FC = func(C)
! F(C) 小于 ZERO 时,就视 F(C)=0 , 结束循环
do while( abs(fc) > zero )
FA = func(A)
FB = func(B)
if ( FA*FC < 0 ) then
! f(a)*f(c)<0 ,以a,c值为新的区间
B=C
C=(A+B)/2.0
else
! 不然就是以b,c为新的区间
A=C
C=(A+B)/2.0
end if
! 求出新的f(c)值
FC=FUNC(C)
end do
bisect = C
return
end function
! 求解用的函数
real function func(X)
implicit none
real X
FUNC=(X+3)*(X-3)
return
end function
end module
program main
use NUMERICAL
implicit none
real A,B ! 两个猜值
real ANS ! 算出的值
do while(.true.)
write(*,*) '输入两个猜测值'
read (*,*) A,B
! f(a)*f(b) < 0 的猜值才是有效的猜值
if ( func(A)*func(B) < 0 ) exit
write(*,*) "不正确的猜值"
end do
! 调用二叉法求根的函数
ANS=bisect( A, B )
! 写出结果
write(*,"('x=',F6.3)") ans
stop
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -