[R] integrate with vector arguments

Hans W Borchers hwborchers at gmail.com
Fri Feb 27 04:16:05 CET 2015


marKo <mtoncic <at> ffri.hr> writes:
>
> I'm a bit stuck.
> I have to integrate a series of polynomial functions with vector
> arguments.
>
> v1<-c(1:5)
> v2<-c(1:5)
>
> f1<-function (x) {v1*x+v2*x^2}
>
> The problem is that integrate(f1, 0, 1) does not work.


The point is not that there are "vector arguments", but that your function
is vector-valued and so the generated error message below rightly says
"evaluation of function gave a result of wrong length".

You could integrate each dimension separately or, e.g., you use quadv()
from package 'pracma' which handles vector-valued functions:

    > v1 <- v2 <- 1:5
    > f1<-function (x) {v1*x+v2*x^2}

    > library(pracma)
    > quadv(f1, 0, 1, tol=1e-10)
    $Q
    [1] 0.8333333 1.6666667 2.5000000 3.3333333 4.1666667

    $fcnt
    [1] 13

    $estim.prec
    [1] 0.0000000003

quadv() employs an adaptive Simpson quadrature where the recursion is
applied to all components at once.


> I does not, even if a pas the arguments (v1, v2)
>
> f1<-function (x, v1, v2) {v1*x+v2*x^2}
>
> or if i try to vectorize the function
>
> f1<-Vectorize(function(x, v1, v2){v1*x+v2*x^2},
> vectorize.args=c("v1", "v2"))
>
> integrate(f1, 0, 1) gives an error:
>
> Error in integrate(f1, 0, 1) :
>   evaluation of function gave a result of wrong length
>
> Any help will be greatly appreciated.
> Thanks,
>
> Marko
>



More information about the R-help mailing list