# Problem in finding minmum using FindMinimum

Posted 10 months ago
896 Views
|
2 Replies
|
0 Total Likes
|
 Hello All,I have some complicated function as I have attached (please see enclosed file), I am trying to find minimum of these function in terms of some common parameters, but i am not able to do that, by try and error I can find some better values than FindMinimum, I don't know where I am making mistake or how I can make the code more efficient.Could you please advise me in this respect"?Thank you so much for your help in advance
2 Replies
Sort By:
Posted 10 months ago
 FindMinimum might be getting caught in a local minimum. If you're looking for a global minimum, you could try using NMinimize instead of FindMinimum. FindMinimum only searches for a local minimum. NMinimize doesn't guarantee a global minimum, and it's slower, but it finds a better solution (333.399) in a little over a minute on my system (2011 laptop): In[51]:= NMinimize[ {Total[...] + ..., 0.001 <= u <= 1, 5 <= l0 <= 10, 0.001 <= m0 <= 1, 0.001 <= tc <= 3.7}, {u, l0, m0, tc, c1, c2, c3, c4} ] Out[51]= {333.399, {u -> 0.206876, l0 -> 5.14977, m0 -> 0.260959, tc -> 3.31495, c1 -> -0.183037, c2 -> -1.67226, c3 -> 2.09666, c4 -> 0.623773}} You can also specify different Methods for NMinimize to use. The above is the default ("NelderMead" for your problem). I tried the other three with their default options and got these results:Method->"SimulatedAnnealing" did better (156.368) in about 6 minutes: In[54]:= NMinimize[ {Total[...] + ..., 0.001 <= u <= 1, 5 <= l0 <= 10, 0.001 <= m0 <= 1, 0.001 <= tc <= 3.7}, {u, l0, m0, tc, c1, c2, c3, c4} , Method -> "SimulatedAnnealing" ] Out[54]= {156.368, {u -> 0.288779, l0 -> 7.41511, m0 -> 0.350708, tc -> 3.31493, c1 -> -0.766559, c2 -> 0.490018, c3 -> 0.128281, c4 -> -1.55951}} Method->"DifferentialEvolution" did slightly better still (145.673), but it took 16 minutes: In[53]:= NMinimize[ {Total[...] + ..., 0.001 <= u <= 1, 5 <= l0 <= 10, 0.001 <= m0 <= 1, 0.001 <= tc <= 3.7}, {u, l0, m0, tc, c1, c2, c3, c4} , Method -> "DifferentialEvolution" ] Out[53]= {145.673, {u -> 0.432289, l0 -> 6.63203, m0 -> 0.289599, tc -> 3.31489, c1 -> 0.670817, c2 -> -0.835306, c3 -> 10.1536, c4 -> -6.43342}} Finally, Method->"RandomSearch" did the best (6.30799), but it ran for over an hour with the default options: In[55]:= NMinimize[ {Total[...] + ..., 0.001 <= u <= 1, 5 <= l0 <= 10, 0.001 <= m0 <= 1, 0.001 <= tc <= 3.7}, {u, l0, m0, tc, c1, c2, c3, c4} , Method -> "RandomSearch" ] Out[55]= {6.30799, {u -> 0.620098, l0 -> 6.82731, m0 -> 0.27329, tc -> 3.3149, c1 -> 3.81016, c2 -> -9.4462, c3 -> 316., c4 -> -3155.41}} You might be able to speed it up by using some of the other sub-options described at the bottom of this page: Numerical Nonlinear Global Optimization.