在下面的代码中,当我尝试N = 100时,我得到的答案是5.352954,但是当我输入N=1:100来获取所有100个值的表格时,显示的第100个值是1.123200e-27。为什么会有差异?我希望表格显示的第100个值是5.352954。如果能帮助修复这个代码,我将不胜感激。非常感谢。
Task_binom <- function(N, Time, sigma, rho, St, K, put = T){
h <- Time/N
rf <- rho*h
sd <- sigma*sqrt(h)
u <- exp(sd)
d <- 1/u
pi <- (1+rf-d)/(u-d)
sum <- 0
if(put == T){
for (i in 1:N) {
helper <- choose(N,i)*pi^i*(1-pi)^(N-i)*max(K - St*u^i*d^(N-i),0)
sum <- helper + sum
}
p_0 <- 1/(1+rf)^N * sum
return(p_0)}
else{
for (i in 1:N) {
helper <-choose(N,i)*pi^i*(1-pi)^(N-i)*max(St*u^i*d^(N-i) - K,0)
sum <- helper + sum
}
p_0 <- 1/(1+rf)^N * sum
return(p_0)
}
}
Task_binom(100,0.0833,0.3299,0.0472,134.51,134.51,put=F)
Task_binom(1:100,0.0833,0.3299,0.0472,134.51,134.51,put=F)
2条答案
按热度按时间agxfikkp1#
这是因为函数
Task_binom
没有矢量化。您可以执行以下操作:3zwtqj6y2#
有两个要点可以快速检查,以解决您的问题:
1.你的“for”循环已经被指定为1:N,所以如果你让N = 1:100,那么你的循环试图做1:1:100,这将结束得很糟糕。
1.在很多情况下,您在函数中使用N作为单个数字(例如,计算'h'、'helper'和'p_0'),这在N = 1:100时不起作用。