# [R] Clarification: Expedite scalar f(x) evaluation over vectors

Daniel Lakeland dlakelan at street-artists.org
Fri Aug 24 03:21:41 CEST 2007

```On Thu, Aug 23, 2007 at 03:44:36PM -0700, Scott Stark wrote:
> Please note clarifications in <<>> below.  My apologies for any confusion.
> Thanks again,
> Scott
>
> ---------- Forwarded message ----------
> From: Scott Stark <stark.sc at gmail.com>
> Date: Aug 23, 2007 1:03 PM
> Subject: Expedite scalar f(x) evaluation over vectors
> To: r-help at lists.r-project.org
>
> Dear R community,
>
> I am trying to code a fairly complex equation for optim().  My current
> approach is too slow for optim().
>
> I have a function that takes a double integral (hopefully correctly) across
> two terms, e.g.,
>
> <<note replacement of example function by hypothetical f(x,y)>>
>
>  doubleint <- function(c1,c2) {integrate(function(y) {
>    sapply(y, function(y) {
>    integrate(function(x) {f(x,y)}, boundsx[1], boundsx[2])\$value
>    })
>    }, boundsy[1],boundsy[2])
>    }
>
> <<I do not have a closed form for the real function>>

I assume you're trying to find the optimal c1 and c2. You could try
varying the tolerance to integrate, initially allowing a rough
approximation of your integral for the first steps until you get near
an optimum, and then re-running the optimize on a much higher
tolerance.

For example, set your maximum subdivisions to 10, run the optimize,
then set to 20 and run the optimize from the endpoint of the last
run. When the optimal point stops moving, call it good??

The next approach I'd try is to be more fancy about your mathematics,
by finding an approximate closed form for your function that was
analytically integrable, perhaps in a computer algebra system like
maxima.

--
Daniel Lakeland
dlakelan at street-artists.org
http://www.street-artists.org/~dlakelan

```