program newton_raphson
implicit none
real,parameter::error=1e-4
integer::i
real::xo,x1,f,fd
print*,"Please enter the initial guess !!!"
read*,xo
i=1
10 x1=xo-(f(xo)/fd(xo))
if(abs((x1-xo)/x1)<error) then
print*,"root is", x1,"no. of iteration=",i
else
xo=x1
i=i+1
goto 10
endif
end
real function f(x)
real::x
f=cos(x)
end
real function fd(x)
real::x
fd=-sin(x)
end
当我将1作为初始猜测时,此程序正常工作,但当我将0作为初始猜测时失败或不显示任何内容。我的代码是否有任何错误。
答案 0 :(得分:2)
尽管Newton-Raphson方法在根部附近快速收敛,但它的全局性 收敛特性差。原因是切线并不总是函数的可接受近似值,因此可以尝试将代码与二分法合并,这样就可以改善结果。