Есть ли эквивалентная версия randn ('state', 100) в R, как в MATLAB?Мой вывод слишком сильно отличается, поскольку он отсутствует на R - PullRequest
0 голосов
/ 10 июня 2019

Я пишу скрипт для приближения эйлера маруямы sdes. Код работает, однако, поскольку присутствует «rnorm», я ожидаю, что мой вывод будет отличаться. В MATLAB есть randn ('state', 100), который помогает с этой проблемой. Есть ли способ стабилизировать генератор переменных на R?

Я пытался использовать пакет 'varbvs', но возникла та же проблема, поскольку он также генерирует случайные переменные из нормального распределения.

(MATLAB)

function [St]=euler(N)

randn('state',100) % set the state of randn

T = 5;

dt = T/N;

gamma = 0.67/2;

mu = 0.1;

sigma = 1.2;

X= 7.753;

dW = zeros(1,N); % preallocate arrays ...

W = zeros(1,N); % for efficiency

dW(1) = sqrt(dt)*normrnd(0,1);

(R)

library(optimbase) #Package to create matrix of zeros

#M points-->(M-1) intervals. let N=(M-1)

N <- 1250

T <- 5

dt <- T/N

gamma <- 0.67/2

mu <- 0.1

sigma <- 1.2

S0 <- 7.753

dW <- zeros(1,N) 

W <- zeros(1,N) 

St <- zeros(1,N)


dW[1,1] <- sqrt(dt)*rnorm(1,0,1) #Generate random Z from normal. 

W[1,1] <- dW[1,1]


for (j in 2:N){

dW[1,j] <- sqrt(dt)*rnorm(1,0,1) 

W[1,j] <- W[1,j-1] + dW[1,j]

}


St<-zeros(1,N)

St[1,1]<- S0

for (j in 2:N){

St[1,j] <- (St[1,j-1])+mu*(St[1,j-1])*dt+

  sigma*(St[1,j-1])^gamma*(W[1,j]-W[1,j-1])

}
Strike=St[1,N]

print(Strike)

t<-seq(0,5,length.out = N)

plot(t,St,type="l",col="blue",main="Euler Maruyama Approximation for CEV")

Я ожидаю Strike = 19.4258

...