       Optimizing FindMinimum for speed using intermediate calculations.

• To: mathgroup at christensen.cybernetics.net
• Subject: [mg1175] Optimizing FindMinimum for speed using intermediate calculations.
• From: Bill Harbaugh <harbaugh at students.wisc.edu>
• Date: Sat, 20 May 1995 04:23:30 -0400
• Organization: University of Wisconsin, Madison

```Hello

I am trying to maximize a likelihood function, using FindMinimum.  This
involves finding the parameters (x,y in my simplified example) that max
(min, in my example) the sum of the values of a function applied to some
data (ddist, in my example).

My actual problem is very long and my question is about how to optimize
my mma code for speed.

This function involves some intermediate results (x1,y1 in my example)
which vary across the x,y parameters but are constant across the d's.
(In my actual problem, these intermediate results are found using NSolve,
so I am specifying the functions using := rather than =). I am trying to
only calculate these once for each iteration on x,y, and then apply the
results to each of the d's in the list ddist.  The code below shows how I
do this without trying to optimize.

ddist={1,2,3,4,5,6,7,8,9,10}
x1:=x+1
y1:=y+2
l[d_]:=(x1*d)^2+(y1*d)^2

f=Apply[Plus,
Map[l,ddist]
]

FindMinimum[f,{x,{-1,1}},{y,{-1,1}}]

This works, but it seems the following should be faster.

Clear[l];
Clear[f];
l[d_]:=(x1*d)^2+(y1*d)^2

f={x1=x+1,y1=y+2,Apply[Plus,
Map[l,ddist]
]}

FindMinimum[f[],{x,{-1,1}},{y,{-1,1}}]

This also works, but timing results are inconclusive. I would appreciate
suggestions on any other approaches that might speed this up.  I am also