I have defined the following function in R
(where a
is a given constant and is a known function) but when I try to compute the values of it I get some pretty weird numbers.
I should point out that, in order to compute the values of f(s)
, I have actually solved the integral analytically before hand hence, in reality, my user defined function in R doesn't have to compute that integral. I would like to see whether I have made a mistake in my R code (since I'm pretty sure I solved the integral correctly) by comparing my values with those I would get If I were to solve the integral numerically. I have read the documentation for integrate
but it doesn't seem to do what I need: am I correct? Can anybody point me in the right direction?
This should work:
# 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)
Some important warnings:
1) integrate
needs a vectorized function to work with, you will need to adapt your lambda
function to satisfy this constraint (for example by using lambda.vect=function(t) sapply(t,function(tt) lambda(tt))
). Recall what happens here:
f(s=1:2,a=0,lambda=function(t) 1) # Use rep(1,length(t)) instead
2) If the function $\lambda$ is too wiggly then you may need to tune the arguments subdivisions
and abs.tol
appropiately, see the documentation.
3) f
is not a vectorized function, so it will return a single value no matter if you pass an vector to s
. To vectorize it, adapt solution on 1).