首页 > 解决方案 > R 中是否有 randn('state',100) 的等效版本,就像在 MATLAB 上一样?我的输出变化太大,因为它在 R 上不存在

问题描述

我正在为 sdes 的 euler maruyama 近似写一个脚本。但是,该代码有效,因为存在“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);

(右)

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")

我希望罢工=19.4258

标签: rmatlabstochastic

解决方案


推荐阅读