MathGroup Archive 2004

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

Search the Archive

Re: Symbolic use of numerical function FindRoot via ?NumericQ

  • To: mathgroup at
  • Subject: [mg48837] Re: Symbolic use of numerical function FindRoot via ?NumericQ
  • From: "Peter Pein" <petsie at>
  • Date: Fri, 18 Jun 2004 02:13:06 -0400 (EDT)
  • References: <c9pddv$nuf$> <ca1dnr$hp5$> <ca92ag$ck$>
  • Sender: owner-wri-mathgroup at

"Mukhtar Bekkali" <mbekkali at> schrieb im Newsbeitrag
news:ca92ag$ck$1 at
> "Peter Pein" <petsie at> wrote in message
news:<ca1dnr$hp5$1 at>...
> > Hi Michael,
> > calling a function of 4 variables with 2 variables will not work. I've
> > difficulties to understand, why you do not solve all the 4 derivatives
> > one step? And since x1* and x2* depend on y1 and y2 you have to use the
> > chain rule, when building the derivatives w.r.t. y1 and y2, or did I get
> > sth. wrong?
> Here is an example that shows why I can't use one step to solve my
> problem:
> Support I have g1=(1-(x1-x2)/Q)x1 and g2=((x1-x2)/Q)x2, where Q=y1-y2;
> all four  variables belong to closed unit R+ interval.  Now if you
> take derivatives of g1 and g2 with respect to Q you would see that
> dg1/dQ>0 and dg2/dQ<0.  However, if you maximize g1 and g2 w.r.t. x1
> and x2 respectively then you would find that x1*=(2/3)Q and
> x2*=(1/3)Q.  Substituting this into original objective functions
> yields g1=(4/9)Q and g2=(1/9)Q, or both functions are not INCREASING
> functions in Q, or dg2/dQ changes its sign from negative to positive.
> This is due to corner solution.
> I know that out of 4 variables one is likely to be corner, namely
> y1=1, and it is y2,x1,x2 that I need to find in two stages.

Dear Mukhtar,
sorry for the delayed response (I caught a cold) and for not understanding.

1. are the four vars out of the closed interval [0,1], or the half-open
(0,1] which is implied by R+?
2. why do we have suddenly two functions? (not mentioned in the original
posting (OP))
3. the constraints to the variables have not been mentioned in the OP.
4. I misunderstood your intention. I thought of finding the global maximum
of g.
5. independently of using the compact interval or not, I'm afraid
dg1/dQ=x1(x1-x2)/Q^2 can take any real value, because y1-y2 is element of
(-1,1) (or [-1,1]), which contains zero and x1-x2 can take values between -1
and 1.
6. I don't understand the half sentence concerning increasing functions (is
this a given condition? an assumption?) and why it would be so bad if dg2/dQ
would change its sign? Anyway.

I tried (for the question in the OP) the following code:

g[x1_, x2_, y1_, y2_] := (y1 - (1 + x1 - x2)^2/(1 + (y1 - y2))^2)*x1*y2 +
   (y2 - (x1 - x2)/(y1 - y2))^2*x2*y1 (* just as example *)
y10 = 0.3; y20 = 0.7; x10 = 0.123; x20 = 0.567;
onestep[y10_, y20_] := Module[{x1star, x2star},
     {x10, x20} = {x1star, x2star} =
     {x1, x2} /. FindRoot[
        {Derivative[1, 0, 0, 0][g][x1, x2, y10, y20] == 0,
         Derivative[0, 1, 0, 0][g][x1, x2, y10, y20] == 0}, {x1, x10},
        {x2, x20}];
     Print[(ScientificForm[#1, {10, 4}] & ) /@
      {x10, x20, y10, y20}];
     {y1, y2} /.
     FindRoot[{Derivative[0, 0, 1, 0][g][x1star, x2star, y1, y2] == 0,
       Derivative[0, 0, 0, 1][g][x1star, x2star, y1, y2] == 0}, {y1, y10},
      {y2, y20}]]
FixedPoint[onestep @@ #1 & , {y10, y20}, 30]

which should do what you want.
Peter Pein, Berlin
to write to me, start the subject with [

  • Prev by Date: Re: Numerical integration inside numerical integration
  • Next by Date: Re: Iterate initial conditions
  • Previous by thread: Re: Symbolic use of numerical function FindRoot via ?NumericQ
  • Next by thread: Re: Eigensystem[] bug in Mathematica 5.0 (fixed in 5.0.1)