while (tol > 1e-05) { 错误:R 中的代码牛顿法缺少值

Error in while (tol > 1e-05) { : missing value in code Newton method in R

我正在尝试使用牛顿法寻找
的最小值 f(x) = 7x-log(x)

x_0 =0.01

这是我的代码:

x<-0.01
tol<-10
count<-0
while(tol>1e-5){
  count<-count+1
  fx<-7*x-log(x)
  fprimex<-7-(1/x)
  xnew<-x-fx/fprimex
  tol<-abs(xnew-x)
  x<-xnew
}
x
tol
count

但是有错误 ((while (tol > 1e-05) { 出错:需要 TRUE/FALSE 的地方缺少值 另外: 警告信息: 在 log(x) 中:产生 NaNs))

如何修复我的代码。

随着 x 接近最小值,斜率接近 0,下一个估计值使 x<0,因此 log(x) 为 NaN。

你上面的循环正在解决 f(x)=0 没有真正的根,因此上面提到的失败。要找到最小值或最大值,请找到导数的斜率等于 0 的位置。求解 fprime(x) = 0,在这种情况下,最小值在 1/7 处。