Mathematica 9 is now available
Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2006
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2006

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

Search the Archive

Symbolic Derivatives of Unspecified Functions

  • To: mathgroup at smc.vnet.net
  • Subject: [mg70665] Symbolic Derivatives of Unspecified Functions
  • From: misha <iamisha1 at comcast.net>
  • Date: Sun, 22 Oct 2006 01:20:23 -0400 (EDT)

My apologies for the long post.  A brief form of the question is the 
first sentence of the next paragraph.  I'm a very inexperienced 
Mathematica user and am probably expecting too much and/or being too 
lazy, but I was wondering whether Mathematica can do something I 
describe below, and, if so, how to implement it.  I also apologize for 
my likely misuse of notation, terminology, etc.

I think my question boils down to whether I can use Mathematica to take 
derivatives of functions that have no functional form.  It seems like 
this is possible, given an example I found in the help files.
D[f[g[x]],x]=f'[g[x]]g'[x]

For example, as a first shot, I tried,
In[1]:= r[qi_, qj_]=r[qi,qj]
$ IterationLimit::itlim :  Iteration limit of 4096 exceeded. More...
Out[1]:= Hold[r[qi,qj]]
In[2]:= qi[gi_, gj_]=qi[gi,gj]
$ IterationLimit::itlim :  Iteration limit of 4096 exceeded. More...
Out[2]:= Hold[qi[gi,gj]]
In[3]:= qj[gi_, gj_]=qj[gi,gj]
$ IterationLimit::itlim :  Iteration limit of 4096 exceeded. More...
Out[3]:= Hold[qj[gi,gj]]
In[4]:= D[r[qi[gi,gj],qj[gi,gj]],gi]
$ IterationLimit::itlim :  Iteration limit of 4096 exceeded. More...
$ IterationLimit::itlim :  Iteration limit of 4096 exceeded. More...
$ IterationLimit::itlim :  Iteration limit of 4096 exceeded. More...
General::stop:
	Further output of $IterationLimit::itlim will be suppressed during this 
calculation. More...
Out[4]:= D[Hold[r[Hold[qi[gi,gj]], Hold[qj[gi,gj]]]],gi]

I would like something like,
r_1*d{qi}/d{gi} + r_2*d{qj}/d{gi}, where r_1 is the partial derivative 
of r w.r.t. its first argument, r_2 is the partial derivative of r 
w.r.t. its second argument.

So, say I have some functions that assume little or no specific 
functional form.
Di=[(beta*(gi+gj))/(1-theta)][gi/(gi+gj) + theta*gj/(gi+gj)]
alpha=beta/(1-theta) (obviously this is specific)
Ci(Gi)=ci(Gi)*qi, (ci(Gi) has no specific form)
Gi(gi, gj, beta, theta) = (1 - alpha)*gi + alpha*theta*gj
pi_i(gi,gj,qi,qj,beta,theta)=ri(qi,qj)-ci(Gi)*qi-(v*gi^2)/2, where ri 
and ci do not have functional forms.  (I'd also like to work with a less 
specific form of (v*gi^2)/2, but I'll set that aside for now...).

I want to take derivatives, such as

derivative of pi_i with respect to qi, a first order condition, or FOC

(1) d{pi_i}/d{qi} = 0

then the derivative of (1) w.r.t. qi and qj, and the total derivative of 
(1) w.r.t gi, assuming qi and qj are functions of gi (and gj).

I get some results that include expressions with "Hold" and problems 
with iterations.

Here are more details about the above problems and what I want 
Mathematica to do...

This may be obvious, but this is a two-stage oligopoly model with 
investment.  With specific functional forms one can do something like 
the following:

Solving the second (i.e., last) stage of the game in Cournot competition 
(i.e., firms i and j maximize profit, pi_i, pi_j, choosing qi and qj, 
respectively) will yield expressions for qi and qj in terms of the other 
variables, gi, gj, beta, and theta.  This is done by setting the first 
derivative of pi_i w.r.t. qi equal to zero, then solving for qi.  Then, 
using these expressions, you move to the first stage and solve for the 
optimal investments, gi and gj, by substituting the above qi and qj into 
pi_i, setting the first derivative of pi_i w.r.t. gi to zero, and 
solving for gi, yielding expression in terms of beta and theta.

However, without assuming functional forms, it gets a little 
hairier...making a number of common assumptions, such as d{ri}/d{qj}<0, 
d{ri}/(d{qi}d{qj})<0, d{ci}/d{G}<0, d^2{ci}/d{G^2} >0, symmetry 
(d{ri}/(d{qi}d{qj}) = d{rj}/(d{qj}d{qi}) = r_ij, d^2{ri}/d{qi^2} = 
d^2{rj}/{qj^2} = r_ii, and some others, gets a FOC that looks something like

(2) d{pi_i}/d{qi}=d{ri}/d{qi}-d{ci}/d{qi} = 0

Then, since there's no functional form, one obviously cannot solve for 
qi, so the goal is to find the slope of the "reaction function", 
d{qj}/d{qi}, which turns out to be (in this model)

(3) d{qj}/d{qi}=-(d^2{ri}/d{qi^2})/(d^2{ri}/d{qi}d{qj}).

This comes from totally differentiating (2) w.r.t. qi and qj.

Then, one can solve the the changes in qi and qj w.r.t. changes in gi,
d{qi}/d{gi} and d{qj}/d{gi}, by totally differentiating (2) and its 
equivalent for pi_j w.r.t. gi.

There is far more than this, but if I can get this done in Mathematica, 
my life will be far easier.  Ideally, I can get "nice" expressions that 
can be exported into a TeX file via Mathematica.

Many thanks in advance for reading and responding.

Misha



  • Prev by Date: Re: Re: Programming style: postfix/prefix vs. functional
  • Next by Date: RE: Re: Re: Programming style: postfix/prefix vs. functional
  • Previous by thread: Re: Re: Wolfram Workbench
  • Next by thread: Re: Symbolic Derivatives of Unspecified Functions