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會在內部/外部調用 –