In [1]:
# rm(list=ls())
options(OutDec = ",")
#==============================================================================
# Cálculo da raiz quadrada - metodo de Newton-Raphson
#==============================================================================
newton.raphson.sqrt <- function(b,x0=1.0,nmax.iter=1000,
tolerancia=1.0e-10){
if(length(b)!=1 || !is.vector(b) ) return(NA)
if(is.na(b)) return(NA)
x <- rep(NA,(nmax.iter+1))
x[1] <- x0
for(i in 2:(nmax.iter+1)){
print(paste("Iteracao:",i-1,sep=" "))
x[i] <- x[i-1] - (x[i-1]^2-b)/(2*x[i-1])
if(abs(x[i] - x[i-1])<tolerancia) return(x[i])
}
print("Numero maximo de iteracoes atingido!")
return(x[nmax.iter+1])
}
In [2]:
#==============================================================================
# Exemplo
#==============================================================================
# Se NA
print("===============================")
newton.raphson.sqrt(NA,x0=1.0,nmax.iter=1000,tolerancia=1.0e-10)
# Numero baixo de iteracoes
b <- 9
print("===============================")
newton.raphson.sqrt(b,x0=1.0,nmax.iter=2,tolerancia=1.0e-10)
# Metodo geral com padroes definidos pela funcao
b <- 9
print("===============================")
newton.raphson.sqrt(b)
[1] "==============================="
<NA>
[1] "===============================" [1] "Iteracao: 1" [1] "Iteracao: 2" [1] "Numero maximo de iteracoes atingido!"
3,4
[1] "===============================" [1] "Iteracao: 1" [1] "Iteracao: 2" [1] "Iteracao: 3" [1] "Iteracao: 4" [1] "Iteracao: 5" [1] "Iteracao: 6" [1] "Iteracao: 7"
3
In [3]:
#==============================================================================
# Exemplo
#==============================================================================
# Tente diferentes valores iniciais
# Compare o numero de iteracoes necessarios
#==============================================================================
b <- 9
print("===============================")
newton.raphson.sqrt(b,x0=0.001)
print("===============================")
newton.raphson.sqrt(b,x0=0.01)
print("===============================")
newton.raphson.sqrt(b,x0=0.1)
print("===============================")
newton.raphson.sqrt(b,x0=1)
print("===============================")
newton.raphson.sqrt(b,x0=10)
print("===============================")
newton.raphson.sqrt(b,x0=100)
[1] "===============================" [1] "Iteracao: 1" [1] "Iteracao: 2" [1] "Iteracao: 3" [1] "Iteracao: 4" [1] "Iteracao: 5" [1] "Iteracao: 6" [1] "Iteracao: 7" [1] "Iteracao: 8" [1] "Iteracao: 9" [1] "Iteracao: 10" [1] "Iteracao: 11" [1] "Iteracao: 12" [1] "Iteracao: 13" [1] "Iteracao: 14" [1] "Iteracao: 15" [1] "Iteracao: 16" [1] "Iteracao: 17"
3
[1] "===============================" [1] "Iteracao: 1" [1] "Iteracao: 2" [1] "Iteracao: 3" [1] "Iteracao: 4" [1] "Iteracao: 5" [1] "Iteracao: 6" [1] "Iteracao: 7" [1] "Iteracao: 8" [1] "Iteracao: 9" [1] "Iteracao: 10" [1] "Iteracao: 11" [1] "Iteracao: 12" [1] "Iteracao: 13"
3
[1] "===============================" [1] "Iteracao: 1" [1] "Iteracao: 2" [1] "Iteracao: 3" [1] "Iteracao: 4" [1] "Iteracao: 5" [1] "Iteracao: 6" [1] "Iteracao: 7" [1] "Iteracao: 8" [1] "Iteracao: 9" [1] "Iteracao: 10"
3
[1] "===============================" [1] "Iteracao: 1" [1] "Iteracao: 2" [1] "Iteracao: 3" [1] "Iteracao: 4" [1] "Iteracao: 5" [1] "Iteracao: 6" [1] "Iteracao: 7"
3
[1] "===============================" [1] "Iteracao: 1" [1] "Iteracao: 2" [1] "Iteracao: 3" [1] "Iteracao: 4" [1] "Iteracao: 5" [1] "Iteracao: 6" [1] "Iteracao: 7"
3
[1] "===============================" [1] "Iteracao: 1" [1] "Iteracao: 2" [1] "Iteracao: 3" [1] "Iteracao: 4" [1] "Iteracao: 5" [1] "Iteracao: 6" [1] "Iteracao: 7" [1] "Iteracao: 8" [1] "Iteracao: 9" [1] "Iteracao: 10"
3
In [4]:
# rm(list=ls())
#==============================================================================
# Fim
#==============================================================================