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 处。
我正在尝试使用牛顿法寻找
的最小值
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 处。