簡體   English   中英

Newton-Raphson 求根算法

[英]Newton-Raphson Root Finding Algorithm

問題總結

我的目標是創建一個名為 newton.raphson 的newton.raphson來實現 Newton-Raphson 尋根算法。

求根算法:x1 = X0 - f(xo)/f'(x0)

我有 2 個 arguments:

  1. iter = 迭代次數(值 = 10^5)
  2. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM