[R-br] Ajuda com método de Newton Raphson!! Urgente!!!

Benilton Carvalho beniltoncarvalho em gmail.com
Quarta Junho 25 13:43:50 BRT 2014


alem disso, o 'x' eh definido inicialmente como escalar e depois usado como
vetor. b


Em 25 de junho de 2014 10:54, Rodrigo Coster <rcoster em gmail.com> escreveu:

> O problema está no chute inicial, pq a tua função [aparentemente] não é
> definida no ponto x = 0. Colocando qualquer outro valor da certo (apesar
> deu achar que o algoritmo ta errado, pq sempre converge pra um valor perto
> do chute inicial, seja qual for ele)
>
>
> 2014-06-25 10:16 GMT-03:00 Manoel Galdino <mcz.fea em gmail.com>:
>
> Confesso que fiquei com preguiça de olhar o seu código. Mas tente o
>> seguinte para descobrir qual é o erro:
>>
>> 1. Adicione um print(i) no loop para saber em que passo do loop dá o erro.
>> 2. Em seguida, rode i < 100 & dif > tol e veja se retorna um True ou
>> False.
>> 3. Não retornando, veja o conteúdo de dif e tol.
>>
>> Por fim, vendo o erro (NaN, ou seja, Not a Number), em algum momento você
>> pode estar fazendo alguma operação proibida.
>> Por exemplo, se você rodar no R 0 / 0, ele dá NaN. Isso pode acontecer no
>> seu código, por exemplo, por um problema de aritimética de ponto flutuante.
>> Como tol é inicializado como 10^-9, dependendo das operações que você faz,
>> o R vai aproximar o valor pra zero e vai acontecer uma divisão pro zero, e
>> vai retornar um NaN. E aí, na condição do while, algo como x > NaN dá um NA
>> (ao invpés de T ou F), dando o seu erro. Enfim, estou especulando apenas
>> com base no erro.
>>
>>
>> Abcs
>>
>> M
>>
>>
>> 2014-06-25 1:09 GMT-03:00 Romero Luiz M. Sales Filho <
>> romero.sfilho em gmail.com>:
>>
>>> Caros amigos,
>>>
>>> por gentileza alguém poderia me auxiliar nesse programa!!
>>>
>>> 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?
>>>
>>> Segue o códio completo:
>>>
>>> #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.
>>>
>>> _______________________________________________
>>> R-br mailing list
>>> R-br em listas.c3sl.ufpr.br
>>> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
>>> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
>>> código mínimo reproduzível.
>>>
>>
>>
>>
>> --
>> Manoel Galdino
>> https://sites.google.com/site/galdinomcz/
>>
>> _______________________________________________
>> R-br mailing list
>> R-br em listas.c3sl.ufpr.br
>> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
>> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
>> código mínimo reproduzível.
>>
>
>
> _______________________________________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br
> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
> código mínimo reproduzível.
>



-- 

[image: Benilton Carvalho on about.me]

Benilton Carvalho
about.me/benilton
  <http://about.me/benilton>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20140625/658a324d/attachment.html>


Mais detalhes sobre a lista de discussão R-br