Estou tentando obter a raiz de uma função utilizando o método de Newton, entretanto o R dá um erro e não consigo obter o valor da raiz... Alguém poderia me alertar sobre o que estou errando?
#fornecendo os parâmetros
n<-100
u<-runif(n)
q<-1.5
theta<-2
#Obtendo valores da variável Y
y = (1/(theta*(q-2)))*((u^((1-q)/(2-q))-1)/((1-q)/(2-q)))
###função que quero obter a raiz
f <- quote((n/x)-((n*sum(y/(1+x*y)))/sum(log(1+x*y)))-sum(y/(1+x*y)))
fx0 <- function(x){ eval(f) }
curve(fx0, 2, 10)
### primeira derivada da função
f1 <-quote((n*(sum(y/(1+x*y)))^2/(sum(log(1+x*y)))^2)-sum(-(y^2/(1+x*y)^2))-(n*sum(-(y^2/(1+x*y)^2))/sum(log(1+x*y)))-(n/x^2))
fx1 <- function(x){ eval(f1) }
curve(fx1, 0, 10, col=2)
###segunda derivada da função
f2 <-quote((2*n/x^3)-sum(2*y^3/(1+x*y)^3)-(n*sum(2*y^3/(1+x*y)^3)/sum(log(1+x*y)^3))+(3*n*sum(-(y^2/(1+x*y)^2))*sum(y/(1+x*y))/(sum(log
(1+x*y)))^2)-(2*n*(sum(y/1+x*y))^3/(sum(log(1+x*y)))^3))
fx2 <- function(x){ eval(f2) }
#aplicando o newton-raphson
# valor inicial para o passo
i <- 1
# valor inical para a diferença entre duas avaliações
dif <- 100
# diferência mínima entre duas avaliações (tolerância)
tol <- 10^-9
# número máximo de passos
dif <- 100
# valor inicial para a raiz
x <- 0
while(i<100 & dif>tol){
x[i+1] <- x[i]-fx1(x[i])/fx2(x[i])
dif <- abs(x[i+1]-x[i])
i <- i+1
print(x[i])
}
No final estou tendo o seguinte erro:
[1] NaN
Erro em while (i < 100 & dif > tol) { :
valor ausente onde TRUE/FALSE necessário
Alguém pode me ajudar??
Obrigado,
Romero.