Интегральная функция в 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).