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: [mg63822] Re: Using FindRoot with an equation that includes Maximize
  • From: "Charles Ashley" <cka2 at adelphia.net>
  • Date: Mon, 16 Jan 2006 02:16:50 -0500 (EST)
  • Sender: owner-wri-mathgroup at wolfram.com

Peter,

Thank you very much for your response!  The code in my original message
was distorted by some cut and paste font problems so I'm glad you were
able to figure out what I was trying convey.

Your solution is excellent.  It works on the simplified example and also
on the more complicated exponential functions in my real problem. 

Best regards,
Charles
cka2 at adelphia.net


-----Original Message-----
From: Peter Pein [mailto:petsie at dordos.net] 
To: mathgroup at smc.vnet.net
Subject: [mg63822] Re: Using FindRoot with an equation that includes Maximize

> 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],w
2p=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: JLink / VTK problem
  • Next by Date: Visualization site updates
  • Previous by thread: Re: Using FindRoot with an equation that includes Maximize
  • Next by thread: Re: How to create {{x1,y1}, ..., {xn,yn}} data from{x1,...,xn} and {y1, ..., yn}