0
我做在一个非常有限的方式牛顿迭代方法。牛顿迭代法R,否则和递归
x0=5; epsilon = 1e-07
new_rap1 = function(ini, eps){
f = function(a) a*a -2;
fpr = function(a) 2*a;
xn1 = ini-(f(ini)/fpr(ini))
if(abs(xn1-ini) > eps){
new_rap(xn1, eps)
}
xn1
}
new_rap1(x0, epsilon)
new_rap2 = function(ini, eps){
f = function(a) a*a -2;
fpr = function(a) 2*a;
xn1 = ini-(f(ini)/fpr(ini))
if(abs(xn1-ini) > eps){
new_rap(xn1, eps)
} else{xn1}
}
与new_rap1功能,我得到2.7这是不正确的答案。
但new_rap2函数给出了正确答案,即1.414214。
我不知道它们之间的区别。我看到的唯一区别是最后一个,但我不知道是什么使它不同。
new_rap1 = function(ini, eps){
f = function(a) a*a -2;
fpr = function(a) 2*a;
xn1 = ini-(f(ini)/fpr(ini))
if(abs(xn1-ini) > eps){
new_rap1(xn1, eps)
}
xn1;print(1)
}
我试过了几个测试,然后我把那个打印语句,打印了1次,打印了6次。 即
[1] 1
[1] 1
[1] 1
[1] 1
[1] 1
[1] 1
(我猜是递归的数量,直到达到了答案。)
由于遇到打印语句之前在递归函数遇到过,应该不是1只一次在印刷结束?
谢谢。
可能是一个简单的范围界定问题,如果语句可能产生不同的结果,xn1会在内部/外部调用 –