simple two step optimization
- To: mathgroup at smc.vnet.net
- Subject: [mg36913] simple two step optimization
- From: "Johannes Ludsteck" <johannes.ludsteck at wiwi.uni-regensburg.de>
- Date: Wed, 2 Oct 2002 03:31:37 -0400 (EDT)
- Organization: Universitaet Regensburg
- Sender: owner-wri-mathgroup at wolfram.com
Dear MathGroup Members, I want to minimize a function which returns the minimizing value (arg min) of another function. For a simple example consider the following function opt which returns the arg min of x-2.5(1+Erf[x-s]). opt[s_]:=Block[{x}, x/. Last[ FindMinimum[x-2.5(1+Erf[x-s]), {x,1,3}]]] Now in a second step I want (again this is only a simple example for illustrative purposes) to minimize (opt[s]-2)^2 with respect to s. FindMininum has no problems with this. FindMinimum[(opt[s]-2)^2,{s,0.9,1.1}] {3.18689*^-23, {s -> 0.9816}}\) However, NMinimize surrenders(!!!). Typing <<NumericalMath`NMinimize` NMinimize[(opt[s]-2)^2,{s,0.9,1.1}] only leads to the error message FindMinimum::fmnum: Objective function 0.1 - 2.5 (1. +Erf[0.1 - 1. s]) is not real at {x} = {1.}. There is nothing wrong with minimand. It has exactly one minimum in the Interval[{0.9,1.1}]. I guess the reason is that NMinimize calls opt[s] not with a numerical value for s. This causes the problem, since opt again calls FindMinimum. Why? Can someone explain the failure and tell me how to avoid this drawback? Wolfram Research boasts that NMinimize can handle any function... I hope that nobody will recommend me to use FindMinimum here instead. I know that the example here could of course be solved by FindMinimum, but my real world application can not. Best regards and thanks in advance, Johannes Ludsteck <><><><><><><><><><><><> Johannes Ludsteck Economics Department University of Regensburg Universitaetsstrasse 31 93053 Regensburg Phone +49/0941/943-2741