所以,我應該寫代碼來執行牛頓法來計算任意數的平方根到指定的精度(容差)。牛頓法R精度/輸出
這裏是我的代碼:
MySqrt <- function(x, eps = 1e-6, itmax = 100, verbose = TRUE) {
GUESS <- 11
myvector <- integer(0)
i <- 1
if (x < 0) {
stop("Square root of negative value")
}
else {
myvector[i] <- GUESS
while (i <= itmax) {
GUESS <- (GUESS + (x/GUESS)) * 0.5
myvector[i+1] <- GUESS
if (abs(GUESS-myvector[i]) < eps) {
break()
}
if (verbose) {
cat("Iteration: ", formatC(i, width = 1), formatC(GUESS, digits = 10, width = 12), "\n")
}
i <- i + 1
}
}
myvector[i]
}
EPS是寬容。當我使用該函數來計算的,比方說,21平方根,我得到這個作爲輸出:
> MySqrt(21, eps = 1e-1, verbose = TRUE)
Iteration: 1 6.454545455
Iteration: 2 4.854033291
Iteration: 3 4.59016621
我不知道如果函數停止執行迭代時,它應該是,但是。有人可以驗證我的代碼是否正確?這將不勝感激!
爲什麼你認爲它會停止提前?你要求的容差是十分之一......'all.equal(MySqrt(21,eps = 1e-1),sqrt(21),tolerance = 1e-1)'是'TRUE'。 – Justin
對我來說迭代6次,打印輸出的5倍,和它看起來相同的出6位數字爲'的sqrt(21)' –
> MySqrt(21,0.01) 迭代:1 6.454545455 迭代:2 4.854033291 迭代: 3 4.59016621 [1] 4.590166 是否應該有第四次迭代?第二次迭代結果和第三次迭代結果之間的差值不小於容差級別,因此仍應執行循環。但我不知道爲什麼它只停留在3次迭代。 – user2884679