Re: Symbolic use of numerical function FindRoot via ?NumericQ
- To: mathgroup at smc.vnet.net
- Subject: [mg48837] Re: Symbolic use of numerical function FindRoot via ?NumericQ
- From: "Peter Pein" <petsie at arcor.de>
- Date: Fri, 18 Jun 2004 02:13:06 -0400 (EDT)
- References: <c9pddv$nuf$1@smc.vnet.net> <ca1dnr$hp5$1@smc.vnet.net> <ca92ag$ck$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
"Mukhtar Bekkali" <mbekkali at iastate.edu> schrieb im Newsbeitrag news:ca92ag$ck$1 at smc.vnet.net... > "Peter Pein" <petsie at arcor.de> wrote in message news:<ca1dnr$hp5$1 at smc.vnet.net>... > > Hi Michael, > > calling a function of 4 variables with 2 variables will not work. I've got > > difficulties to understand, why you do not solve all the 4 derivatives in > > 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 [