そこで、任意の数値の平方根を指定された精度 (許容誤差) で計算するニュートン法を実行するコードを書くことになっています。
これが私のコードです:
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
ただし、関数が想定されているときに反復の実行を停止するかどうかはわかりません。誰かが私のコードが正しいかどうかを確認できますか? これは大歓迎です!