2017-01-21 25 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)

Я получаю сообщение об ошибке, которое гласит:

Ошибка в ГЭТ (as.character (FUN), режим = "функция" , Envir = Envir):
объект 'е' 'функции' режим не был найден

+0

Я хочу интегрировать по у всех остальных переменных х, у, т, г, и к собираются дать. – Dmitriy

+0

Y должно быть случайно сгенерированным числом, и функция, которую я пытаюсь запрограммировать, даст мне ожидаемое значение непрерывных распределений (которое является интегралом от -inf до inf y * f (y) dy – Dmitriy

+0

, если вы читаете '? integrate', первый параметр является« функцией R ... ». Ваш код вычисляет значение a для 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' должно быть функция. Возможно, этого будет достаточно, чтобы автор мог двигаться вперед. Решая одну проблему одновременно. –