Rui,Thanks for your help in getting the result with for loops. That is useful, 
but I have a complicated integral and I am interested in improving the 
performance with the benefit of vectorization.
In the solution from Bert, I would like to know how I can extract the numerical 
vector from the function fv. That is, extract the fv$value as a vector. I can 
then perhaps try to improvise and extend it to arrays.Thanks,Ravi

    On Saturday, 10 August 2019, 20:03:22 CEST, Bert Gunter 
<bgunter.4...@gmail.com> wrote:  
 
 Ravi:
First of all, you're calling Vectorize incorrectly. The first argument must be 
a function *name*, not a function call. Here's what you need to do (and thanks 
for the reprex -- wouldn't have been able to help without it!):
f2 <- function(a,b,c)integrate(function(x){exp(-a*x^3-b*x^2-c*x)},lower 
=0,upper = Inf)
fv <- Vectorize(f2,vectorize.args=c("a","b","c"),SIMPLIFY=TRUE)
Second of all, as you may realize, the vectorization uses mapply() and so 
vectorizes the c(a,b,c) triplet "in parallel," which will "recycle" shorter 
arguments to the length of longer. Hence you will get 6 results from your 
example:
> fv(a,b,m)
             [,1]         [,2]         [,3]        [,4]         [,5]         
[,6]        
value        0.09207851   0.0635289    0.04837997  0.08856628   0.06224138   
0.04777941  
abs.error    3.365173e-08 3.108388e-06 1.00652e-09 3.284876e-09 1.796619e-08 
6.348142e-09
subdivisions 2            1            2           2            2            2  
         
message      "OK"         "OK"         "OK"        "OK"         "OK"         
"OK"        
call         Expression   Expression   Expression  Expression   Expression   
Expression  

Cheers,Bert
Bert Gunter

"The trouble with having an open mind is that people keep coming along and 
sticking things into it."
-- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )


On Sat, Aug 10, 2019 at 10:20 AM ravi via R-help <r-help@r-project.org> wrote:

Hi all,I am having some difficulties in vectorizing the integrate function. Let 
me explain with an example.
a <- 10; b <- 3; c <- 4
f <- function(x) {exp(-a*x^3-b*x^2-c*x)}
integrate(f,0,Inf) # works fine

My difficulties start when I want to vectorize.

# attempts to vectorize fail
a <- seq(from=0,to=1,by=0.5)
b <- seq(from=5,to=10,by=1)
m <- seq(from=10,to=20,by=5)
f2 <- function(x,a,b,c) {exp(-a*x^3-b*x^2-m*x)}
fv <- Vectorize(integrate(f2,0,Inf),vectorize.args=c("a","b","m"),SIMPLIFY=TRUE)

I want the result as a 3-d array with dimensions of the lengths of a, b and c. 
I have tried several variants but am not having much luck. Will appreciate any 
help that I can get.
Thanks,Ravi Sutradhara




        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

  
        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to