Re: Symbolic use of numerical function FindRoot via ?NumericQ

*To*: mathgroup at smc.vnet.net*Subject*: [mg48695] Re: Symbolic use of numerical function FindRoot via ?NumericQ*From*: mbekkali at iastate.edu (Mukhtar Bekkali)*Date*: Thu, 10 Jun 2004 02:44:45 -0400 (EDT)*References*: <c9pddv$nuf$1@smc.vnet.net> <ca1dnr$hp5$1@smc.vnet.net>*Sender*: owner-wri-mathgroup at wolfram.com

"Peter Pein" <petsie at arcor.de> wrote in message news:<ca1dnr$hp5$1 at smc.vnet.net>... > "Michael Beqq" <mbekkali at iastate.edu> schrieb im Newsbeitrag > news:c9pddv$nuf$1 at smc.vnet.net... > > I've use symbolical evalution of numerical functions all the time but > still > > have not mastered it. Now I got stuck on the following problem: > > > > I have a function g[x1,x2,y1,y2]. I need to solve for x1,x2 and y1,y2 > that > > maximize g[x1,x2,y1,y2] in 2 steps,- in step 1 I need to find > x1*=x1[y1,y2] > > and x2*=x2[y1,y2]. Then I substitute solutions, *'s, into g[.] to get > > g[y1,y2] and then solve for solve for y1* and y2*. This is a classical > > 2-stage problem in Economics. > > > > Is there a way to do that in Mathematica 5 using FindRoot command. I > tried > > using SetDelayed and ?NumericQ options however get error messages that the > > function g[.]'s is not a list of numbers with dimension {2} at {2 values}. > > > > Here is more precise code: > > > > g[x1_x2_,y1_,y2_]=g[x1,x2,y1,y2]"g is some function of 4 variables"; > > > {x1[y1_,y2_?Numeric],x2[y1_,y2_?Numeric]}:=Evaluate[{x1,x2}/.FindRoot[Evalua > > te[{D[g[x1,x2,y1,y2],x1]]==0,D[g[x1,x2,y1,y2],x2]]==0},{x1,x10},{x2,x20}]] > > (* another website showed different code, i.e. x[(y1_,y2_)?Number] but I > > assume it is just semantics*) > > > FindRoot[Evaluate[{D[g[y1,y2],y1]]==0,D[g[y1,y2],y2]]==0},{y1,y10},{y2,y20}] > > ] > > > > where {x10,x20,y10,y20}=some numbers. > > > > Thank you in advance. > > > > > 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.