Re: FindMinimum slow in evaluation
- To: mathgroup at smc.vnet.net
- Subject: [mg117542] Re: FindMinimum slow in evaluation
- From: Nabeel Butt <nabeel.butt at gmail.com>
- Date: Tue, 22 Mar 2011 05:07:36 -0500 (EST)
Just for your easy reference the code is below !!!
----start------
Clear[M, s, \[Lambda], \[CapitalDelta]T, \[Mu], m, \[Sigma], f, fc, \
mean, var, rmean, rvar, exp, sol, p, g, J]
M = 0.5;
\[Lambda] = 0.005;
\[Mu] = 0.005;
nn = 2;
T = 0.5
\[CapitalDelta]T = T/nn;
s = E^(0.05*\[CapitalDelta]T);
m = 0.08;
\[Sigma] = 0.42;
mean = (m - (\[Sigma]^2)/2)*\[CapitalDelta]T;
var = (\[Sigma]^2)*\[CapitalDelta]T;
fl[r_] := PDF[LogNormalDistribution[mean, var], r];
rmean = E^(mean + 1/2 var);
rvar = ((E^var - 1) E^(2*mean + var));
exp = {
p*(1 + g) + (1 - p)*(1/(1 + g)) == E^(mean + 1/2 var),
p*(1 + g)^2 + (1 -
p)*(1/(1 + g))^2 - (p*(1 + g) + (1 - p)*1/(1 + g))^2 == ((E^
var - 1) E^(2*mean + var))};
sol = {p, g} /. NSolve[exp, {p, g}]
p = sol[[2, 1]];
g = sol[[2, 2]];
rvals = {(1 + g), 1/(1 + g)};
pvals = {p, 1 - p};
amin = N[0];
amax = N[1];
da = 0.01;
wmin = N[0];
wmax = N[1];
dw = 0.01;
\[Gamma] = 0.5;
templist = Parallelize[
ParallelEvaluate[
Off[FindMinimum::fmgz]];
ParallelEvaluate[Off[FindMinimum::reged]];
ParallelEvaluate[Off[FindMinimum::lstol]];
Table[{{a, w},
{l =
Min[templist = {(sol1 =
FindMinimum[(((w*(s + \[Xi] (rvals - s) + \[Mu] (\[Xi] -
a) s) - \[Gamma])^2).pvals), {\[Xi], a/2, 0, a},
AccuracyGoal -> 5])[[
1]], (sol2 =
FindMinimum[(((w*(s + \[Xi] (rvals -
s) - \[Lambda] (\[Xi] -
a) s) - \[Gamma])^2).pvals), {\[Xi], (a + 1)/2, a,
1}, AccuracyGoal -> 5])[[
1]], ((w*(s + a (rvals - s)) - \[Gamma])^2).pvals}],
If[templist[[3]] == l, 3, Flatten[Position[templist, l]][[1]]],
Piecewise[{{0, templist[[3]] == l}, {sol1[[2, 1, 2]],
templist[[1]] == l}, {sol2[[2, 1, 2]],
templist[[2]] == l}}]}}, {a, amin, amax, da}, {w, wmin,
wmax, dw}]]; // Timing
templist;
Dimensions[Flatten[templist], 1]
points = Select[
Flatten[templist,
1], #[[2, 2]] == 3 &] /. {{a_, w_}, {J_,
I_, \[CapitalDelta]_}} -> {a, w};
Graphics[Point[points], Axes -> True];
JN = Interpolation[
Flatten[templist,
1] /. {{a_, w_}, {J_, I_, \[CapitalDelta]_}} -> {{a, w}, J}];
some = NestList[{templist = Parallelize[
ParallelEvaluate[
Off[FindMinimum::fmgz]];
ParallelEvaluate[Off[FindMinimum::reged]];
ParallelEvaluate[Off[FindMinimum::lstol]];
ParallelEvaluate[Off[InterpolatingFunction::dmval]];
ParallelEvaluate[Off[FindMinimum::sdprec]];
Table[{{a, w},
{l =
Min[templist = {(sol1 =
FindMinimum[(#[[2]][(\[Xi]*
rvals)/(s + \[Xi] (rvals - s) + \[Mu] (\[Xi] -
a) s), (w*(s + \[Xi] (rvals - s) + \[Mu] (\[Xi] -
a) s))].pvals), {\[Xi], a/2, 0, a},
AccuracyGoal -> 4])[[
1]], (sol2 =
FindMinimum[(#[[2]][(\[Xi]*
rvals)/(s + \[Xi] (rvals - s) - \[Lambda] (\[Xi] -
a) s), (w*(s + \[Xi] (rvals -
s) - \[Lambda] (\[Xi] -
a) s))].pvals), {\[Xi], (a + 1)/2, a, 1},
AccuracyGoal -> 4])[[
1]], #[[2]][(
a*rvals)/(s +
a (rvals - s)), (w*(s + a (rvals - s)))].pvals}],
If[templist[[3]] == l, 3,
Flatten[Position[templist, l]][[1]]],
Piecewise[{{0, templist[[3]] == l}, {sol1[[2, 1, 2]],
templist[[1]] == l}, {sol2[[2, 1, 2]],
templist[[2]] == l}}]}}, {a, amin, amax, da}, {w, wmin,
wmax, dw}]],
Interpolation[
Flatten[templist,
1] /. {{a_, w_}, {J_, I_, \[CapitalDelta]_}} -> {{a, w},
J}]} &, {0, JN}, nn];
----------------------end------------
On Sat, Mar 19, 2011 at 6:19 AM, Nabeel Butt <nabeel.butt at gmail.com> wrote:
> Dear Users,
> I have a program in which I am trying to minimize a
> function several times in a program.To me finding the local minimum is
> sufficient given a good intial guess and constraints.However ,
> Mathematica's
> built-in FindMinimum seems a little slow since I need to make repeated use
> of it(I tried the global minimization but it is much slower ) several times
> with different intial guesses and constraints .This depends upon the
> function too ofcourse and the time taken could be improved by changing the
> accuracy /precision. Is there a way I can get my program speeded up in
> anyway possible( Try changing the value of 'nn' in my program I upload and
> observe as 'nn' gets bigger so does the computation time needed ).I am
> uploading my notebook at
> http://uploading.com/files/mb1cd236/sampleprogrammath.nb/
> Thanks in advance !
> Nabeel
>
>
> --
> "We have not succeeded in answering all our problems.The answers we have
> found only serve to raise a whole set of new questions.In some ways we feel
> that we are as confused as ever,but we believe we are confused on a higher
> level and about more important things."
> "Maybe one day we get to see all the beauty present in this world"
>
>
> Nabeel Butt
> UWO,London
> Ontario, Canada
>
>
>
--
"We have not succeeded in answering all our problems.The answers we have
found only serve to raise a whole set of new questions.In some ways we feel
that we are as confused as ever,but we believe we are confused on a higher
level and about more important things."
"Maybe one day we get to see all the beauty present in this world"
Nabeel Butt
UWO,London
Ontario, Canada