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.