MathGroup Archive 2006

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Using FindRoot with an equation that includes Maximize

  • To: mathgroup at smc.vnet.net
  • Subject: [mg63787] Re: Using FindRoot with an equation that includes Maximize
  • From: Peter Pein <petsie at dordos.net>
  • Date: Sat, 14 Jan 2006 02:32:42 -0500 (EST)
  • References: <dq7uo4$40d$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

> Hi Everyone,
> 
> I'm trying to use FindRoot to solve a system of two equations, 
> where the rhs of each incorporates a Maximize function.  Here is the 
> actual input:
> 
> FindRoot[{w1p=C5=A0Part[Maximize[{w1a[M1,m2],0=C2=A3M1=C2=A350},M1],1],w2p=C5=A0Part[Maximize[{w2a[M2,m1],0=C2=A3M2=C2=A350},M2],1]},{{m1,4.5},{m2,4.5}}]
> 
> The lhs of the first equation (w1p) is an algebraic expression of two 
> variables (m1,m2), The rhs of the first equation includes a 
> transcendental function (the function w1a includes several exponential 
> terms) of two variables (M1,m2), hence the use of FindRoot rather than 
> Solve.  Similarly, the lhs of the second equation (w2p) is an algebraic 
> expression of two variables (m1,m2) while the rhs includes a 
> transcendental function of the variables (M2,m1). 
> 
> To solve this for (m1,m2) I need FindRoot to feed its potential solution 
> set into the Maximize functions (m2 into the rhs of the first equation 
> and m1 into the rhs of the second equation).  For example, if FindRoot 
> were to try the solution set (m1=C3=A04.5,m2=C3=A04.5), I need Maximize 
> (in equation 1) to take the value of m2=C3=A04.5, determine that given 
> this value of m2, the maximum value of the function w1a occurs when 
> M1=C3=A012 and that the maximum value is 220.  Part then extracts this 
> maximum value of 220 and uses it as the value of the rhs.  For my 
> particular problem I've confirmed that there is a unique 
> solution set, which I found by repeatedly graphing the equations with 
> greater precision to zero in on the intersection. But I need to be able 
> to find the solution in a more automated way because this is input to 
> another set of equations.
> 
> I've also come up with a very simple, purely algebraic example 
> of the same problem to confirm that it isn't something unique to 
> my equations (see below).  This example generates the same error 
> messages as my actual problem. A solution set for this is {m1=C3=A04, 
> m2=C3=A04} but FindRoot doesn't solve it because it 
> doesn't appear to pass its potential solutions to the Maximize 
> functions (at least that's my interpretation of the first two 
> error messages). 
> 
> FindRoot[{m1+3*m2==Part[Maximize[{2*m2*M1-M1^2,1=C2=A3M1=C2=A310},M1],1],3*m1+m2==Part[Maximize[{2*m1*M2-M2^2,1=C2=A3M2=C2=A310},M2],1]},{{m1,4},{m2,4}}]
> 
> I think the third error message is the result of the first two.  If 
> FindRoot isn't passing the potential solutions for {m1,m2} to 
> the Maximize functions then they aren't able to derive maximum 
> numeric values and Part isn't able to extract these numeric 
> values.  I've confirmed that the Part[Maximize=E2=80=A6]] 
> section of this produces the output in the correct form if the values of 
> m1 and m2 are fixed.   I've tried defining the rhs as an 
> expression rather than a function, and also tried defining the entire 
> rhs as a function[m2_]:= Part[Maximize=E2=80=A6.etc.]], but neither 
> approach worked.
> 
> I would really appreciate your insights on this, whether correcting my 
> syntax or suggesting an alternative approach to the problem.  
> I've invested over three years of effort developing these 
> equations.   I got as far as I could by hand and with Excel, and finally 
> took the Mathematica plunge about three weeks ago. It's a steep 
> learning curve but very rewarding.
> 
> Thanks and happy new year to everyone,
> 
> Charles Ashley
> 
> cka2 at adelphia.net
> 


Hi Charles,

you should put the calculation of the maxima in functions which evaluate only 
for numeric m1,m2:

In[1]:=
max1[m2_?NumericQ] := First[NMaximize[{2*m2*M1 - M1^2, 1 <= M1 <= 10}, M1]]
max2[m1_?NumericQ] := First[NMaximize[{2*m1*M2 - M2^2, 1 <= M2 <= 10}, M2]]

In[3]:=
FindRoot[{m1,m2}.{{1,3},{3,1}}-{max1[m2],max2[m1]}, {{m1, 3}, {m2, 5}}]

Out[3]=
{m1->4.,m2->4.}

Good luck,
   Peter


  • Prev by Date: Re: data extraction question
  • Next by Date: Re: Using FindRoot with an equation that includes Maximize
  • Previous by thread: Re: Using FindRoot with an equation that includes Maximize
  • Next by thread: Re: Using FindRoot with an equation that includes Maximize