MathGroup Archive 2004

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

Search the Archive

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.


  • Prev by Date: Re: what actually is in the WRI "functions" database?
  • Next by Date: RE: ListContourPlot and missing data
  • Previous by thread: Re: Symbolic use of numerical function FindRoot via ?NumericQ
  • Next by thread: Re: Symbolic use of numerical function FindRoot via ?NumericQ