! 3.5.f90 ! 14:00 2014-08-15 ! implicit none character(10) :: keisen integer :: i, m, n real(8) :: eps, f, lambda, left, mid, r, right r = 0.1 f = 100.0 m = 1 n = 15 i = 1 eps = 1.0e-4 left = 0.0 right = 1.0 mid = (left + right) / 2.0 do while(abs(g(mid)) > eps ) i = i + 1 if(g(mid) > 0.0) then left = mid else right = mid end if mid = (left + right) / 2.0 end do lambda = mid write(*,'(a,f10.5,a,f10.6,a,i10)') 'lambda = ',lambda,', f(lambda) = ',g(lambda), ', i= ',i stop contains function g(x) real(8) :: g real(8),intent(in) :: x g = f / (1.0 + x / m)**n + f * r / x * (1.0 - 1.0 / (1.0 + x / m)**n) - 1.05 * f return end function g end