我正在尝试用牛顿法求最小值的
f(x)= 7x对数(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)中:产生了NaN))
我该如何解决我的密码。
答案 0 :(得分:1)
当x接近最小值时,斜率接近0,下一个估计使x <0,因此log(x)
的NaN。
您的上面的循环正在解决f(x)=0
,它没有真实的根,因此是上面提到的失败。要找到最小值或最大值,请找到导数的斜率等于0的地方。求解fprime(x)
= 0,在这种情况下,最小值为1/7。