Интегральная функция в R

Я определил следующую функцию в R

введите описание изображения здесь

(где a это заданная константа и введите описание изображения здесь это известная функция), но когда я пытаюсь вычислить ее значения, я получаю довольно странные числа.

Я должен отметить, что для того, чтобы вычислить значения f(s)Я на самом деле решил аналитически интеграл заранее, следовательно, в действительности, моя пользовательская функция в R не должна вычислять этот интеграл. Я хотел бы видеть, допустил ли я ошибку в своем R-коде (поскольку я почти уверен, что правильно решил интеграл), сравнивая мои значения с теми, которые я получил бы, если бы численно решил интеграл. Я прочитал документацию для integrate но он, кажется, не делает то, что мне нужно: я прав? Кто-нибудь может указать мне правильное направление?

1 ответ

Решение

Это должно работать:

# Function
f=function(s,a,lambda){
   1-exp(-integrate(lambda,lower=a,upper=s,rel.tol=1e-5)$value)   
}

# Check
f(s=1,a=0,lambda=function(t) t)
1-exp(-1/2)

Некоторые важные предупреждения:

1) integrate нужна векторизованная функция для работы, вам нужно будет адаптировать свой lambdaфункция для удовлетворения этого ограничения (например, с помощью lambda.vect=function(t) sapply(t,function(tt) lambda(tt))). Напомним, что здесь происходит:

f(s=1:2,a=0,lambda=function(t) 1) # Use rep(1,length(t)) instead

2) Если функция $\lambda$ слишком волнистая, вам может понадобиться настроить аргументы subdivisions а также abs.tol соответственно смотрите документацию.

3) f не является векторизованной функцией, поэтому она будет возвращать одно значение независимо от того, передадите ли вы вектор s, Чтобы векторизовать это, приспособьте решение на 1).

Другие вопросы по тегам