2015-12-07 2 views
-1

Я абсолютно не знаком с Р. Надеюсь, вы можете помочь. Я пытаюсь имитировать процесс Хокеса, используя R. Основная идея заключается в том, что, прежде всего, я смоделировал некоторые события из однородного процесса Пуассона. Затем каждое из этих событий будет создавать своих собственных детей, используя не однородный процесс Пуассона. Код, как, как показано ниже:Как преодолеть бесконечный цикл?

SimulateHawkesprocess<-function(n,tmax,lambda,lambda2){ 
     times<-Simulatehomogeneousprocess(n,lambda) 
     count<-1 
     while(count<n){ 
      newevent<-times[count] +  Simulateinhomogeneousprocess(lambda2,tmax,lambdamax=NA) 
      times<-c(times,newevent) 
      count<-count+1 
      n<-length(times) 
      } 
      return(times) 
    } 

Но г код производит этот бесконечный цикл (вероятно, из-за последней строкой: (п < -длина (раз))). Как я могу решить эту проблему? Как я могу поставить условие остановки?

+1

где определяется 'Simulateinhonomationalprocess'? –

+2

Сколько раз вы хотите, чтобы цикл работал? У вас есть условие остановки - когда счетчик не меньше n - ваша проблема в том, что вы настраиваете n и считаете. Удаление строки 'n <- length (times)' приведет к остановке цикла, но кто знает, что вы хотите? – Gregor

ответ

0

Это не особая проблема R. Сначала вам нужно правильно работать с вашим алгоритмом. Сравните код, который вы написали, против того, что вы хотите сделать. Если вам нужна помощь с алгоритмом, тогда пометьте вопрос как таковой. Кроме того, вызов функции для Simulateinhomogeneousprocess очень несовместим. Некоторое понимание этой функции поможет. Что возвращает эта функция, число или вектор?

Внутри цикла вы увеличиваете значение n по крайней мере на 1 каждый раз, чтобы вы никогда не доходили до конца.

newevent<-times[count] + Simulateinhomogeneousprocess(lambda2,tmax,lambdamax=NA) 

Это создает непустой переменную

times<-c(times,newevent) 

Увеличивает "раз" вектор, по крайней мере, 1 (так как NEWEVENT не пусто)

count<-count+1 
n<-length(times) 

Вы увеличить количество по 1, но также увеличивают значение n по крайней мере на 1, тем самым создавая бесконечный цикл. Одна из этих вещей должна измениться, чтобы цикл остановился.

+0

Привет, Спасибо всем. Симуляционно-однородный процесс является вектором событий из неоднородного процесса. @RohitDas; если я хочу, чтобы обе строки подсчитывались <-count + 1 n <-length (times) и хотите запустить цикл в 15 раз, могу ли я написать условие внутри while (count <15)? – Geotas

Смежные вопросы