1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| f <- function(x,a,b,c,d,alpha,sigma){
c*exp(-x/d)*(1 - alpha*cos(2*pi*(x-a)/sigma))
}
M <- function(c,d, alpha){
c*(1+alpha)*d
}
rvol <- function(n, params){
f_bis <- function(x){
exp(-x/params$d)*(1 - params$alpha*cos(2*pi*(x-params$a)/params$sigma))
}
c <- 1/integrate(f_bis, params$a, params$b)$value
x <- rep(0, n)
for(i in 1:length(x)){
repeat{
v<- -(params$d)*log(1-runif(1, 1-exp(-(1/params$d)*params$a), 1-exp(-(1/params$d)*params$b)))
w <- runif(1, 0, M(c, params$d, params$alpha))
if (w <= f(v, params$a, params$b, c, params$d ,params$alpha, params$sigma)/dexp(v, 1/params$d))
{break}
}
x[i] <- v
}
return(x)
}
rvol(10000, list(a = 1, b = 8, d = 3, alpha = 0.3, sigma = 3 ) ) |
Partager