2017-01-21 79 views
0

你好,我希望得到一些幫助,以整合基於隨機變量的函數。該功能是獲得連續分配的預期值。將函數集成到R中

這是我到目前爲止的代碼。

montecarlo = function(r,v,t,x,k) { 
y = rnorm(1) 
e = (y*(x*exp((-v*sqrt(t)*y)+((r-(.5*v^2))*t))-k)) 
MCOP=exp(-r*t)*integrate(e, lower = -Inf, upper = Inf) 
if((x*exp((-v*sqrt(t)*y)+((r-(.5*v^2))*t))-k) > 0) { 
    return(MCOP) 
} else { 
    return(0) 
    } 
} 

如果我例如輸入: montecarlo(.03, .65, 3, 34, 30)

我得到讀取的錯誤消息:

錯誤的get(as.character(FUN),模式= 「功能」 ,ENVIR = ENVIR):
對象 'e' 的模式 '功能' 的未找到

+0

我想對於爲y所有其他變量X,V,T,R,K的將要給出的集成。 – Dmitriy

+0

Y應該是一個隨機生成的數字,我試圖編程的函數會給我一個連續分佈的期望值(這是從-inf到inf的積分,如果y * f(y)dy – Dmitriy

+0

if你讀'?整合'第一個參數是一個「R函數...」你的代碼正在計算e的一個值我不知道'整合',所以我不能提供多少建議,但我認爲你需要定義另一個函數並將其作爲參數傳遞給'integrate' – epi99

回答

0

你的鱈魚e有多個問題,但導致錯誤的第一個問題是e應該是一個函數。 即,而不是

y = rnorm(1) 
e = (y*(x*exp((-v*sqrt(t)*y)+((r-(.5*v^2))*t))-k)) 

你應該有

e = function(y){y*(x*exp((-v*sqrt(t)*y)+((r-(.5*v^2))*t))-k)} 
+1

那麼,'integrate'需要一個函數作爲第一個參數,而「\t 我想整合y」似乎清楚地表明'e'應該是一個函數,也許這足以推動作者前進,一次解決一個問題。 –