1
我試圖實現二分法與Fortran 90的得到解決,精確到10^-5的3倍 - E 1 X = 0 1 < = X < = 2二分法不收斂
這是我想出的代碼,但是當我運行代碼時,它僅僅列出了.1.5000000000000000次。
我應該如何解決這個問題,以便我可以繼續正確應用二分法,直到我得到10^-5左右的數字?
program main
implicit none
double precision a,b, TOL
integer maxN
a = 1.d0
b = 2.d0
TOL = .000001d0
maxN = 100
call bisection(a, b, TOL, maxN)
end program
function f(x)
double precision x,f
f = 3*x - e**x
end function
subroutine bisection(a, b, TOL,maxN)
implicit none
double precision a, b, TOL
integer maxN
double precision p, fp, fa, fb, f
integer j
p = (a+b)/2.d0
do j =1, maxN
fp = f(p)
fa = f(a)
fb = f(b)
if (0.5d0 * (b-a) < TOL) then
print *, "Reach desired tolerance",p
return
end if
if (fa*fp <0) then
b = p
else if (fb*fp < 0) then
a = p
end if
p = (a+b)/2.d0
print *,j,p
end do
end subroutine bisection
歡迎使用StackOverflow。對所有Fortran問題使用標籤fortran。必要時添加特定版本。請注意,Fortran 90是一個25年的舊版本。 –
在代碼中使用更多的縮進也是很好的選擇。 –