[英]Newton-Raphson Root Finding Algorithm
我的目標是創建一個名為 newton.raphson 的newton.raphson
來實現 Newton-Raphson 尋根算法。
求根算法:x1 = X0 - f(xo)/f'(x0)
我有 2 個 arguments:
iter
= 迭代次數(值 = 10^5)epsilon
= 公差(值 = 10^-10)不能依賴於 function 之外的變量
newton.raphson <- function(f, x0, iter=1e5, epsilon=1e-10) {
x <- x0
h <- 1e-5
for (t in 1:iter) {
drvt <- f((x+h)) - f((x-h)) / (2 * h)
update <- x - f(x)/ drvt
if (abs(update) < epsilon) {
break
}
x <- update
}
root <- x
return(root)
}
# Define some function to test
f <- function(x) {
x^2 - 4 * x - 7
}
我得到以下結果:
> newton.raphson(f, 0)
[1] 2.000045
> newton.raphson(f, 3)
[1] 5.000024
但結果應該是:
-1.316625
5.316625
您的導數計算有點錯誤-您忘記了f(x+h)
和f(xh)
之間差異的括號:
drvt <- ( f(x+h) - f(x-h) ) / (2 * h)
此外,您應該將新舊根近似之間的差異與容差進行比較。 為了使事情更清楚,請將您的誤導性update
變量重命名為new.x
類的東西。 然后,您應該檢查if (abs(new.x - x) < epsilon)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.