我正在编写使用R。
我必须做功能和循环。
值:t = 0.001,n = 4,功能如下。
我想通过使用for循环计算y 2 (0.001),y 3 (0.001)和y 4 (0.001)。
另外,我做了一个R代码,但是有一个我不知道的错误。
如何制作循环来计算y 2 (0.001),y 3 (0.001)和y 4 (0.001)?
以下代码是我的R代码。谢谢。
###########################
# value #
###########################
n<-4
t<-0.001
sigma<-numeric(4)
y<-numeric(4)
sigma[1]<-0.1
y[1]<-0
###########################
# Brownian-Motion #
###########################
nor1<-rnorm(n,0,1)
nor1<-cumsum(nor1)
###########################
# function #
###########################
delta<-function(t){
0.01
}
alpha<-function(t){
2*t*(1-t)
}
beta<-function(t){
2*t*(1-t)
}
epsilon<-function(t){
(2^(200*t))*(nor1)*(1/sqrt(log10(2)))
}
###########################
# for-loop #
###########################
sigma[i]<-delta(t)+(alpha(t)*y[i-1]*y[i-1])+(beta(t)*sigma[i-1]sigma[i-1]);
y[i]<-sigma[i]*epsilon(t);
print(y[i])
}
答案 0 :(得分:0)
我会抛光一些东西(如果你想了解更多细节,请注释),但是@Prem提出的另外一点,你错误地指定了for循环(也许是通过R中的循环教程)和西格玛乘法。
但主要是,epsilon函数返回一个向量 - 每个观察值 - 而不是单个值。因此,我将其修改为依赖于i
,如2)。
epsilon<-function(t,i){
(2^(200*t))*(nor1[i])*(1/sqrt(log10(2)))
}
然后for循环就这样工作:
for (i in 2:n){
sigma[i]<-delta(t)+(alpha(t)*y[i-1]*y[i-1])+(beta(t)*sigma[i-1]*sigma[i-1]);
y[i]<-sigma[i]*epsilon(t,i);
print(y[i])
}