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
#==============================================================================