user168826
user168826

Reputation: 103

an error in integrating a function in R

The following code chunk is for defining and integrating a function f1 involving matrix exponentials.

library(expm)
Lambdahat=rbind(c(-0.57,0.21,0.36,0,0),
c(0,-7.02,7.02,0,0),
c(1,0,-37.02,29,7.02),
c(0.03,0,0,-0.25,0.22),
c(0,0,0,0,0));

B=rbind(c(-1,1,0,0,0),c(0,0,0,0,0),c(0,0,0,0,0),c(0,0,0,0,0),c(0,0,0,0,0))

f1<-function(tau1)
{
  A=(expm(Lambdahat*tau1)%*%B%*%expm(Lambdahat*(5-tau1))); 
  return(A[1,5]);
}

out=integrate(f1,lower=0,upper=5)#integration of f1

The integration in the above line gives the following error:

Error in integrate(f1, lower = 0, upper = 5) : 
evaluation of function gave a result of wrong length
In addition: Warning messages:
1: In Lambdahat * tau1 :
longer object length is not a multiple of shorter object length
2: In Lambdahat * (t[i] - tau1) :
longer object length is not a multiple of shorter object length

To check for if the function outputs and inputs are of function f1 different length, 10 evenly spaced inputs and corresponding outputs of f1 are reported below. Input and output length for all the test cases were recorded as equal to 1.

sapply(X=seq(from=0,to=5,by=0.5),FUN=f1)
[1] 2.107718e-01 1.441219e-01 0.000000e+00 2.023337e+06 1.709569e+14
[6] 1.452972e+22 1.243012e+30 1.071096e+38 9.302178e+45 8.146598e+53
[11] 7.197606e+61

If anyone could share any hint or directions where the code may be going erroneous, it would be very helpful. Thanks very much!

Upvotes: 0

Views: 64

Answers (1)

Consistency
Consistency

Reputation: 2922

The problem is that the function passed to integrate need to be vectorized, i.e. it should be able to receive a vector of input values and to return a vector of output values. I think f1 <- Vectorize(f1) could solve your problem.

Upvotes: 1

Related Questions