Я пытаюсь реализовать Bisection метод с Fortran 90, чтобы получить решение, с точностью до 10^-5 для 3x - е^х = 0 для 1 < = х < = 2Bisection метод не сходится
Это код, который я придумал, но когда я запускаю код, он просто перечисляет .1.5000000000000000 100 раз.
Как исправить этот код, чтобы я мог правильно применять метод биссекции до тех пор, пока не получу число вокруг 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-летней и довольно устаревшей версией. –
Также полезно использовать больше отступов в ваших кодах. –