Re: Problems with FindMinimum
- To: mathgroup at smc.vnet.net
- Subject: [mg90724] Re: Problems with FindMinimum
- From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
- Date: Mon, 21 Jul 2008 04:29:40 -0400 (EDT)
- Organization: The Open University, Milton Keynes, UK
- References: <g5v5mf$ia9$1@smc.vnet.net>
teodorom at hotmail.com wrote:
> I'm having problems with the FindMinimum.
> I'm currently getting errors like this:
> FindMinimum::nrlnum: The function value {0.335521+43899.8 \
> [ImaginaryI],0.376043+43899.8 \[ImaginaryI],0.424669+43899.8 \
> [ImaginaryI],<<6>>,0.311208+46311.9 \[ImaginaryI],<<27>>} is not a
> list of real numbers with dimensions {37} at {x0,y0,x1,y1,hh0,hh1} =
> {0.00580647,-2.13969*10^20,-9.86301*10^-6,1.23875*10^20,-30574.3,19.6042}.
> I guess this happens because the function I'm trying to fit with
> experimantal data, gets imaginary values for some values of the
> parameters.
> How can I avoid this and get meaningful results ?
Hard to tell w/o more information about what your code actually is. It
would have been very helpful for the group if you had posted an small
self-contained fully-working example that reproduces the error and gives
the gist of what you are doing.
Anyway, the following tip might help you. Sometimes, it is a good idea
to write a model in a slightly different way to force Mathematica to use
real numbers only. For instance, evaluate and compare the following
expressions that all deal with the same function (cubic root of a
square) but written in different fashions. (The graphics have been deleted.)
In[1]:=
f = x^(2/3);
Plot[f, {x, -1, 1}]
FindMinimum[f, {x, 1}]
During evaluation of In[1]:= FindMinimum::nrnum:The function value
-0.381571+0.660901 I is not a real number at {x} = {-0.666667}.
Out[3]= {1., {x -> 1.}}
In[4]:=
f = (x^2)^(1/3);
Plot[f, {x, -1, 1}]
FindMinimum[f, {x, 1}, WorkingPrecision -> 20] // Chop
During evaluation of In[4]:= FindMinimum::lstol:The line search
decreased the step size to within tolerance specified by
AccuracyGoal and PrecisionGoal but was unable to find a sufficient
decrease in the function. You may need more than 20.` digits of
working precision to meet these tolerances.
Out[6]= {0, {x -> 0}}
Regards,
-- Jean-Marc