Re: NMaximize Questions
- To: mathgroup at smc.vnet.net
- Subject: [mg90954] Re: NMaximize Questions
- From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
- Date: Thu, 31 Jul 2008 06:03:34 -0400 (EDT)
- Organization: The Open University, Milton Keynes, UK
- References: <g6rnra$7j5$1@smc.vnet.net>
Stuart Nettleton wrote:
> Hi, I was wondering if someone might be able to help me with some
> NMaximize issues? Thanks, Stuart
> 1. Is there any limit to the number of variables in NMaximise. Is it
> possible/sensible to run a model with about 1,300 variables?
> 2. What is the meaning of the following error?
> Error is:
> NMaximize::nnum: "The function value 0 is not a number at \
> {c[1],c[2],c[3],cem[1],cem[2],cem[3],cpc[1],cpc[2],cpc[3],e[1],<<53>>}\
> = {0.,2.57857*10^-17,-4.69557*10^-17,0.,<<24>>,<<23>>,<<23>>,3.6165*\
> 10^-21,-6.20768*10^-21,4.81393*10^-13,<<53>>}. "
>
> The error using FindMaximum is:
> FindMaximum::nrgnum: "The gradient is not a vector of real numbers at \
> {c[1],c[2],c[3],cem[1],cem[2],cem[3],cpc[1],cpc[2],cpc[3],e[1],<<46>>}\
> = {1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,<<46>>}."
The expressions such as c[1],c[2],c[3],cem[1], or cem[2], do not hold
any values (and especially no numeric values); therefore they evaluate
to themselves (as symbolic expressions). NMaximize an FinMaximum use
numeric algorithms to find numeric solutions, thus they required -- and
can handle only -- numeric values. Therefore, you must provide numeric
values to *all* the parameters such as c[1], c[2], c[3], cem[1], ...
For instance, say we want to maximize the function -x^4 - c[1] x^2 + x.
Below, the coefficient c[1] does not hold any value but itself.
In[1]:= NMaximize[-x^4 - c[1] x^2 + x, x]
During evaluation of In[1]:= NMaximize::nnum: The function value
-0.296289+0.0929857 c[1] is not a number at {x} = {0.304936}.
Out[1]= NMaximize[x - x^4 - x^2 c[1], x]
Now we assign the value 3 to c[1].
In[2]:= c[1] = 3;
NMaximize[-x^4 - c[1] x^2 + x, x]
Out[3]= {0.0825888, {x -> 0.16374}}
Note that *Maximize* has no problem dealing with symbolic coefficients.
In[4]:= c[1] =. (* Clear c[1] *)
Maximize[-x^4 - c[1] x^2 + x, x]
Out[5]= {-Root[
27 + 4 c[1]^3 + (144 c[1] + 16 c[1]^4) #1 + 128 c[1]^2 #1^2 +
256 #1^3 &, 1], {x ->
Root[-Root[
27 + 4 c[1]^3 + (144 c[1] + 16 c[1]^4) #1 + 128 c[1]^2 #1^2 +
256 #1^3 &, 1] - #1 + c[1] #1^2 + #1^4 &, 1]}}
If we replace c[1] by 3 in the above symbolic solution, we get the same
answer as the one found by numerical algorithm.
In[6]:= % /. c[1] -> 3 // N
Out[6]= {0.0825888, {x -> 0.16374}}
Regards,
-- Jean-Marc